标签:
幻灯片1
JavaServer Pages(JSP)
网页程序设计
幻灯片2
JSP简介
l 程序片段和JSP标记可以实现操作数据库、重新定向网页以及发送电子邮件等操作
l 服务器端组件,需要Web Container的支持
2015-7-30
2
幻灯片3
JSP生成页面过程
2015-7-30
3
幻灯片4
JSP工作原理
l JSP页面的具体执行步骤
2015-7-30
4
幻灯片5
缓存机制
l 在原来的JSP页面没有发生改变的情况下,任何浏览器向JSP容器发出对该JSP页面的再次请求时,会直接把响应的输出结果发送到浏览器端
2015-7-30
5
幻灯片6
JSP页面生命周期
l JSP页面生命周期包括两个阶段
l 转换阶段(Translation Phase)
l 执行阶段(Execution Phase)
2015-7-30
6
幻灯片7
转换阶段
l 将JSP页面转换成实现类(Servlet)
l 一般是在接收和处理客户端请求JSP页面时转换
l 也可以在JSP页面初始配置到容器时转换。
l 每个JSP页面最终都会由JSP容器创建对应的实现类。
l JSP容器检查JSP页面语法、生成对应JSP页面的Java实现类(Servlet)的Java源码(.java),并将源码编译成类的字节码文件(.class)。
l 转换阶段生成的页面实现类及对应的编译结果存放位置:work\Catalina\localhost\应用程序名\org\apache\jsp
2015-7-30
7
幻灯片8
执行阶段
l Web容器将请求定位到相应的实例,处理请求、生成响应结果,返回给客户端
2015-7-30
8
幻灯片9
JSP文件结构及主要标签
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*“ %>
...
<HTML>
<BODY>
其他 HTML 语言
<%
符合JAVA 语法的 JAVA 语句
%>
其他 HTML 语言
</BODY>
</HTML>
幻灯片10
JSP示例(Hello.jsp)
<HTML>
<BODY>
你好<br>
你好<br>
</BODY>
</HTML>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*"%>
<HTML>
<BODY>
<%
for ( int i=0; i<2; i++ )
{
%>
你好<br>
<%
}
%>
</BODY>
</HTML>
幻灯片11
HttpJspBase类的继承结构
l java.lang.Object
l javax.servlet.GenericServlet
l javax.servlet.http.HttpServlet
l org.apache.jasper.runtime.HttpJspBase
l Jsp的本质是Servlet
幻灯片12
JSP执行过程
l
servlet
servlet 分析器
*.jsp
*.java
*.class
幻灯片13
JSP
l 执行过程
幻灯片14
JSP示例(Hello_Date.jsp)
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;
charset=gb2312" %>
<HTML>
<BODY>
你好,今天是
<%
Date today=new Date();
%>
<%=today.getDate()%>号,
星期<%=today.getDay()%>
</BODY>
</HTML>
import java.util.*;
response.setContentType("text/html;
charset=gb2312");
out = pageContext.getOut();
out.write(“\r\n\r\n<HTML>\r\n
<BODY>\r\n你好,今天是\r\n");
Date today=new Date();
out.print(today.getDate());
out.write("号,星期");
out.print(today.getDay());
out.write(" \r\n </BODY>\r\n</HTML>\r\n ");
servlet文件
JSP文件
幻灯片15
JSP语法概述
l JSP元素分为三种不同的类型
编译器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>
脚本语法(SCRIPTING) 例如:<% int i; %>
动作语法(ACTION) 例如: <jsp:forward>,<jsp:getProperty>,<jsp:include>
幻灯片16
脚本语法
l 脚本语法包括
l “HTML注释”:<!— comments -->
l “隐藏注释”:<%-- comments --%>
l “声明”
l “表达式”
l “脚本段”
幻灯片17
JSP注释
l HTML格式注释
l 浏览器端可以看到注释的内容
l <!-- 这里是HTML格式的注释 - ->
l JSP代码注释
l 一行或多行
l <%- - 开发人员专用注释标记 - -%>
l Java语言注释
l 单行注释 //;多行 /* */
l Java源文件会保留这些注释
l 例:expression.jsp
2015-7-30
17
幻灯片18
HTML注释
l JSP 语法格式如下:
l <!-- comment [ <%= expression %> ] --> 或
l <!-- 注释 [<%= 表达式 %> ] -->
l 这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
幻灯片19
JSP基本元素
l JSP页面组成
l 模板数据:指的是JSP引擎不处理的部分,例如代码
l 中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器
l JSP元素:是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。
l JSP容器支持的元素类型有三种
l 指令元素(Directive Elements)
l 行为元素(Action Elements)
脚本元素(Scripting Elements)
2015-7-30
19
幻灯片20
JSP基本元素
l <html>
<head>
<title>Hi-JSP实验</title>
</head>
<body>
<%
String Msg = "This is JSP test.";
out.print("Hello World!");
%>
<h2> <%=Msg%> </h2>
</body>
</html>
Template data
JSP元素
幻灯片21
指令元素
l 发生在转换阶段,用来影响Web容器的行为
l 语法格式:
l <%@ 指令名 属性1=”值1” 属性2=”值2” ...%>
l JSP中包括三种指令:
l page指令
l taglib指令
include指令
2015-7-30
21
幻灯片22
page指令
l page指令定义JSP页面相关的属性。语法格式如下:
l <%@ page 属性1=”值1” 属性2=”值2” ... %>
l page指令是位置无关的,但由于属性pageEncoding和contentType决定页面的字符编码,因此必须在页面的开始设置。
l page指令的属性:language、extends、import、session、buffer、autoFlush、isThreadSafe、info、errorPage、isErrorPage、contentType、pageEncoding和isELIgnored等。
2015-7-30
22
幻灯片23
page指令
l 语法格式:
l <%@ page
l [language=“java”]
l [info=“text”]
l [import=“{package.class|package.*},…”]
l [session=“true|false”]
l [contentType=“mimeType[;charset=characterSet]”|”text/html;charset=8859-1”]
l [pageEncoding=“GBK|8859-1|……”]
l [errorPage=“relativeURL”]
l [isErrorPage=“true|false”]
l [buffer=“none|8kb|sizekb”]
l [autoFlush=“true|false”]
l [isELIgnored=“true|false”]
l %>
2015-7-30
23
幻灯片24
page指令
l language属性
l 定义在转换单元中声明、脚本片段和表达式中所使用的语言
l 默认值是java,目前JSP中只能使用java
l 可以不写,如果写必须写在声明、脚本片段和表达式的前面
l 例如:<%@ page language=“java” %>
2015-7-30
24
幻灯片25
page指令
l info属性
l 通常用于定义JSP页面的描述信息。
l 属性值是任意的一个字符串,该字符串与页面一起编译。
l 属性值使用getServletInfo()方法得到。
l 例:infotest.jsp
2015-7-30
25
幻灯片26
page指令
l import属性
l 用于导入JSP文件中要使用到的java包或者类的列表。是唯一一个可以重复使用的属性。
l JSP中默认的导入列表是:java.lang.*;javax.servlet.* ;javax.servlet.jsp.* ;javax.servlet.http.*
l 例如:<%@ page import=“java.io.*,java.util.*” %>
2015-7-30
26
幻灯片27
page指令
l session属性
l 属性值为“true”,在页面中可以使用内部对象session,
l 属性值为“false”,在页面中不允许使用session,
l session的默认值为“true”。
2015-7-30
27
幻灯片28
page指令
l contentType属性
l 用于设置返回浏览器网页的内容类型和字符编码格式。内容类型包括:text/plain,text/html(默认),application/x-msexecl,application/msword等。字符编码格式默认为西欧字符编码ISO-8859-1。
l 如果需要在返回浏览器的HTML页面中显示中文,我们经常会用到字符集GBK。
l 例如:<%@page contentType=“text/html;charset=GBK” %>
2015-7-30
28
幻灯片29
page指令
l pageEncoding属性
l 指定JSP页面的字符编码,默认为ISO-8859-1
l 例如:
l <%@ page pageEncoding=“GBK”%>
2015-7-30
29
幻灯片30
page指令
l errorPage属性
l 指定当前页面产生异常时的处理文件
l <%@ page errorPage=“Error.jsp”%>
l isErrorPage 属性
l 指定当前JSP页面是否可以作为另一个JSP页面的错误处理页面
l 如果值为“true”,说明是异常处理页面,能够使用exception对象。
l 如果isErrorPage属性的值为“false”,说明不是异常处理页面,不能够使用exception对象。
l isErrorPage的默认值是false 。
l 例:testError.jsp 和 Error.jsp
2015-7-30
30
幻灯片31
page指令
l buffer属性
l 指定处理页面输出内容时的缓冲区大小。
l 默认值是8kb。
l 如果buffer的取值为“none”,输出将不使用缓冲,所有输出都直接写到客户端。
l 置缓冲区的大小只能是kb的整数倍,页面的输出首先被写入指定大小的缓冲区内。当缓冲区变满时如何处理取决于autoFlush属性的值
l buffer指定的值只是缓冲区的最小值,JSP容器选择的缓冲区可能比指定的大。
例如:<%@ page buffer=“16kb”%>
2015-7-30
31
幻灯片32
page指令
l autoFlush属性
l autoFlush属性控制的是当页面输出进入缓冲区并且缓冲区变满的情况。
l 如果autoFlush属性取值“true”,那么缓冲区变满之后需要强制输出。
l 如果autoFlush属性取值“false”,那么缓冲区变满之后将引发一个异常。
l autoFlush属性的默认值是“true”。
2015-7-30
32
幻灯片33
page指令
l isELIgnored属性
l JSP2.0中引入了表达式语言(Expression Language,EL),利用EL可以在不使用脚本的情况下构造动态网页。
l isELIgnored属性值为”true”时,会禁止EL表达式的计算。
2015-7-30
33
幻灯片34
声明
l JSP 语法格式如下:
l <%! declaration; [ declaration; ] ... %> 或
l <% 声明; [声明; ] ... %>
幻灯片35
声明
<%@ page language=”java” import=”java.util.*” %>
<html>
<head>
<title> test.jsp </title>
</head>
<body>
<%! int i = 0; %>
<% int a, b, c; %>
<%! Date date; %>
</body>
</html>
幻灯片36
表达式
l 用于在页面上输出信息,语法格式如下:
l <%= expression %>
幻灯片37
脚本段
l JSP 语法格式如下:
l <% code fragment %> 或
l <% 代码 %>
幻灯片38
包含指令
l include指令:向当前页中插入一个文件的内容。
l JSP 语法格式如下:
l <%@ include file="relativeURL" %> 或
l <%@ include file="相对位置" %>
幻灯片39
JSP内置对象
l JSP 有以下九种内置对象,包括:
l ·request,请求对象
l ·response,响应对象
l ·pageContext,页面上下文对象
l ·session,会话对象
l ·application,应用程序对象
l ·out,输出对象
l ·config,配置对象
l ·page,页面对象
l ·exception,例外对象
幻灯片40
幻灯片41
2. 隐含对象
l JSP 2.0中有9个隐含对象
JSP隐含对象 |
实现类 |
对象说明 |
request |
HttpServletRequest |
请求信息 |
response |
HttpServletResponse |
响应信息 |
out |
JspWriter |
一个带缓冲的页面输出流对象 |
session |
HttpSession |
HTTP联机会话信息 |
application |
ServletContext |
服务端Servlet上下文信息 |
pageContext |
PageContext |
当前JSP页面的上下文信息 |
config |
ServletConfig |
JSP页面的Servlet配置信息,由Web应用配置描述文件(web.xml)指定。 |
page |
Object |
如同Java中的this |
exception |
Throwable |
异常处理信息 |
2015-7-30
41
幻灯片42
2. 隐含对象
l 隐含对象是被JSP容器自动定义的变量,具体位置在JSP页面的servlet的_jspService()方法中。因此,仅仅表达式和scriptlet可以使用隐含对象,而声名却不能。
2015-7-30
42
幻灯片43
(1)request对象
l 包括如下类型的方法:
l 请求有效的属性操作
l 获取HTTP Header信息
l 获取HTTP请求参数,如HTML表单提交的参数信息
l 获取服务器端相关信息,包括服务器名字、地址和端口等
l 获取客户端相关信息,包括客户端名字、地址和端口等
l 获取协议版本、协议
l 获取数据及数据相关信息的操作
l 会话相关方法
l 例1:requestHeader.jsp
l 例2:requestGet.jsp
2015-7-30
43
幻灯片44
(1)request对象
l request” 对象代表的是来自客户端的请求,关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值
l request.getParameter(“parameterName”)
l 返回给定参数的值,如果参数不存在则返回null。
l String name=request.getParameter("name");
2015-7-30
44
幻灯片45
(1) request对象
l getParameterValues(“parameterName”)
l 返回值类型: 字符串数组 String[]
l 能够取出参数的多个值,主要用于复选框值的获取。
l String mybox[]; mybox=request.getParameterValues("mybox");
l if(mybox!=null) {
l for(int i=0;i<mybox.length;i++)
l out.println(mybox[i]);
}
2015-7-30
45
幻灯片46
(1) request对象
l setCharacterEncoding(String)
l 设置请求信息所用的字符编码格式,默认为西欧字符编码ISO-8859-1,如果想正确获取请求中的中文信息,需要将字符编码格式设置为GBK或者gb2312。
2015-7-30
46
幻灯片47
(1) request对象
l getParameterNames()
l 返回值类型:枚举类型Enumeration
l 得到所有请求参数的名称
l 例:params.htm params.jsp
2015-7-30
47
幻灯片48
(1) request对象示例
<html><body>
<form action="./Hello_req.jsp">
姓名<input type="text" name="UserName">
<input type="submit" value="提交">
</form>
</body></html>
幻灯片49
(1) request对象示例
<%@ page contentType="text/html;gb2312" %>
<%@ page import="java.util.*" %>
<HTML>
<BODY>
你好,
<%! String Name;%>
<%
Name=request.getParameter("UserName");
%>
<%=Name%>,
今天是
<%
Date today=new Date();
%>
<%=today.getDate()%>号,星期<%=today.getDay()%>
</BODY>
</HTML>
幻灯片50
(1) request对象示例(输出结果)
<HTML>
<BODY>
你好,
独孤求败,
今天是
9号,星期1
</BODY>
</HTML>
幻灯片51
(2) response对象
l 类型:HttpServletResponse
l response对象负责将服务器端的数据发送回浏览器客户端,主要方法包括如下几类:
l HTTP Header信息处理
l 设置数据内容的类型和长度setContentType()。
l 在设置数据类型时,也会设置字符编码。例如,类型设置为"text/html; charset=ISO-8859-1“
l text/html(标准html文件)、text/plain(纯文本文件)、application/x-msexecl(Excel文件)、application/msword(Word文件)
l 获取输出流。
l 字符数据getWriter()
l 二进制数据应使用getOutputStream()
2015-7-30
51
幻灯片52
(2) response对象
l 缓冲控制
l 浏览器重定向:sendRedirect(URL)
l 与行为元素<jsp:forward>直接在服务端重定向不同,该方法需要先返回浏览器,然后由浏览器发送重定向的URL请求,参数中的URL也可以是其他服务器的URL资源。
l 响应状态控制
l 当需要在会话中存储数据而浏览器不支持Cookies时,使用encodeURL会将会话ID附加到URL后。
l 向浏览器发送Cookie
l 例1:response1.jsp (Word输出)
l 例2:response2.jsp (no-cache,每隔3秒显示当前时间 )
2015-7-30
52
幻灯片53
(2) response对象
l public void sendRedirect(String url)
l 将对用户端的响应重新定向到指定的url上。
l response的重定向方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令,使浏览器发送重定向的url请求。
l public printWriter getWriter()
l 获取输出流,将字符写到浏览器上。
l 例:responseGetWriter.jsp
l public void setContentType(String type)
l 设置响应的MIME类型
2015-7-30
53
幻灯片54
(2) response对象
l public void addCookie(Cookie cookie)
l 向浏览器发送Cookie。
l public String encodeRedirectURL(String url)
l public String encodeURL()
l 通常,会话管理是通过将session ID作为一个Cookie存储在客户端浏览器中来唯一标识每个用户会话的。上面两个方法首先判断浏览器是否支持Cookie,如果支持,将参数表示的URL原样返回,否则将session ID 和URL一起编码。
2015-7-30
54
幻灯片55
(2) response对象
l 设置浏览器无缓冲:
l setHeader(“Pragma”,“no-cache”);
l setHeader(“Cache-Control”,”no-cache”);
l 设置自动刷新
l response.setHeader(“Refresh”,”30”);
l //每隔30秒自动刷新当前页面response.setHeader(“Refresh”, “ 10;URL=http://192.168.102.16”);
l //10秒后加载新的页面
2015-7-30
55
幻灯片56
(3) pageContext对象
l “pageContext” 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute、getAttribute、getAttributesScope和getAttributeNamesInScope,一般情况下“pageContext” 对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。
l 在pageContext对象中保存的属性,只能在当前页面中去获取,也就是说,pageContext对象具有页面范围
幻灯片57
(3) pageContext对象
l JSP利用页面上下文对象pageContext获取页面所有相关的信息。
l 通过pageContext对象可以得到当前页面中所有其他的JSP隐含对象。
l pageContext对象还可以访问所有范围的属性和属性名。
2015-7-30
57
幻灯片58
(3) pageContext对象
l pageContext对象方法:
l 获取当前页面的其它JSP隐含对象getXxx():request、response、out、session、application、config、page、exception等
l 页内有效属性的相关操作 getAttribute() setAttribute() removeAttribute()
l 所有范围的属性操作
l 页面重定向 forward()
l 页面包含其它页面操作 include ()
l 例:pageContext.jsp,访问不同范围的属性
2015-7-30
58
幻灯片59
(3) pageContext对象
l 获取当前JSP页面的其他隐含对象
l public ServletRequest getRequest()
l public ServletResponse getResponse()
l public JspWriter getOut()
l public HttpSession getSession()
l public ServletContext getServletContext()
l public ServletConfig getServletConfig()
l public Object getPage()
l public Throwable getException()
2015-7-30
59
幻灯片60
(3) pageContext对象
l 所有范围的属性操作
l public Object getAttribute(String name,int scope)
l scope参数的取值可以是PAGE_SCOPE, REQUEST_SCOPE, SESSION_SCOPE, APPLICATION_SCOPE
l public void setAttribute(String name,Object object int scope)
2015-7-30
60
幻灯片61
(3) pageContext对象
l 其中的scope参数用于指定要获取哪一个范围对象的属性,有四个可能的取值,其中PageContext. PAGE_SCOPE表示页面范围,PageContext.REQUEST_SCOPE表示请求范围,PageContext.SESSION_ SCOPE表示会话范围,PageContext.APPLICATION_SCOPE表示Web应用程序范围。
幻灯片62
(3) pageContext对象
l pageContext对象也提供了请求转发的两个方法forward()和include(),其内部实现是调用RequestDispatcher对象的forward()和include()方法。
l 从pageContext对象提供的方法可以看出,pageContext对象实际上是为我们提供了访问其他隐含对象的统一入口,在多数情况下,直接利用pageContext对象就可以完成想要实现的功能。
幻灯片63
(3) pageContext对象
l pageContext的findAttribute方法会依次从四个作用域去找。是按什么先后顺序找的?
l 会按作用域由小到大的顺序来查找.即(page-->request-->session-->application).用pageContext.findAttribute("key");
的好处就是不用指定作用域的类型.只要这四个作用域中有指定的key.就可以得到其对应的value;
幻灯片64
(4) session对象
l session对象的常用方法
l 存储和获取会话有效的属性对象getAttribute()、setAttribute()、removeAttribute()、 getAttributeNames()
l 会话控制invalidate ()、 getMaxInactiveInterval ()、 setMaxInactiveInterval ()
l 会话状态getId ()、 isNew ()、 getCreationTime ()、 getLastAccessedTime ()
l 获取会话相关的Servlet上下文getServletContext ()
l 例:session.jsp
2015-7-30
64
幻灯片65
(4) session对象
l “session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。
幻灯片66
(4) session对象
l 概要
l HTTP是无状态(stateless)协议;
l Web Server 对每一个客户端请求都没有历史记忆;
l Session用来保存客户端状态信息;
l 由Web Server 写入;
l 存于客户端;
l 客户端的每次访问都把上次的session记录传递给Web Server;
l Web Server读取客户端提交的session来获取客户端的状态信息;
幻灯片67
(4) session对象示例(Form表单—Logon_session.html)
<html><body>
<form action="./Logon_session.jsp">
姓名<input type="text" name="UserName">
<input type="submit" value="提交">
</form>
</body></html>
幻灯片68
(4) session对象示例Logon_session.jsp
<%@page contentType="text/html;gb2312" %>
<%@page import="java.util.*" %>
<HTML>
<BODY>
<%
String Name=request.getParameter("UserName");
session.putValue("LogName", Name);
%>
你的名字"<%=Name%>"已经写入session
<br>
<a href=‘./check_session.jsp‘>check</a>
</BODY>
</HTML>
幻灯片69
(4) session对象示例(Check_session.jsp)
<%@page contentType="text/html;gb2312" %>
<HTML><BODY>
<%
String yourName=(String)session.getValue("LogName");
if (yourName= =null)
{
%>您还未登录
<%
}else
{
%>
"<%=yourName%>"已经登录
<%
}
%>
</BODY></HTML>
幻灯片70
(5) application对象
l “application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。
幻灯片71
(5) application对象
l 同一个Web应用的不同Servlet和JSP页面中共享信息
l application对象中存储的信息不是对具体用户而是对同一个Web应用都有效的信息,例如,数据库应用需要共享的数据库连接池就可以存储在application对象中
l application对象存储与应用相关的信息;
l 所有用户都可以共享这样的信息;
l application对象在服务器关闭时撤销
2015-7-30
71
幻灯片72
(5) application对象
l application对象的常用方法 :
l 存储和获取应用有效的属性对象
l 获取服务器信息
l 返回web 应用名
l 获取服务器支持的Java Servlet API 版本
l 返回指定文件的MIME类型。典型的值如"text/plain"、 "text/html"和"image/jpg"等
2015-7-30
72
幻灯片73
(5) application对象
l 获取参数指定的Servlet上下文对象
l 获取初始参数
l 获取指定path的实际路径
l 获取资源
l 日志管理
l 例:application.jsp ,获取应用名称需要用到WEB-INF\web.xml文件中的<display-name>元素定义,日志文件名为{Tomcat}\logs\localhost.xxxx-xx-xx.log
2015-7-30
73
幻灯片74
(5) application_example
l 该实例完成计数器的功能,计数器的值存放在application对象中。
l 每当一个用户登陆到系统时候,首先从application对象中读取当前计数器的值,然后把该值增加1,然后修改application中的值,这样就完成了计数器的功能。
l count.jsp
2015-7-30
74
幻灯片75
(5) application对象实现网页计数器
<%--用application对象实现网页计数器文件代码:count.jsp--%>
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head><title>网页计数器</title><head>
<body>
<% if (application.getAttribute("counter")==null)
application.setAttribute("counter","1");
else{
String strnum=null;
strnum=application.getAttribute("counter").toString();
int icount=0;
icount=Integer.valueOf(strnum).intValue();
icount++;
application.setAttribute("counter",Integer.toString(icount));
} %>
您是第<%=application.getAttribute("counter")%>位访问者!
</body>
</html>
幻灯片76
(6) out对象
l “out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。
幻灯片77
(6) out对象
l out对象的类型是javax.servlet.jsp.JspWriter,该类从java.io.Writer 类派生,以字符流的形式输出数据。out对象实际上是PrintWriter对象的带缓冲的版本(在out对象内部使用PrintWriter对象来输出数据),可以通过page指令的buffer属性来调整缓冲区的大小,默认的缓冲区是8kb。
幻灯片78
(6) out对象
l out对象针对不同的数据类型,提供了多个重载的print()和println()方法,用于输出数据。要注意的是,虽然println()方法会输出一个换行,但是客户端的浏览器在显示页面时会忽略输出的换行。
幻灯片79
(6) out对象
l JSP文件中的模板数据在转换成Servlet实现类时,会自动生成out.print()或out.println()语句来输出数据。
l Out对象包含方法:
l print()、println()、newLine()、write()、flush() 、clear() 等
l 例: out.jsp
2015-7-30
79
幻灯片80
(7) Config对象
l “config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
幻灯片81
(7) config对象
l Web应用配置描述文件:web.xml
l 例: web.xml,将requestHeader.jsp映射到/requesthd
l config对象可以获取web.xml的相关信息,方法:
l 获取指定名字的初始参数getInitParameter()
l 获取所有初始参数getInitParameterNames()
l 获取ServletContext对象(application)getServletContext()
l 获取Servlet名字getServletName()
l 例:web.xml,设置Web应用的初始参数; config.jsp,访问Web应用的初始参数
2015-7-30
81
幻灯片82
(7) config对象
l 一般情况下,JSP容器会自动配置JSP页面。例如,将文件a.jsp复制到tomcat安装目录的webapps\myweb下面,该文件会被自动映射到对应Web应用的URL:/a.jsp,使用地址http://localhost:8888/myweb/a.jsp就可以访问该页面。
l 也可以手工配置页面的映射,这时需要修改应用的配置描述文件web.xml,该文件位于每个应用的WEB-INF目录下。
2015-7-30
82
幻灯片83
(8) page对象
l page对象是JSP页面对应的Servlet类的实现对象
l 例:page.jsp,使用page指令定义属性info,然后使用getServletInfo()方法取得属性info的值。
l page对象是JSP页面对应的Servlet类的实现对象,相当于this。
l 由于page对象占用内存较多,一般情况下,不推荐使用page对象。
2015-7-30
83
幻灯片84
(8) Page对象
l page对象是当前页面转换后的Servlet类的实例。从转换后的Servlet类的代码中,可以看到这种关系:
l Object page = this;
l 在JSP页面中,很少使用page对象。
l page作用域 :是JSP页面编译成JAVA文件时的service方法.方法结束,生命周期也结束
幻灯片85
(9) exception对象
l exception对象表示了JSP页面运行时产生的异常,该对象只有在错误页面(在page指令中指定属性isErrorPage=true的页面)中才可以使用。
l 在JSP页面中,我们可以利用page指令的errorPage属性指定一个错误处理页面,当JSP页面运行发生错误时,JSP容器会自动调用指定的错误处理页面。要注意的是,如果一个JSP页面使用errorPage属性定义了错误页面,那么在web.xml文件中定义的任何错误页面将不会被使用。
l 下面我们看一个例子:price.jsp
l <%@ page errorPage="excep.jsp" %>
l <%
l String strPrice=request.getParameter("price");
l double price=Double.parseDouble(strPrice);
l out.println("Total price = "+price * 3);
l %>
幻灯片86
(9) exception对象
l excep.jsp
l <%@page isErrorPage="true" %>
l <%
l out.println("exception.toString():");
l out.println("<br>");
l out.println(exception.toString());
l out.println("<p>");
l out.println("exception.getMessage():");
l out.println("<br>");
l out.println(exception.getMessage());
l %>
幻灯片87
(9) exception对象
l 在price.jsp页面中,通过page指令的errorPage属性指定错误处理页面为excep.jsp。在 excep.jsp页面中,通过page指令的isErrorPage属性指定当前页面是错误处理页面,只有设置了isErrorPage为true,在此页面中才可以使用exception对象。
l 我们访问price.jsp页面时,输入URL:http://localhost:8080/ch12/price.jsp?price=5.0
l 将看到输出:Total price = 15.0
l 如果输入:http://localhost:8080/ch12/price.jsp?price=abc
l 将看到如下的错误信息:
l exception.toString():
l java.lang.NumberFormatException: For input string: "abc"
l exception.getMessage(): For input string: "abc"
幻灯片88
(9) exception对象
l 常用的方法:
l 输出错误信息 getLocalizedMessage() getMessage() toString()
l 输出详细错误信息 printStackTrace()
l 例:exception.jsp ,直接使用throw产生异常,利用exception对象处理异常
2015-7-30
88
幻灯片89
(9) exception对象
l 返回错误信息
l public String getMessage()
l public String toString()
l 输出详细错误信息:
l public void printStackTrace()
l public void printStackTrace(PrintStream ps)
l public void printStackTrace(PrintWriter pw)
2015-7-30
89
幻灯片90
(10) cookie对象
l 作用:Cookie对象通常用于在浏览器端保存会话过程中的一些参数。
l Cookie信息保存在客户机上,当浏览器请求服务器的页面时自动发送到服务器上。
l Cookie是文本文件,保存路径C:\Documents and Settings\登录用户名\Cookies
幻灯片91
cookie对象
l name:Cookie名称
l value:Cookie值
l domain:只有在该域的服务器才会发送该cookie。
l maxAge:Cookie持续的时间。-1表示一直有效
l path:只有URL中包含指定的路径的服务器才发送Cookie
l secure:是否仅当使用https协议才发送Cookie。
幻灯片92
cookie对象
对于cookie的写入,要结合response对象来实现
<%
Cookie c=new Cookie("season","spring");
c.setMaxAge(30);//cookie的有效期为30秒
response.addCookie(c);
%>
幻灯片93
cookie对象
对于cookie的读取,要结合request对象来实现
<%
Cookie[] a=request.getCookies();
//根据设置时的cookie个数决定数组元素个数
String s1=(String)a[0].getName();
String s2=(String)a[0].getValue();
out.println(s1+s2);
%>
幻灯片94
cookie对象
l Cookie的有效期
l 1)过期属性是按秒为单位记录的,使用正整数
l 2)负值表示该cookie的生存期是当前浏览器会话
l 3)零值表示立即删除该cookie
l 注意:
l 如果不设置cookie的有效期,就不能在硬盘上保存cookie的信息,一旦浏览器关闭,cookie信息就消失。
cookie有效期的设置必须在response.addCookie()方法之前。
幻灯片95
内置对象小结
l 全面介绍了JSP的几种内置对象。熟练使用这些内置对象是开发JSP应用程序的基本要求,尤其是对于request、session和application对象更是必须要掌握的。
l 会使用对象所具有的方法,能熟练使用每一种对象的几种常用方法。
幻灯片96
PrintWriter和JspWriter有什么区别
l 第一个区别:PrintWriter的print方法中不会抛出IOException,而JspWriter会。
l 第二个区别:JspWriter是抽象类而PrintWriter不是,也就是说你可以通过new操作来直接新建一个PrintWriter的对象而JspWriter不行,它必须是通过其子类来新建。
l JspWriter对PrintWriter有依赖。初始化一个JspWriter对象的时候要关联ServletResponse对象的一个PrintWriter类型对象,最终JspWriter对象的输出任务还是通过这个PrintWriter类型对象做的。
幻灯片97
标签:
原文地址:http://www.cnblogs.com/feifeikui/p/4689571.html