六、请求对象和响应对象生命周期
【请求对象】和【响应对象】生命周期贯穿一次请求的处理过程中
八、Http状态码
Http服务器针对本次请求,返回对应的资源文件,通过Http状态码通知浏览器如何处理结果
100;返回的资源文件不是个独立的文件
200;返回的资源文件是个完整独立的资源文件
302;返回的资源文件内容是一个资源文件地址,request.sendRedirect("资源文件地址")
404;没有定位到被访问的资源文件
405;定位到被访问的资源文件,但是对于浏览器采用的请求方式不能处理
500;资源文件(Servlet)在处理请求期间,由于Java异常处理失败
十、重定向解决方案
用户第一次通过【手动方式】通知浏览器访问oneServlet,oneServlet工作完毕后将TwoServlet
的地址写入到响应头中的【location属性】,导致Tomcat向状态行中写入302,浏览器读取到302会向
服务器再次发起请求,访问twoServlet去完成请求中剩余任务
缺点:需要在服务端和客户端之间进行大量往返,增加用户等待时间
十一、请求转发解决方案
用户第一次通过【手动方式】要求浏览器访问oneServlet,oneServlet工作完毕后,通过当前的
请求对象代替浏览器向Tomcat发送请求,申请调用twoServlet,Tomcat收到请求后,完成剩余任务
十二、多个Servlet之间数据共享实现方案
1、ServletContext接口
2、Cookie类
3、HttpSession接口
4、HttpServletRequest接口
十三、ServletContext接口
1、介绍--【全局作用域对象】
2、生命周期
全局作用域对象生命周期贯穿网站整个运行期间
3、命令实现
键值对方式
ServletContext apption=request.getServletContext();
--apption.setAttribute("key1",value);
--String value=apption.getServletAttribute("key1");
4、工作原理
每一个网站都有一个全局作用域对象,相当于一个map,在oneServlet中可以将一个数据存入到全局作用域对象,
当前网站中的其他Servlet可从全局作用域对象中读取到这个数据
十四、Cookie
1、原理
用户通过浏览器第一次向网站【myWeb】发送请求时,oneServlet运行时可以将用户相关的数据写入到Cookie中,oneServlet
工作结束后,【将Cookie写入到响应头中】交还给浏览器,当用户通过【同一个浏览器】再次向【相同网站】下的
twoServlet发送请求时,【浏览器需要无条件的将Cookie写入到请求头】发送过去,twoServlet运行期间,就
可以调用Cookie中的参数
2、命令实现
oneServlet
Cookie card1=new Cookie("key1",value);
Cookie card2=new Cookie("key2",value);
reponse.addCookie(card1);
reponse.addCookie(card2);
twoServlet
Cookie cookieArray[]=request.getCookies();
for(Cookie card:cookieArray[]){
String key=card.getName();
String value=card.getValue();
}
3、销毁时机
1)默认情况下Cookie存放在浏览器缓存中,关闭浏览器Cookie消失
2)手动配置下Cookie可以存放在客户端硬盘上,指定Cookie在硬盘上的存活时间
cookie.setMaxage(60秒);
十五、HttpSession接口
1、介绍--【会话作用域对象】
2、HttpSession和Cookie的区别
1)存储位置
HttpSession -- 存放在服务端内存
Cookie -- 存放在浏览器缓存/客户端硬盘
2)数据类型
HttpSession -- Object
Cookie -- String
3)数据数量
HttpSession -- 相当于map集合,可以存放任意数量
Cookie -- 一个Cookie对象,只能存在一个value
4)参照物
HttpSession -- 私人保险柜
Cookie -- 会员卡
3、命令实现
oneServlet
HttpSession session =request.getSession();
session.setAttribute("key1",value);
twoServlet
HttpSession session =requset.getSession();
Object value=session.getAttribute("key");
4、HttpSession与用户关联
每创建一个HttpSession会又一个对应的ID值,存放在Cookie中。
5、getSession()与getSession(false)
1)getSession():
如果当前用户在服务端有私人储物柜,要求tomcat将储物柜返回,
如果当前用户在服务端没有私人储物柜,tomcat为当前用户生成一个私人储物柜
2)getSession(false):
要求tomcat将储物柜返回,如果没有储物柜,tomcat返回null。
6、HttpSession销毁时机
1)由于用户与HttpSession关联时,需要使用Cookie,而Cookie存放在浏览器缓存中,
浏览器关闭时,用户与HttpSession关系被切断,但是服务器不知道浏览器已经关闭,所以tomcat为
每一个HttpSession设置了一个默认的30分钟空间时间,空闲时间达到后,tomcat会对对应的HttpSession
进行销毁
2)手动配置:web.xml
<session.config>
<session-timeout>5</session-timeout>
</session.config>
十六、HttpServletRequest接口实现数据共享
1、介绍 -- 【请求作用域对象】
在同一个网站中,当两个Servlet之间通过【请求转发】方式进行调用时,因为使用同一个
请求协议包,而一个请求协议包对应只对应同一个【请求对象】,因此可以利用这一个
请求对象实现数据共享
2、命令实现
oneServlet
requset.setAttribute("key1",value);
request.getRequestDispatcher("/two").forword(request,response);
twoServlet
Object value=requesr.getAttrubute("key2");
十七、监听器接口
1、介绍
监控【作用域对象生命周期变化时刻】以及【作用域对象共享数据变化时刻】
2、作用域对象
1)为两个Servlet之间提供数据共享方案的对象--【作用域对象】
2)Servlet规范下作用域对象:
ServletContext :全局作用域对象
HttpSession :会话作用域对象
HttpServletRequest :请求作用域对象
3、开发步骤
1)选择监听器接口进行
2)重写【监听事件处理方法】
3)在web.xml文件将监听器实现类注册到Http服务器
<listener>
<listener-class>com.bjpowernode.listener.oneListener</listener-class>
</listener>
4、ServletContextListener接口
1)检测全局作用域对象被初始化时刻以及被销毁时刻
2)监听事件处理方法
public void contextInitlized(); 在全局作用域对象被Http服务器初始化时调用
public void contextDestory(); 在全局作用域对象被Http服务器销毁时候触发调用
5、ServletContextAttributeListener接口
1)作用:通过这个接口合法的检测全局作用域对象共享数据变化时刻
2)监听事件处理方法
public void contextAdd(); 在全局作用域对象添加共享数据
public void contextRemove(); 在全局作用域对象删除共享数据
public void contextReplaced(); 在全局作用域对象更新共享数据
十八、Servlet规范扩展---Filter接口(过滤器接口)
1、介绍 -- Filter接口在Http服务器调用资源文件之前,对Http服务器进行拦截
2、作用
1)拦截服务器,帮助Http服务器检测当前请求合法性
2)拦截服务器,对当前请求进行增强惭怍
3、步骤
1)实现Filter接口
2)重写Filter接口中doFilter方法
3)web.xml将过滤器接口实现类注册到Http服务器
4、Filter拦截地址格式
1)命令格式:
<filter>
<filter-name>oneFilter</filter-name>
<filter-class>com.bjpowernode.filter.OneFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>oneFilter</filter-name>
<url-pattern>拦截地址</url-pattern>
<filter-mapping>
2)具体文件
/img/mm.jpg
3)某个文件夹下所有的资源文件
/img/*
4)某种类型的文件
*.jpg
5)网站中任意文件