JavaWeb世界(五):Web之间组件共享、Servlet三大作用域对象

一、Web组件之间的交互

Web组件之间的跳转方式

方式一:请求转发(forward)

Servlet1.java:

@WebServlet("/forward/s1")
public class Servlet1 extends HttpServlet{
	
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out = resp.getWriter();
		System.out.println("Servlet1...Before");
		out.println("Servlet1...Before");
		
		//请求转发
		req.getRequestDispatcher("/forward/s2").forward(req, resp);
		System.out.println("Servlet1...After");
	}

}


Servlet2.java:

@WebServlet("/forward/s2")
public class Servlet2 extends HttpServlet{
	
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out = resp.getWriter();
		System.out.println("Servlet2...");
		out.println("Servlet2......");
		
	}

}

结果:

请求转发的特点:

  1. 浏览器地址栏不发生改变,不是目标地址 /forward/s2
  2. 请求转发只发送一个请求
  3. 共享同一个请求中的数据
  4. 最终响应给浏览器的由目标资源决定(即Servlet2)
  5. 请求转发不能跨域访问,只能在本项目中跳转
  6. 请求转发可以访问WEB-INF目录中的资源

唯一请求与唯一响应

注意:没有加 “/” 则使用当前资源的相对路径(在最后一个 “/” 之前的部分),例如 /forward 为相对路径

方式二:URL重定向(redirect)

URL重定向的特点:

  1. 浏览器地址栏发生改变,变成目标地址 /forward/s2 ;
  2. URL重定向发了两次请求;
  3. 互相不共享数据,因为有两次独立的请求;
  4. 最终响应给浏览器的由目标资源决定(即Servlet2,相当于把目标地址拷贝到浏览器地址栏);
  5. URL重定向跨域访问,可以访问其他项目中的资源;
  6. URL重定向不可以访问WEB-INF目录中的资源。

方式三:请求包含(include)

二、Servlet三大作用域对象

目的:共享数据

Request:每一次请求都是一个新的request对象,如果在Web组件之间需要共享同一个请求中的数据,只能使用请求转发;

Session:每一次会话都是一个新的session对象,如果需要在一次会话中的多个请求之间共享数据,只能使用Session;

Application:应用对象,Tomcat启动到关闭,表示一个应用,在一个应用中有且只有一个application对象,作用于整个Web应用,可以实现多次会话数据共享。

对象名称 对象类型
request HttpServletRequest
session HttpSession
servletcontext(application) ServletContext

作用域对象如何共享数据:

1.设置作用域中的共享数据

      作用域对象.setAttribute(String name, Object value);

2.获取作用域中的共享数据

      Object value = 作用域对象.getAttribute(String name);

3.删除作用域中的指定数据

      作用域对象.removeAttribute(String name);

实例:

Application是存在与整个服务器运行期间的

三、ServletContext接口和常用方法

ServletContext:表示Web应用,从Tomcat启动到关闭,只有一个对象,而且是在启动时就已经创建,因此在JSP中称其为application

1.如何获取:

方式一:在Servlet类中,super.getServletContext();

方式二:通过请求对象来获取,request.getServletContext();

方式三:通过Session对象来获取request.getSession.getServletContext();

上述三种方式获取的都是同一个对象

2.常用的方法:

  1. getRealPath(String path):根据一个资源的相对Web根的路径,获取绝对路径
  2. getContextPath():返回当前响应的上下文路径
  3. 获取全局初始化参数(只能使用这两个方法):
    1. String getInitParameter(String name):获取指定名称的全局初始化参数
    2. Enumeration<String> getInitParameterNames(); 获取所有全局初始化参数名称

ServletConfig接口中的获取初始化参数方法,只能获取当前Servlet自身的初始化参数,不能获取全局初始化参数;

ServletContext接口中的获取初始化参数方法,只能获取全局Servlet自身的初始化参数,不能获取自身初始化参数。

发布了40 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42650988/article/details/95959929