• 关于Servlet中重定向


    public class Red1Servlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("Red1... GET湖南");

    System.out.println("Red1... GET湖南");

    String name = request.getParameter("name");
    String age = request.getParameter("age");
    System.out.println("Red1Servlet: "+name+","+age);

    request.setAttribute("addr", "GET中国北京");
    //request.setAttribute("studs", new ArrayList<Map<String, Object>>());//可以把集合数据设置到attribue中

    //通过response
    //response.sendRedirect(request.getContextPath()+"/servlet/Red2Servlet?name=Tom&age=25");//重定向时的路径一定要带项目名称
    response.sendRedirect("http://www.sina.com");



    //前面的重定向相当于进行了响应且刷缓存。因此下面不能再重定向了
    //response.sendRedirect(request.getContextPath()+"/servlet/TowServlet");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("Red1... POST湖南");

    System.out.println("Red1... POST湖南");

    String name = request.getParameter("name");
    String age = request.getParameter("age");
    System.out.println("Red1ServletPost: "+name+","+age);

    request.setAttribute("addr", "POST中国北京");
    //request.setAttribute("studs", new ArrayList<Map<String, Object>>());//可以把集合数据设置到attribue中

    //通过response
    response.sendRedirect(request.getContextPath()+"/servlet/Red2Servlet");//重定向时的路径一定要带项目名称

    }

    }

    --------------------------------------------------------------------------------------------------------------------------------------------------

    public class Red2Servlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("Red2... GET城院!");

    System.out.println("Red2... GET城院!");

    String name = request.getParameter("name");
    String age = request.getParameter("age");
    System.out.println("Red2... Servlet: "+name+","+age);

    String addr = (String) request.getAttribute("addr");
    System.out.println("addr:"+addr);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("Red2... POST城院!");

    System.out.println("Red2... POST城院!");

    String name = request.getParameter("name");
    //GET方式下,中文乱码只能通过 byte b[] = name.getBytes("iso8859-1"); name= new String(b,"utf-8");
    String age = request.getParameter("age");
    System.out.println("Red2... Servlet: "+name+","+age);

    String addr = (String) request.getAttribute("addr");
    System.out.println("addr:"+addr);
    }

    }

    ---------------------------------------------------------------------------------------------------------------------------------

    <a href="<%=request.getContextPath()%>/servlet/Red1Servlet?name=Jack&age=22">重定向时,两个servlet的访问顺序, 读取页面数据, 传参</a>
    <form action="<%=request.getContextPath()%>/servlet/Red1Servlet" method="post">
    姓名:<input type="text" name="name"/>
    <input type="submit" value="提交">
    </form>

    -------------------------------------------------------------------------------------------------------------------------------------------

    1、重定向(两个不同的request和response),两个servlet的访问顺序,传参:
    1)重定向是通过response实现的: response.sendRedirect() //重定向时的路径一定要带项目名称
    2)第1个servlet中的内容会输出,但瞬间就会被第2个覆盖。因为浏览器接收到第1个的响应时,立刻会自动发起第2次请求,进而接收并显示第2次请求的响应结果。
    3)在第1个servlet重定向代码之后,不能再调用类似 转发或重定向 的代码。否则会500异常,因为转发之后,不能再回到此处进行跳转到别的页面
    4)访问顺序: 无论第1个是GET方式还是POST方式,第2个走的是doGet()。----该方式下,地址栏中最终会显示成第2个的访问地址

    5)读取页面参数: 由于是不同的request,请求页面的参数在第1个servlet当中能够读取出来,而第2个servlet中不能读取出来。
    6)两个servlet之间传参: “无法”通过 在第1个中request.setAttribute(),在第2个中request.getAttribute(); ----通过attribute的路中走不通的
    如果非要传参,可以通过:在第1个servlet当中给重定向地址添加“?name=Jack&age=25”实现---该方式下地址栏会显示参数信息,明文传输信息,因此敏感数据要加密
    7)站外跳转 只能通过重定向来实现,而且地址必须以“http://”开头,否则会被识别成站内。

  • 相关阅读:
    公司实习职位与要求
    段子
    Python 练习项目1 弹球游戏
    精准控制PWM脉冲的频率和数量
    ST Link 调试问题总结
    验证
    大道至简(第六章)读后感
    动手动脑
    大道至简(第五i章)读后感
    数组课后作业
  • 原文地址:https://www.cnblogs.com/1314wamm/p/5951497.html
Copyright © 2020-2023  润新知