什么是重定向
服务器向浏览器发送一个302状态码及一个Location消息头(该消息头的值是一个地址,称之为重定向地址),浏览器收到后会立即向重定向地址发出请求
重定向特点
重定向的地址可以是任意的地址
重定向之后,浏览器地址栏的地址会发生改变
重定向过程中涉及到的Web组件并不会共享同一个request和response对象(即:不能用共享对象)
转发
(1)什么是转发?
一个web组件将未完成的处理通过容器交给另外一个web组件继续做。
注:
web组件指的是servlet或者是jsp。
通常是一个Servlet获得数据之后转发给一个servlet或jsp来展现。
(2)使用转发
step1.绑订数据到request对象上
request.setAttribute(String name,Object obj);
注:
name:绑订名
obj:绑订值
转发后的servlet,使用绑定名获取绑定值
Object request.getAttribute(String name);
step2.获得转发器
request.getRequestDispatcher(String url)
step3.转发请求
.forward(request,response);;
注:
url是转发的地址。通常是一个jsp。
转发和重定向的区别
(1)能否共享request对象:用set/get request.attribute()
转发可以,而重定向不行。
当请求到达容器,容器创建request对象和response对象,当
响应发送完毕,容器会销毁这两个对象。也就是说,request对象
和response对象的生存时间是一次请求和响应期间存在。
(2)目的地是否有限制
转发地址要求属于同一个web应用,重定向地址是任意的。
(3)浏览器地址栏的地址有无变化
转发没有变化,重定向有变化(重定向之后的地址)。
(4)一件是否已经做完
转发是一件事没有做完,让另外一个web组件继续做; 而重定向是一件事已经完成,再做另外一件独立的事件。
什么是Servlet上下文:即servletcontext
容器启动之后,会为每一个Web应用创建唯一的一个符合ServletContext接口要求的对象,该对象就是Servlet上下文
特点
唯一性(一个Web应用对应一个Servlet)
一直存在(只要容器不关闭,应用没有被卸载删除,servlet上下文就一直存在)
如何获得Servlet上下文
方式一
通过GenericSrvlet提供的 getServletContext()
方式二
通过ServletConfig提供的 getServletContext()
方式三
通过HttpSession提供的 getServletContext()
方式四
通过FilterConfig提供的 getServletContext()
Servlet上下文的作用及特点
作用一
使用setAttribute绑定数据
作用二
使用removeAttribute移除绑定数据
作用三
使用getAttribute获取绑定数据
特点
servlet上下文绑定的数据可以被整个应用上的所有组件共享,并且一直可以访问
创建Servlet用注解的方式
网站访问人数案例
测试request范围
注: ServletContext context = getServletContext();这句话可以理解为一个servlet可以使用getservletcontext()方法得到了web应用中servletcontext,从而使用servletcontext接口的一些方法
共享对象及作用域范围
HttpSession context = request.getSession();
session个人理解为浏览器范围