Servlet请求与响应

请求与响应

1. 请求:客户端向服务器

代表了客户端向服务器发送请求报文,该对象由服务器(web容器,servlet容器)创建同时发送给service()方法,发送给service(),service()再发送给doGet()或doPost()

作用:

  1. 获取请求参数

    String username = req.getParameter("username");
    
  2. 获取项目的虚拟路径

    String contextPath = req.getContextPath();
    
  3. 转发

    1. 第一步:获取调度器
    2. 第二步:将请求对象和响应对象传入调度器进行转发。
    RequestDispatcher dispatcher = req.getRequestDispatcher("loginSuccess.html");
    dispatcher.forward(req,resp);
    
  4. 域对象

类型:HttpServletRequest

2. 响应:服务器向客户端

代表了服务器向客户端发送响应报文,该对象由服务器(web容器,servlet容器)创建同时发送给service()方法,发送给service(),service()再发送给doGet()或doPost()

作用:

  1. 服务器向客户端做出响应(文本,html)

    resp.getWriter().write("lalalla");
    
  2. 重定向

    resp.sendRedirect("index.html");
    

类型:HttpServletResponse

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //实现登录功能
        /**
         * 1. 获取用户名密码
         * 2. 判断用户名密码是否正确
         * 3. 跳转
         */
        String username = req.getParameter("username");//通过请求对象获取请求参数
        String pwd = req.getParameter("pwd");
        if("admin".equals(username)&&"admin2".equals(pwd)){
            //登录成功跳转,转发
            RequestDispatcher dispatcher = req.getRequestDispatcher("loginSuccess.html");
            dispatcher.forward(req,resp);
        }else{
            //登录失败调转,重定向
            resp.sendRedirect("index.html");
        }
    }

3. 转发和重定向

区别:

  1. 客户端只发送一次请求,重定向客户端发送两次请求
  2. 转发可以访问WEB-INF下的资源,而重定向不可以。WEB-INF属于服务器私有目录,客户端不能直接访问。
  3. 转发可以携带request对象,重定向不能。

1. 请求的转发

Servlet在接收到客户端的请求后,先进行一定的处理,不进行响应。而是在服务器内部“转发”给其他servlet继续处理。在这种情况下,客户端只发送了一次请求,浏览器地址栏不会发生变化,用户也感知不到请求发生了转发。全程在服务器内部处理。
image

protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
		//1.使用RequestDispatcher对象封装目标资源的虚拟路径
		RequestDispatcher dispatcher = request
				.getRequestDispatcher("/index.html");
		//2.调用RequestDispatcher对象的forward()方法“前往”目标资源
		//[注意:传入的参数必须是传递给当前Servlet的service方法的
		//那两个ServletRequest和ServletResponse对象]
		dispatcher.forward(request, response);
	}

2. 请求的重定向

Servlet在接收到客户端的请求后,给客户端一个特殊的响应,要求浏览器去请求一个新的资源。在这个过程种浏览器会发出两次请求,浏览器地址栏会发生变化。
image

protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
		//1.调用HttpServletResponse对象的sendRedirect()方法
		//2.传入的参数是目标资源的虚拟路径
		response.sendRedirect("index.html");

posted @ 2021-06-09 10:18  锤子布  阅读(230)  评论(0编辑  收藏  举报