JSP基础

对JSP基础内容的整理。

作者 jooop 日期 2016-10-14
JSP基础

JSP基本语法:

Declaretion 声明

<%! %> 成员变量声明,只在servlet生成时声明一次,存在于整个servlet生命周期。(可声明方法)
<% %> 局部变量声明,每访问页面一次重新声明一次。(不可在其中声明方法)


Scriptlet 程序段

<%程序代码区%> 可放入任何的Java程序代码


Expression 表达式

<%= %>
=后必须是字符串变量或者可以被转换成字符串的表达式,不需要以;结束


Comment 注释

<!-- html注释 --> (在客户端浏览器中可以看到)
<%--.......--%>
<%//......%>
<%/*......*/%>

Directives 指令(编译期间执行的指令)

<%@Directive属性="属性值"%>

常见Directive:

page:

指明和JSP Container的沟通方式。
eg:

<%@page import="importList"| --引入java类
errorPage="errorPageUrl"| --当前页面出错后所显示的页面内容
isErrorPage="true|false"| --当前页面是否是显示错误的页面
contenType="contentTypeInfo"
%>

include:

将指定的JSP程序或者HTML文件包含进来(会在JSP转换时期先将file设定的文件包含进来,然后开始转换及编译)

  • 用法:

    <%@include file="fileURL%">
  • 特点:

    • 一般用于非动态的代码,不能在fileURL后面传参数
    • 执行效率比较高

taglib

JSP API允许您自定义JSP标签,这些看起来像HTML或XML标签的玩意就是用户自定义标签集了。
Taglib指令引入自定义标签集,识别库路径,并且鉴别自定义标签。

Taglib指令的语法格式如下:
<%@ taglib uri="uri" prefix="prefixOfTag" >
uri属性告诉容器位置,prefix属性告诉容器多少位是自定义标签的标记。
等价的XML语法如下:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

当使用一个自定义标签的时候,典型的格式为。prefix与prefix属性所指定的前缀一样,tagname就是标签名称了。


Action动作指令(运行期间执行的指令)

jsp:useBean

  • 基本要素:

    • 必须要有一个无参数的构造器。在JSP元素创建Bean时会调用空构造器。
    • Bean类应没有任何公共实例变量,不许直接访问实例变量。
    • 通过getter/setter方法读/写变量的值。
  • 用法

    <jsp:useBean id="beanName" scope="page|request|session|application" class="package BeanClass" type="typeName" />
    //id:对象实例名称
    //scope:Bean的有效范围,默认page.
    //class:Bean类的名称
    //type:Bean实例类型,可以是本类,或者其父类,或者实现的接口,默认本类。
    <jsp:useBean...>
    <jsp:setProperty...>
    <jsp:getProperty...>
    </jsp:useBean>
    /* jsp:setProperty格式:
    <jsp:setProperty name="beanName"
    property="propertyName"|property="*"
    value="property value"|param="paramName"/>
    *若为上一个页面form提交过来的数据,可以用property="*"。
    //注:若request传输后输出乱码,可以使用request命令在获取前转码。request.setCharacterEncoding("GBK");
    *相当于beanName.setPropertyName(value)方法调用(setXxx()方法)。
    eg: <jsp:setProperty
    name="entry"
    property="itmeID"
    value="<%=request.getParameter("itmeID")%>" //等于param="itmeID"
    />
    作用:从request中读取itmeID,调用setItemID方法传入property的itemID
    jsp:getProperty格式:
    <jsp:getProperty name="beanName"/>
    *相当于beanName.getPropertyName()方法调用(getXxx()方法)。
    *调用原理:反射机制。
    */
  • 注:
    javaBean尽量放在包中使用,不要使用裸体类。

    eg:

    • javaBean中定义包:package bean;
    • 编译后的bean文件放置目录WEB-INF\classes\bean
    • jsp中导入<%@ page import=”bean.*” %>

jsp:include

该指令在转换期间不会被编译,只有当客户端请求时期被执行到才会被动态的编译载入

  • 用法:
<jsp:include page="URLSpec" flush="true"/>
<jsp:include page="URLSpec" flush="true">
<jsp:param name="ParamName" value="paramValue"/>
</jsp:include>
//jsp:param:用来设定include对应的参数和值

jsp:forward

用于将一个jsp的内容传递到page所指定的JSP程序或者Servlet中处理(URL)

  • 用法:
<jsp:forward page="urlSpec" flush="true"/>
<jsp:forward page="urlSpec">
<jsp:param name="paramName" value="paramValue"/>
<jsp:forward>
  • 特点:
    • 执行Forward的页面和forward跳转到的页面用的是同一个request,服务器端直接将请求传递给目标页面。
    • 与之相对应的是response.sendRedirect,该方法向客户端返回待跳转页面的地址,客户端重新向待跳转页面发起请求。
    • Forward可以直接在本URL后添加参数并传递给待跳转页面,response.sendRedirect不能在本URL后添加参数。

jsp:plugin

执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它。


内置对象

out

println(): 向客户端输出各种类型数据
newLine(): 输出一个换行符
close(): 关闭输出流
flush(): 输出缓冲区中的数据
clearBuffer(): 清除缓冲区里数据,同时输出到客户端
clear(): 清除缓冲区里数据但不输出到客户端
getBufferSize():返回缓冲区的大小

request

调用JSP页面的请求。通常request对象是javax.servlet.http.HttpServletRequest接口的一个实例。

getMethod(): 返回客户端向服务器端传送数据的方法。
getParameter(String paramName): 返回客户端向服务器端传送的参数值,参数由paramName指定。
getParameterValues(String name):获得客户端传给服务器端的所有参数的名字,结果是枚举类型数据(Enumeration)。
getRequestURL(): 获得发出请求字符串的客户端地址
getRemoteAddr(): 获得客户端的IP地址
getRemoteHost(): 获得客户端机器名称
getServerName(): 获得额服务器的名字
getServletName(): 客户端所请求的脚本文件路径
getServerPort(): 获得服务器端的端口

response

返回给客户端的响应,是javax.servlet.http.HttpServletRequest接口的一个实例。
常用于设置HTTP标题、添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码URL。

addCookie(Cookie cookie): 添加一个Cookie对象,用于在客户端保存特定信息。
addHeader(String name String value): 添加HTTP头信息,该Header信息将发送到客户端。
containsHeader(String name): 判断指定名字的HTTP文件头是否存在。
sendError(int): 向客户端发送错误的信息。(错误码)
sendRedirect(String url): 重定向JSP文件。
和<jsp:forward>的区别:
sendRedirect通过客户端发起二次申请,不同的request对象
jsp:forward是同一个request在服务器内部转发
setContentType(String contenType): 设置MIME类型和编码方式。

pageContext

session

application

config

从servlet文件跳转到jsp:
getServletConfig().getServletContext().getRequestDispatcher("/目标路径及跳转文件").forward(request,response)|.include()。
从jsp跳转到servlet:
<jsp:forward page="/目标路径及跳转文件" />

exception

page