Servlet的九大默认对象
一、request
转译后对应HttpServletRequest/ServletRequest对象
封装请求对象,代表的是来自客户端的请求HttpServletRequest。包括从GET/POST请求传递过来的参数
封装的数据有3部分: header parameter attribute
getHeader("Accept"):String getIntHeader getDateHeader
getParameter("name"):String getParameterValues(“hobby”):String[]
setAttribute("name",Object) getAttribute("name") removeAttribute("name")
上传数据
1、表单 <form method="post" enctype="multipart/form-data">
2、在Servlet中则可以通过getInputStream或者getReader获取输入流以处理客户端启动的文件
3、引入jspSmartupload组件简化上传处理开发
getRequestDisapatcher(“bbb.jsp”).forward(request,response)
- 地址栏不变
- 共享request
二、response
转译后对应HttpServletRespons/ServletResponse对象
封装响应对象,代表的是对客户端的响应HttpServletResponse。网页传回客户端的信息
设置响应头
setHeader("name","value") setIntHeader setDateHeader
-
避免客户端缓存
-
以附件方式打开
setContentType(“text/html;charset=utf-8”)
MIME多用途互联网邮件扩展—用来识别文件内容类型 text/html image/jpeg
response.sendRedirect(“bb.do”); 重定向
- 地址栏自动变化
- 不共享request
三、page
转译后对应this
this 封装页面对象,是Object类型的,该对象代表了正在运行的由JSP文件产生的类对象,相当于this。一般情况下不建议使用该对象是Object类型的,所以可以合法调用的方法都是Object中定义的方法toString equals hashcode wait notify notifyAll
例如:
<%!
public void pp(){}
%>
//页面种进行调用
<% page.pp(); %> 语法错误,因为page是Object类型的,所以按照Object进行检查
<% this.pp(); %> 语法正确
四、session
session转译后对应HttpSession对象
封装会话对象,代表服务器与客户端所建立的会话,在不同的JSP页面中保留客户信息的情况下用于跟踪用户状态
1、实现在当前应用中跨页面数据传输
session.setAttribute(“name”,Object) getAttribute(“name”):Object removeAttribute(“name”)
2、session数据存储在服务器端,
所以需要有一个标识值用于区分不同用户。这个值存储在客户端的内存Cookie中session.getId():String
3、清空session,例如退出登录
session.invalidate() 清空session对象里的东西,并不指清除这个session对象本身
4、针对非正常退出应用,针对session有个超时设置
<session-config>
<session-timeout>30</session-timeout> 这里的单位为分钟,Tomcat即使不作配置,默认就是30分钟
</session-config>
一般如果安全性要求高,则时长设置短一些;如果要求对客户友好,则时长设置长一些
五、config
转译后对应ServletConfig对象
封装代码配置对象,该对象提供一些该Servlet的配置信息,是javax.servlet.ServletConfig接口的实现。javax.servlet. ServletConfig 的实例,该实例代表该JSP 的配置信息。常用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事实上, JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。
六、application
封装应用程序对象,负责提供应用程序在服务器中运行时的一些全局信息,是一个容器级的共享对象数据
1.什么是application:
服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
2.application对象常用方法:
- (1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。
- (2)public Object getAttribute(String key): 获取application对象中含有关键字的对象。
3.获取上下文的初始化参
设置
<context-param>
<param-name>counter</param-name>
<param-value>123</param-value>
</context-param>
获取
Object obj=application.getInitParameter("counter");
out.println(obj);
4.用于读取应用路径下的文件
InputStream is=application.getResourceAsStream("bb.properties"); //该文件位于
webapp根目录下
Properties ps=new Properties();
ps.load(is);
String val=ps.getProperty("abc");
out.println(val);
七、exception
异常信息的对象,封装异常对象,代表了JSP文件运行时所产生的并且没有被捕获的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了 <%@ page isErrorPage="true "%> 的JSP文件中使用
八、out
用来向客户端自定义输出内容,代表了向客户端发送
数据的对象,是javax.servlet.jsp.JspWriter接口的实现。JspWriter是带缓冲的版本
九、pageContext
包装页面上下文对象,代表的是当前页面运行的一些属性,例如可以获取session、request、response、exception、ServletContext和ServletConfig的引用。是javax.servlet.jsp.PageContext接口的实现
四个作用域:request域 session域 application域 page域
application:
全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
session:
会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
request:
请求作用域,就是客户端的一次请求。
page:
一个JSP页面。
以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。