理解JSP的内置对象和四种作用域
第二章 jsp内置对象与四种作用域
本章内容
- 九种内置对象
- 四种作用域
- 九大内置对象
1、Request:请求对象。
2、Response:响应对象。
3、Session:会话对象。
4、Application:应用程序对象。
5、Out:输出对象。
6、Config:配置对象。
7、Page:页面对象。
8、PageContext:页面上下文对象。
9、Exception:例外对象。
- (1) Request:请求对象
该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息。 Request常用的方法如下
方法名 |
作用 |
getParameter(String strTextName) |
获取表单提交的信息 |
request.getParameterValues(String name) |
获取多个元素值,返回数组 |
request.setCharacterEncoding("UTF-8"); |
处理post提交的乱码请求 |
request.getRequestDispatcher(URL).forward(request,response) |
将当前页面转发到下一页面 |
getProtocol() |
获取客户使用的协议 |
getServletPath() |
获取客户提交信息的页面 |
getMethod() |
获取客户提交信息的方式 |
getRermoteAddr() |
获取客户的IP地址 |
getRemoteHost() |
获取客户机的名称 |
getServerPort() |
获取服务器的端口号 |
getParameterNames() |
获取客户端提交的所有参数的名字 |
getServerName() |
获取服务器名称 |
注意:中文乱码处理方法
当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。首先,将获取的字符串用ISO-8859-1进行编码,并将编码存发到一个字节数组中,然后再将这个数组转化为字符串对象即可。
例:语法
String textContent=request.getParameter("boy");
byte b[]=textContent.getBytes("ISO-8859-1");
textContent=new String(b,”UTF-8”);
案例1: request内置对象使用
- (2) Response:响应对象
对客户的请求进行动态的响应,向客户端发送数据。
- Response重定向
在某些情况下,当响应客户时,需要将客户重新引导至另一个页面,可以使用Response的sendRedirect(URL)方法实现客户的重定向。
例如:
response.sendRedirect("index.jsp");
案例2: response内置对象使用
- 重定向与转发的区别
重定向:response.sendRedirect("URL");
转发:request.getRequestDispatcher("URL").forward(request,response);
1.转发在服务器端完成的;重定向是在客户端完成的
2.转发的速度快;重定向速度慢
3.转发的是同一次请求;重定向是两次不同请求
4.转发地址栏没有变化;重定向地址栏有变化
5.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
- (3) Session:会话对象
1)什么是Session对象
Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。
Session失效:1关闭服务器 2关闭浏览器
2)Session对象的ID
当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个Session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样Session对象,直到客户关闭浏览器后,服务器端才将该客户的Session对象取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的Session对象。
3)Session对象的常用方法
方法名 |
作用 |
public String getId() |
获取Session对象编号 |
public void setAttribute(String key,Object obj) |
将参数Object指定的对象obj添加到Session对象中,并为添加的对象指定索引关键字 |
public Object getAttribute(String key) |
获取Session对象中含有关键字的对象 |
public Boolean isNew() |
判断是否是一个新的客户 |
案例3:session内置对象使用
扩展案例3:使用include包含
(4) Application:应用程序对象
1)什么是Application对象
服务器启动后就产生了这个Application对象,当客户再所访问的网站的各个页面之间浏览时,这个Application对象都是同一个,直到服务器关闭。但是与Session对象不同的是,所有客户的Application对象都是同一个,即所有客户共享这个内置的Application对象。
2)Application对象的常用方法
方法名 |
作用 |
setAttribute(String key,Object obj) |
将参数Object指定的对象obj添加到Application对象中,并为添加的对象指定索引关键字。 |
getAttribute(String key) |
获取Application对象中含有关键字的对象。 |
案例4:网页访问量
在filter的内容里
https://blog.****.net/qq_50794782/article/details/123820930?spm=1001.2014.3001.5502
(5) Out:输出对象
Out对象是一个输出流,用来向客户端输出数据。Out对象用于各种数据的输出。
其常用方法如下。
方法名 |
作用 |
out.print() |
输出各种类型数据 |
out.newLine() |
输出一个换行符 |
out.close() |
关闭流 |
(6) Config:配置对象
一般我们使用Config对象来获取一些初始化配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
此外,还可以通过getServletContext()方法取得ServletContext。一个ServletContext对象,它能给出Servlet如何与服务器交互的信息。ServletContext对象是服务器传给这个Servlet的。在ServletConfig接口中定义ServletContext对象是其中的一部分
(7) Page:页面对象
Page对象代表了正在运行的由JSP文件产生的类对象,不建议一般使用。
(8) PageContext:页面上下文对象
作用:取得任何范围的参数
通过它可以获取jsp页面的out,request,reponse等对象
JSP引入了一个名为PageContext的类,通过它可以访问页面的许多属性。PageContext变量存储与当前页面相关联的PageContext对象的值。
PageContext类拥有getRequest、getResponse、getOut、getSession等方法。如果需要访问多个与页面相关的对象,传递pageContext要比传递request、response、out等的独立引用更容易。
(9) Exception:例外对象
作用是显示异常信息
Exception对象代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了<%@ page isErrorPage="true "%>的JSP文件中使用,这是因为JSP文件运行时产生的错误对象被向外抛出,只能被使用了<%@ page isErrorPage="true "%>标记从而具有拦截错误对象功能的JSP所拦截。最常用的方法就是getMessage,用以获得错误信息,此外还会用到 getLocalizedMessage和 printStackTrace。
配置错误页面流程:
1、web.xml中配置
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
2、在error404.jsp页面配置
<%
response.setStatus(HttpServletResponse.SC_EXPECTATION_FAILED);
%>
获得异常类:exception.getClass()
获得异常信息:exception.getMessage()
二、四大作用域
作用域:“数据共享的范围”,也就是说数据能够在多大的范围内有效
Web应用中,JSP创建的对象有一定的生命周期,也有可能被其他组件或者对象访问。对象的声明周期和可访问性称为作用域。四种范围对象作用域从小到大顺序如下:pageContext----request----session----application。
(1)pageContext:页面域 第四 在当前页面有效
它可以获取其它八大隐式对象,可以认为它是一个入口对象。
页面作用域仅限于当前页面对象,可以近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。
(2)request:请求域 第三 在当前请求中有效
请求作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。
(3)session:会话域 第二 在当前会话中有效
会话作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。
(4)application: 应用域 范围最大 整个应用都有效
应用作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。