JSP动态WEB技术与开发实例第三章JSP的内置对象.docx

上传人:b****5 文档编号:11982519 上传时间:2023-04-16 格式:DOCX 页数:76 大小:683.63KB
下载 相关 举报
JSP动态WEB技术与开发实例第三章JSP的内置对象.docx_第1页
第1页 / 共76页
JSP动态WEB技术与开发实例第三章JSP的内置对象.docx_第2页
第2页 / 共76页
JSP动态WEB技术与开发实例第三章JSP的内置对象.docx_第3页
第3页 / 共76页
JSP动态WEB技术与开发实例第三章JSP的内置对象.docx_第4页
第4页 / 共76页
JSP动态WEB技术与开发实例第三章JSP的内置对象.docx_第5页
第5页 / 共76页
点击查看更多>>
下载资源
资源描述

JSP动态WEB技术与开发实例第三章JSP的内置对象.docx

《JSP动态WEB技术与开发实例第三章JSP的内置对象.docx》由会员分享,可在线阅读,更多相关《JSP动态WEB技术与开发实例第三章JSP的内置对象.docx(76页珍藏版)》请在冰豆网上搜索。

JSP动态WEB技术与开发实例第三章JSP的内置对象.docx

JSP动态WEB技术与开发实例第三章JSP的内置对象

第1章JSP技术概述

第2章JSP语法基础

第3章JSP的内置对象

JSP的内置对象是无须声明就可以直接在JSP页面脚本(Java程序片和Java表达式)中使用的对象,JSP共有以下9种基本内置对象:

request对象、response对象、session对象、out对象、application对象、page对象、exception对象、pageContext对象、config对象。

这些对象是Web开发中最为常用的对象,本章中将一一介绍并通过实例引导大家学习掌握,在学习过程中,应重点掌握request对象、response对象、session对象、out对象、application对象。

3.1内置对象概述

JSP内置对象包括request对象、response对象、session对象、out对象、application对象、page对象、exception对象、pageContext对象、config对象。

这些对象在客户端和服务器端交互的过程中分别完成不同的功能。

3.1.1JSP内置对象概述

1.request对象

request对象是javax.servlet.http.HttpServletRequest类的实例。

代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。

比如表单中的数据、网页地址后带的参数等。

2.response对象

response对象是javax.servlet.http.HttpServletResponse类的实例。

代表响应对象,主要用于向客户端发送数据。

3.out对象

out对象是javax.servlet.jsp.jspWriter类的实例。

主要用于向客户端浏览器输出数据。

4.session对象

session对象是javax.servlet.http.HttpSession类的实例。

主要用于来保持在服务器与一个客户端之间需要保留的数据,比如在会话期间保持用户的登录信息等,会话状态维持是Web应用开发者必须面对的问题。

当客户端关闭网站的所有网页或关闭浏览器时,session对象中保存的数据会自动清除。

由于Http协议是一个无状态协议,不保留会话间的数据,因此通过session对象扩展了http的功能。

比如用户登录一个网站之后,登录信息会暂时保存在session对象中,打开不同的页面时,登录信息是可以共享的,一旦用户关闭浏览器或退出登录,就会清除session对象中保存的登录信息。

request、response、session是JSP中的三个重要对象,这三个对象提供了服务器端与客户端进行交互通信的控制,它们的控制如图3-1所示。

图3-1session、request、response对象通信控制

当客户端打开浏览器,在地址栏输入Web服务器上的JSP页面的地址后,就会显示页面的执行结果。

客户端的浏览从Web服务器上获得网页是通过http协议来实现的,整个过程是,客户端通过输入网页地址向服务器端发送一个请求,服务器在受到来自客户端的请求后要响应请求。

JSP通过request对象控制客户端发送的请求,通过response对象对客户端请求进行响应。

而session就维持这个反反复复的过程中的会话期间需要的数据信息。

请求方法有多种,有POST、GET、PUT、HEAD、DELTE、TRACE等,最常用的是前两种。

