• servlet 重定向(八)


    1.重定向是什么?

      这里说的重定向是由http协议规定的一种机制。其工作流程如下所述。

      (1)客户端发起http请求,访问服务器端组件。

      (2)服务器端返回一个状态代码为302的响应结果。该代码的意思是让浏览器再访问另一个组件,响应结果中包含着访问新组件的url地址。新的访问组件可能在同一个应用中也可能不在同一个应用中。

      (3)当浏览器接受到这种结果,会自动访问新的url.

      (4)浏览器端接受新的url返回结果。

    2.实现

      重定向通过Servlet API 中HttpServletReponse接口提供的 sendRedirect(String location)方法完成。

    3.重定向特点

      3.1 servlet源组件的响应结果不会返回到客户端。

      3.2  servlet源组件和目标组件不会共享同一个ServletRequest对象。

      3.3 如果源组件在进行重定向前提前提交响应结果,会报异常。

           3.4 重定向的地址不必是同一个服务器的应用。

    4.案例

    Check1Servlet 第一次请求的类
    package com.learn;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * Created by Administrator on 2017/09/28.
     */
    public class Check1Servlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            String userName = req.getParameter("name");
            String message = "";
    
            if(userName == null){
                message = "please input your name";
            } else {
                message = userName;
            }
            req.setAttribute("mess",message);
    
            PrintWriter out = resp.getWriter();
            out.print("before redirect ");
            System.out.println("before redirect");
    
            resp.sendRedirect("out1?mess="+message);
            out.print("after redirect");
            System.out.println("after redirect");
    
            out.close();
        }
    }
    Out1Servlet 重定向的类
    package com.learn;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * Created by Administrator on 2017/09/28.
     */
    public class Out1Servlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            String mess = (String) req.getAttribute("mess");
            System.out.println("请求范围内的数据:"+mess);
    
            mess = req.getParameter("mess");
            System.out.println("请求参数中的:"+mess);
    
            PrintWriter out = resp.getWriter();
            out.write(mess);
            out.close();
    
    
    
        }
    }

    页面输出结果:

    控制台输出结果:

     

      

  • 相关阅读:
    Scribes:简单而智能的文本编辑器
    [Java 12 IO] IO 总结
    [Java 12 IO] Serializable 初步 ObjectOutputStream ObjectInputStream 将序列化的对象打出来
    IOS数据解析之XML
    IOS数据解析之JSON
    IOS网络请求类(NSURLCollection)
    IOS之多线程
    IOS开发常见注意点
    IOS常用封装总结
    UIScrollView 的常用属性和方法
  • 原文地址:https://www.cnblogs.com/wwyx-xi/p/7608670.html
Copyright © 2020-2023  润新知