Web组件跳转和数据共享

共享控制

请求转发(forward)

  • 一个Servlet接收到了请求,转发给另一个Servlet来负责部分或全部的请求处理
  • 对于请求转发来说这里强调的是Request对象,这两个Servlet使用的是同一个Request对象
  • Servlet使用javax.servlet.RequEstDispather.forward()方法来转发它所收到的HTTP请求。转发的目标Servlet负责生成响应结果,或将请求继续转发到另一个Servlet
  • 第一个Servlet生成的ServletRequst和ServletResponse对象被传递给下一个Servlet

请求转发可以访问到WEB-INF下的资源

URL重定向

URL重定向是第一次请求的响应码为302并且响应头中有Location,那么浏览器将根据Location的地址发出第二次请求。

请求转发和URL重定向的区别

转发 重定向
地址栏的变化 在地址栏内看不到路径的变化,在服务器端进行 在地址栏内可以看见路径的变化,在客户端进行
/ 的含义 表示当前WEB应用的根路径 WEB站点的服务器根路径, 重定向的页面不局限于当前的WEB应用,可以是外部的站点
可连接的资源 只能连接到当前WEB应用的资源 当前WEB应用的资源和外部的资源
访问WEB-INF下的资源 可以 不可以
向服务器发出的请求数 一次请求,共享页面的request对象 两次请求,不共享页面的request对象

提示:

  • 如果第二个Servlet不需要第一个Servlet接收到的请求数据,那么URL重定向和请求转发都可以用
  • 如果第二个Servlet要使用到第一个Servlet接收的请求数据,那么必须使用请求转发,保证两个Servlet共享一个Request对象

Include

Servlet类使用RequestDispatcher.include()方法包含其他的Web组件。对于包含来说这里强调的是Response对象,将响应输出的内容合并后输出。

共享信息

  • 在一个综合的web应用系统中,各个组件通过共享对象来交换数据,就叫web应用开发中的信息共享
  • 在JavaWeb应用中,通常使用四个共享对象(四个作用域):pageContext、request、session、servletContext

相同点:他们都有相同的存储方法

  • setAttribute(String name,Object value);
  • getAttribute(String name);
  • getAttributeNames();
  • removeAttribute(String name);

区别:共享范围

  • pageContext(PageContext):相同一个页面
  • request(HttpServletRequest):相同一次请求
  • session(HttpSession):相同一次会话
  • ServletContext(ServletContext):整个web应用的生命周期

ServletContext对象

Servlet容器在启动时会自动加载Web应用,并为每个Web应用创建唯一的ServletContext对象,可以把ServletContext看成是一个Web应用服务器端共享内存,在ServletContext中可以存放共享数据,它提供了4钟读取或设置共享数据的方法

  • setAttribute(String name,Object value);
  • getAttribute(String name);
  • getAttributeNames();
  • removeAttribute(String name);

获取ServletContext对象的四种方式:

//1.先得到servletCongig对象,然后在得到ServletContext
ServletContext servletContext = getServletConfig().getServletContext();
//2.直接得到
servletContext = getServletContext();
//3.从Session对象中得到
servletContext = request.getSession().getServletContext();
//4.可以直接从request上得到。只不过它是3.0的方法
servletContext = request.getServletContext();

ServletContext在服务器启动的时候被创建,那么可以提前通过web.xml配置一些全局初始化参数

<context-param>
    <param-name>xxxx</param-name>
    <param-value>XXXXXXXXXXXXXXXXXXXXXX</param-value>
</context-param>

ServletContext对象提供了以下两个获取初始化参数的方法:

  1. getInitParameter(String name)
  2. getInitParameterNames()

其他方法看API

Web组件跳转和数据共享》上有 3 条评论

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注