request对象和response对象还可以操作http头中的数据。

5.application对象

application对象是javax.servlet.ServletContext类的实例。

主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享。

6.pageContext对象

pageContext对象是javax.servlet.jsp.PageContext类的实例。

用来管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由JSP容器来完成的。

7.config对象

config对象是javax.servlet.ServletConfig类的实例。

是代码片段配置对象,表示Servlet的配置。

8.page(相当于this)对象

page对象是javax.servlet.jsp.HttpJspPage类的实例。

用来处理JSP网页,它指的是JSP页面对象本身,或者说代表编译后的servlet对象,只有在JSP页面范围之内才是合法的。

9.exception对象

exception对象是java.lang.Throwable类的实例。

处理JSP文件执行时发生的错误和异常只有在JSP页面的page指令中指定isErrorPage="true"后,才可以在本页面使用exception对象。

需要说明的是,pageContext中的属性默认在当前页面是共享的;session中的属性是在当前session中是共享的;application对象对象中的属是则是对所有页面都是共享的。

3.1.2JSP内置对象的特点

JSP的内置对象主要有以下特点:

•由JSP规范提供,不用编写者实例化;

•通过Web容器实现和管理;

•所有JSP页面均可使用;

•只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%>或<%使用内置对象%>)。

3.1.3JSP内置对象的分类

按照内置对象的功能来划分,可以分为以下四类:

•输出输入对象:

request对象、response对象、out对象;

•通信控制对象:

pageContext对象、session对象、application对象;

•Servlet对象:

page对象、config对象;

•错误处理对象:

exception对象。

3.1.4JSP对象的作用域

所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。

4个JSP内置对象的作用域分别为:

application、session、request、page。

JSP内置对象作用域表如下:

表3-1JSP对象的4中作用域

名称

作用域

application

在所有应用程序中有效

session

在当前会话中有效

request

在当前请求中有效

page

在当前页面有效

Web交互的最基本单位为HTTP请求。

每个用户从进入网站到离开网站这段过程称为一个HTTP会话,一个服务器的运行过程中会有多个用户访问,就是多个HTTP会话。

作用域详细解释如下。

1.application作用域

application作用域就是服务器启动到关闭的整段时间,在这个作用域内设置的信息可以被所有应用程序使用。

application作用域上的信息传递是通过ServletContext实现的,它提供的主要方法如下所示:

ObjectgetAttribute(Stringname)//从application中获取信息;

voidsetAttribute(Stringname,Objectvalue)//向application作用域中设置信息。

2.session作用域

session作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现。

session是通过HttpSession接口实现的,它提供的主要方法如下所示。

ObjectHttpSession.getAttribute(Stringname)//从session中获取信息。

voidHttpSession.setAttribute(Stringname,Objectvalue)//向session中保存信息。

HttpSessionHttpServletRequest.getSessio()//获取当前请求所在的session的对象。

session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始。

但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:

如果一定的时间内客户端没有反应,则认为会话结束。

Tomcat的默认值为120分钟,但这个值也可以通过HttpSession的setMaxInactiveInterval()方法来设置:

voidsetMaxInactiveInterval(intinterval)

如果想主动让会话结束,例如用户单击“注销”按钮的时候,可以使用HttpSession的invalidate()方法,用于强制结束当前session:

voidinvalidate()

3.request作用域

一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。

Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的。

voidsetAttribute(Stringname,Objectvalue)//将对象value以name为名称保存到request作用域中。

ObjectgetAttribute(Stringname)//从request作用域中取得指定名字的信息。

JSP中的doGet()、doPost()方法的第一个参数就是HttpServletRequest对象,使用这个对象的setAttribute()方法即可传递信息。

那么在设置好信息之后,要通过何种方式将信息传给其他的Servlet呢?

这就要用到RequestDispatcher接口的forward()方法,通过它将请求转发给其他Servlet。

RequestDispatcherServletContext.getRequestDispatcher(Stringpath)

