JSP笔记
最终都会编译成Servlet
组成部分
-
静态部分
:标准的 HTML 标签、静态的页面内容,这些内容与静态 HTML 页面相同。 -
动态部分
:受 Java 程序控制的内容,这些内容由 Java 脚本动态生成。
- JSP 文件必须在 JSP 服务器内运行。
- JSP 文件必须生成 Servlet 才能执行。
- 每个 JSP 页面的第一一个访问者速度很慢,因为必须等待 JSP 编译成 Servlet。
- JSP 页面的访问者无须安装任何客户端,甚至不需要可以运行 Java 的运行环境,因为 JSP 页面输送到客户端的是标准 HTML 页面。
JSP声明
JSP 声明用于声明变量和方法。
不能使用 abstract 修饰声明部分的方法,因为抽象方法将导致;JSP 对应 Servlet 变成抽象类,从而导致无法实例化。
<%! 声明部分 %>
<%!
public int count;
public String info(){
return "hello";
}
%>
输出JSP表达式
JSP 提供了一种输出表达式值的简单方法
<%=表达式%>
<%=count %>
<%=info() %>
JSP脚本
JSP 脚本里可以包含任何可执行的的 Java 代码
<% %>
JSP 小脚本部分也可以声明变量,但在 JSP 脚本部分声明的变量是局部变量,但不能使用 private、public 等访问控制符修饰,也不可使用 static 修饰。JSP脚本里不能定义方法
<%
for (int i 0; i <'10; i++){
//todo
}
%>
<p><%=i%></p>
<%}%>
JSP的3个编译指令
-
page
:该指令是针对当前页面的指令, -
include
:用于指定包含另一个页面。 -
taglib
:用于定义和访问自定义标签。
<%@ 编译指令名 属性名="属性值"....%>
page指令
JSP 内建了异常机制支持,所以 JSP 可以不处理异常,即使是 checked 异常。
-
language
:声明当前 JSP 页面使用的脚本语言的种类,因为页面是 JSP 页面,该属性的值通常都是 java,该属性的默认值也是 java,所以通常无须设置。 -
extends
:指定 JSP 页面编译所产生的 Java 类所继承的父类,或所实现的接口。import:用来导入包。下面几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang. *、javax.servlet. *、javax.servlet.jsp. *、javax.servlet.http. *。 -
session
:设定这个 JSP 页面是否需要 HTTP Session。 -
buffer
:指定输出缓冲区的大小。输出缓冲区的 JSP 内部对象 -
out
: 用于缓存 JSP 页面对客户浏览器的输出,默认值为 8 KB,可以设置为 none,也可以设置为其他的值,单位为 KB. -
autoFlush
:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为 true 时为正常输出;如果设置为 false,则会在 buffer 溢出时产生一个异常。 -
info
:设置该 JSP 程序的信息,也可以看做其说明,可以通过 Servlet.getServletInfo()方法获取该值。如果在 JSP 页面中,可直接调用 getServletInfo()方法获取该值,因为 JSP 页面的实质就是 Servlet. -
errorPage
:指定错误处理页面。如果本页面产生了异常或者错误,而该 JSP 页面没有对应的处理代码,则会自动调用该属性所指定的 JSP 页面。 -
isErrorPage
:设置本 JSP 页面是否为错误处理程序。如果该页面本身已是错误处理页面,则通常无须指定 errorPage 属性。 -
contentType
:用于设定生成网页的文件格式和编码字符集,即 MIME 类型和页面字符集类型, 默认的MIME类型是text/html;默认的字符集类型为IS0-8859-1。
*pageEncoding
:指定生成网页的编码字符集。
include指令
使用 include 指令,可以将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP语句。这是个静态的 include 语句,它会把目标页面的其他编译指令也包含进来。
<%@include file="relativeURLSpec" %>
JSP的7个动作指令
-
jsp: forward
:执行页面转向,将请求的处理转发到下一个页面。
<jsp:forward page="forward-result.jsp">
<jsp: param name="age" value="29"/>
</jsp:forward>
跳转结果页面可以使用内置对象获取age
<%=request.getParameter("age")%>
-
jsp: param
:用于传递参数,必须与其他支持参数的标签一起使用,如:jsp:include,jsp:forward,jsp:plugin。 -
jsp: include
:用于动态引入一个 JSP 页面。
include 指令是一个动态 include 指令,也用于包含某个页面,它不会导入被 include 页面的编译指令,仅仅将被导入页面的 body 内容插入本页面。
-
jsp: plugin
:用于下载 JavaBean 或 Applet 到客户端执行。 -
jsp: useBean
:创建一个 JavaBean 的实例。 -
jsp: setProperty
:设置 JavaBean 实例的属性值。 -
jsp: getProperty
:输出 JavaBean 实例的属性值。-
page
:该 JavaBean 实例仅在该页面有效。 -
request
:该 JavaBean 实例在本次请求有效。 -
session
:该 JavaBean 实例在本次 session 内有效。 -
application
:该 JavaBean 实例在本应用内一直有效。
-
<jsp: useBean id="name" class="classname" scope="page | request|session| application"/>
name 属性确定需要输出的 JavaBean 的实例名;property 属性确定需要输出的属性名。
静态导入和动态导入区别
- 静态导入是将被导入页面的代码完全融入,两个页面融合成-个整体 Servlet;而动态导入则在:Servlet 中使用 include 方法来引入被导入页面的内容。
- 静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的 body 内容。
- 动态包含还可以增加额外的参数。
JSP脚本中的9个内置对象
-
application
: javax servlet.ServletContext 的实例,该实例代表 JSP 所属的 Web 应用本身,可用于 JSP 页面,或者在 Servlet之间交换信息。常用的方法有 gettribute (String attName)、setAttribute (String attName, String attValue)和 getlnitParameter (String paramName)等。 -
config
: javax.Servlet.ServletConfig 的实例,该实例代表该 JSP 的配置信息。常用的方法有 getInitParameter (String paramName)和 getInitParametermames()等方法。事实上,JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在 Servlet 中有效。 -
exception
: java.lang.throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令 page 的 isErrorPage 属性为 true 时,该对象才可以使用。常用的方法有 getMessage()和 printStackTrace()等。 -
out
: javax.servlet.jsp.JspWriter 的实例,该实例代表 JSP 页面的输出流,用于输出内容,形成 HTML 页面。 - `page:代表该页面本身,通常没有太大用处。也就是 Servlet 中的 this,其类型就是生成的 Servlet 类,能用 page 的地方就可用 this。
-
pageContext
: javax.servlet.jsp.PageContext 的实例,该对象代表该 JSP 页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有 getServletContext()和 getServletConfig()等。 -
request
: javax.serlet.http.HttpServletRequest 的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。常用的方法有 getParameter (String paramName)、getParameterValues (String paramName)、setAtribute (String attrName, Object attrValue)、getAttribute (String attrName)和 setCharacterEncoding (String env)等。 -
response
: javax.serlet.http.HttpServletResponse 的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用 out 对象,除非需要生成非字符响应。而 response 对象常用于重定向,常用的方法有 getOutputStream()、sendRedirect (java. Lang. String location)等。 -
session
: javax.servlet.http.HttpSession 的实例,该对象代表一次会话。当客户端浏览器与站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。常用的方法有:getAttribute (String attrName)、setAttribute (String attrName, Object attrValue)等。
application对象
1. 让多个JSP,Servlet共享数据
application 通过 setAttribute(String attrName, Object value)方法将一个值设置成 application 的 attrName 属性,该属性的值对整个 Web 应用有效,因此该 Web 应用的每个 JSP 页面或 Servlet 都可以访问该属性,访问属性的方法为 getAttribute (String attrName)。
- jsp
<%application.setAttribute("counter",1);%>
<%=application.getAttribute("counter");%>
- servlet
ServletContext sc = getServletConfig().getServletContext();
由于在 Servlet 中并没有 application 内置对象,在 JSP 页面中可通过 application 内置对象访问该实例,而 Servlet 中则必须通过代码获取。
2. 获取Web应用配置参数 web.xml
<%
String driver = application.getInitParameter ("driver");
%>
web.xml的配置
<context-param>
<param-name>driver</param-name>
<param-value>iOS</param-value>
</context-param>
config对象
config 对象代表当前JSP配置信息
<%=config.getInitParameter("age")%>
exception对象
JSP 脚本包含的所有可能出现的异常都可交给错误处理页面处理。也只有错误页面运行如此
异常类型是:<%=exception.getClass () %> <br/>
异常信息是:<%=exception.getMessage () %> <br/>
out对象
out 对象代表一个页面输出流,通常用于在页面上输出变量值及常量。out 是个页面输出流,负责输出页面表格及所有内容,
out.print("<br/>");
pageContext对象
这个对象代表页面上下文,该对象主要用于访问 JSP 之间的共享数据。使用 pageContext 可以访问page、request、session、application 范围的变量。
-
getAttribute (String name)
:取得 page 范围内的 name 属性。 -
getAttribute (String name, int scope)
:取得指定范围内的 name 属性,其中 scope 可以是如下 4 个值。-
PageContext.PAGE_SCOPE
:对应于 page 范围。 -
PageContext.REQUEST_ SCOPE
:对应于 request 范围。 -
PageContext.SESSION_ SCOPE
:对应于 session 范围。 -
PageContext.APPLICATION_ SCOPE
:对应于 application 范围。
-
pageContext.setAttribute ("request2", "hello",pageContext.REQUEST_ SCOPE);
获取其他内置对象
-
ServletRequest getRequest()
:获取 request 对象 -
ServletResponse getResponse()
:获取 response 对象。 -
ServletConfig getServletConfig()
:获取 config 对象。 -
ServletContext getServletContext()
:获取 application 对象。 -
HttpSession getSession()
:获取 session 对象。
request对象
request 对象是 JSP 中重要的对象,每个 request 对象封装着一次用户请求,并且所有的请求参数都被封装在 request 对象中,因此 request 对象是获取请求参数的重要途径。
1. 获取请求头/请求参数
-
String getParameter (String paramName)
:获取 paramName 请求参数的值。 -
Map getParameterMap()
:获取所有请求参数名和参数值所组成的 Map 对象。 -
Enumeration getParameterNames()
:获取所有请求参数名所组成的 Enumeration 对象。 -
String [] getParameterValues (String name)
:paramName 请求参数的值,当该请求参数有多个值时,该方法将返回多个值所组成的数组。
访问请求头 -
String getHeader (String name)
:根据指定请求头的值。 -
java.util.Enumeration <String> getHeaderNames()
:获取所有请求头的名称。 -
java.util.Enumeration <String> getHeaders (String name)
:获取指定请求头的多个值。 -
int getIntHeader (String name)
:获取指定请求头的值,并将该值转为整数值。 -
setCharacterEncoding ("GBK")
:设置 request;编码所用的字符集。
2. 操作request返回的属性
-
setAttribute (String attName, Object attValue)
:将 attValue 设置成 request 范围的属性。 -
Object getAttribute(String attName)
:获取 request 范围的属性。
3. 执行forward 或 include
-
forward(ServletRequest request, ServletResponse response)
:执行 forward。 -
include(ServletRequest request, ServletResponse response)
:执行 include。
response对象
response 代表服务器对客户端的响应。
1. response 响应生成非字符响应
<%@ page contentType="image/png" language="java"%>
2. 重定向
重定向是 response 的另外一个用处,与 forward 不同的是,重定向会丢失所有的请求参数和 request 范围的属性,因为重定向将生成第二次请求,与前一次请求不在同一个 request 范围内,所以发送一次请求的请求参数和 request 范围的属性全部丢失。
<%response.sendRedirect ("redirect-result.jsp");%>
3. 增加Cookie
-
void addCookie (Cookie cookie)
:增加 Cookie。 -
Cooke[] getCookies()
获取cookes列表 -
setMaxAge(int age)
设置Cookies生成期限
4. session对象
session 对象也是一个非常常用的对象,这个对象代表一次用户会话,session 范围内的属性可以在多个页面的跳转之间共享。
-
setAttribute(String attName, Object attValue)
:设置 session 范围内 attName 属性的值为 attValue. -
getAttribute(String attName)
:返回 session 范围内 attName 属性的值。
网友评论