//取得Dispatcher以便转发,path为转发的目的Servlet。

voidRequestDispatcher.forward(ServletRequestrequest,ServletResponseresponse)

//将request和response转发

因此,只需要在当前Servlet中先通过setAttribute()方法设置相应的属性,然后使用forward()方法进行跳转,最后在跳转到的Servlet中通过使用getAttribute()方法即可实现信息传递。

PHP的程序员可能不太好理解这一段,因为PHP中没有转发的概念,一个请求只能由一个PHP文件来处理,所以PHP中根本没有request作用域的概念。

而Servlet则不同,请求可以在应用程序中任意转发,所以用request作用域在不同Servlet之间传递信息。

需要注意两点:

(1)转发不是重定向,转发是在Web应用内部进行的。

PHP支持重定向但没有转发。

(2)转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。

4.page作用域

page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。

对page对象的引用通常存储在pageContext对象中。

以上介绍的作用范围越来越小,request和page的生命周期都是短暂的,它们之间的区别:

一个request可以包含多个page页(include,forward及filter)。

3.2Request对象

request对象是javax.servlet.http.HttpServletRequest类的实例。

request对象包含所有请求的信息,如请求的来源、标头、cookies和请求相关的参数值等。

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。

该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。

它是HttpServletRequest类的实例。

HTTP通信协议是客户与服务器之间一种提交(请求)信息与响应信息(request/respone)的通信协议。

在JSP中,内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。

客户通常使用HTML表单向服务器的某个JSP页面提交信息,表单的一般格式是:

…//提交数据封装

其中

是表单标签,method取值get或post。

Get方法和post方法的主要区别是:

使用get方法提交的信息会在提交的过程中显示在浏览器的地址栏中,而post方法提交的信息不会显示在地址栏中。

提交的数据可以通过文本框、列表、文本区等,例如:

该表单使用post方法向页面tom.jsp提交信息,提交信息的过程是:

在文本框输入信息,其中默认信息是“史湘云”;然后点击“提交”按钮向服务器的JSP页面detail.jsp提交信息。

request对象可以使用getParameter(Strings)方法获取该表单通过text提交的信息,比如:

request.getParameter(“studentname”);

3.2.1request对象的常用方法

request的方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。

主要方法如下:

1.ObjectgetAttribute(Stringname)

这个方法用来返回指定的属性值,该属性不存在时返回null。

参数name是指定的属性的名称。

2.EnumerationgetAttributeNames()

这个方法返回request对象的所有属性名称的集合,返回值是一个枚举类型的对象。

3.StringgetAuthType();

返回用来保护servlet的认证方法的名称,返回值是一个字符型对象,未受保护时返回null,调用的语法格式如下:

4.StringgetCharacterEncoding();

返回请求中的字符编码方法,可以在response对象中设置。

5.intgetContentLength();

返回请求的BODY的长度,不能确定长度时返回-1。

可以在response中设置。

6.StringgetContentType();

返回在response中定义的内容类型。

7.StringgetContentPath();

返回请求的路径。

8.Cookie[]getCookies();

返回客户端所有的Cookie的数组。

9.EnumerationgetHeaderNames();

返回所有HTTP头的名称的集合。

10.EnumerationgetHeaders(Stringname);

返回指定HTTP头的所有值的集合,调用的语法格式如下:

11.StringgetHeader(Stringname);

返回指定名称的HTTP头的信息,调用的语法格式如下:

12.longgetDateHeader(Stringname);

返回指定名称的Data类型的HTTP头的信息,调用的语法格式如下:

13.intgetIntHeader(Stringname);

返回指定名称的Int类型的HTTP头的信息,调用的语法格式如下:

14.ServletInputStreamgetInputStream();

返回请求的输入流,调用的语法格式如下:

15.LocalegetLocale();

返回当前页的Locale对象,可以在response中设定,调用的语法格式如下:

16.EnumerationgetLocales();

返回请求中所有的Locale对象的集合,调用的语法格式如下:

17.StringgetLocalName();

获取响应请求的服务器端主机名,调用的语法格式如下:

18.StringgetLocalAddr();

获取响应请求的服务器端地址。

19.intgetLocalPort();

获取响应请求的服务器端端口

20.StringgetMethod();

获取客户端向服务器端发送请求的方法(GET、POST)。

21.StringgetParameter(Stringname);

获取客户端发送给服务器端的参数值。

22.MapgetParameterMap();

该方法返回包含请求中所有参数的一个Map对象。

23.EnumerationgetParameterNames();

返回请求中所有参数的集合。

24.String[]getParameterValues(Stringname);

获得请求中指定参数的所有值。

25.StringgetQueryString();

返回get方法传递的参数字符串,该方法不分解出单独的参数。

26.StringgetPathInfo();

取出请求中处于ServletPath和QueryString之间的额外信息。

27.StringgetPathTranslated();

返回用getPathInfo()方法取得的路径信息的实际路径。

28.StringgetProtocol();

返回请求使用的协议。

可以是HTTP1.1或者HTTP1.0。

29.BufferedReadergetReader();

返回请求的输入流对应的Reader对象,该方法和getInputStream()方法在一个页面中只能调用一个。

30.StringgetRemoteAddr();

获取发出请求的客户端IP地址。

31.StringgetRemoteHost();

获取发出请求的客户端主机名

32.StringgetRemoteUser();

返回经过客户端验证的用户名,未经验证返回null。

33.intgetRemotePort();

返回发出请求的客户端主机端口。

34.StringgetRealPath(Stringpath);

返回给定虚拟路径的物理路径。

35.RequestDispatchergetRequestDispatcher(Stringpath);

按给定的路径生成资源转向处理适配器对象。

36.StringgetRequestedSessionId();

返回请求的session的标识。

37.StringRequestURI();

返回发出请求的客户端地址,但是不包括请求的参数字符串。

38.StringBuffergetRequestURI();

返回响应请求的服务器端地址

39.StringgetScheme();

获取协议名称,缺省值为HTTP协议。

40.StringgetServerName();

返回响应请求的服务器名称。

41.StringgetServletPath();

获取客户端所请求的脚本文件的文件路径。

42.intgetServerPort();

获取响应请求的服务器端主机端口号。

43.voidremoveAttribute(Stringname);

在属性列表中删除指定名称的属性。

44.voidsetAttribute(Stringname,Objectvalue);

在属性列表中添加/删除指定的属性。

45.voidsetCharacterEncoding(Stringname);

设置请求的字符编码格式。

46.HttpSessiongetSession();

HttpSessiongetSession(booleancreate);

获取session,如果create为true,在无session的情况下创建一个。

47.booleanisRequestedSessionIdFromCookie();

检查请求的会话ID是否为通过Cookie传入。

48.booleanisRequestedSessionIdFromURL();

检查请求的会话ID是否为通过URL传入。

49.booleanisRequestedSessionIdValid();

检查请求的会话ID是否仍然有效。

例3-1request对象常用方法的应用。

request_example1.jsp

<%@page<%request.setCharacterEncoding("gb2312");%>

contentType="text/html;charset=gb2312"%>

request对象示例1

  

  

请求方式:

<%=request.getMethod()%>

请求的资源:

<%=request.getRequestURI()%>

请求用的协议:

<%=request.getProtocol()%>

请求的文件名:

<%=request.getServletPath()%>

请求的服务器的IP:

<%=request.getServerName()%>

请求服务器的端口:

<%=request.getServerPort()%>

客户端IP地址:

<%=request.getRemoteAddr()%>

客户端主机名:

<%=request.getRemoteHost()%>

表单提交来的值:

<%=request.getParameter("xingming")%>

程序代码调用了request对象的几个常用方法,输出request的一些信息。

请求方式有表单中的method="post"指定。

为了防止中文信息出现乱码,程序开始位置添加了<%request.setCharacterEncoding("gb2312");%>,这是设置request对象获取

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1