转发与重定向自我总结

这篇博客主要探讨了在JSP学习中,转发与重定向的区别。转发是内部调用,浏览器URL不变,而重定向会导致浏览器发起新请求,URL改变,且速度相对较慢,重定向后request对象无法再使用。

在jsp的学习中,转发与重定向的区别是一个难点。

//重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用。 

上述内容通过搜索得知。重定向的过程中无法再使用request

代码

使用重定向跳转页面,用于重定向的request无法保存所以需要使用session

所以FirstServlet

package com.demo;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

/**

 * Servlet implementation class FirstServlet

 */

@WebServlet("/FirstServlet")

public class FirstServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public FirstServlet() {

        super();

     

    }

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//请求转发

//String sno=request.getParameter("sno");

//RequestDispatcher requestDispatcher=request.getRequestDispatcher("SecondServlet");

//requestDispatcher.forward(request, response);

//请求重定向

 //session中保存Student对象

//response.sendRedirect("SecondServlet");

response.setContentType("text/html;charset=utf-8");

    PrintWriter out = response.getWriter();

    HttpSession session = request.getSession();

    // 给该session放入属性

    String name=request.getParameter("name");

    String sno=request.getParameter("sno");

    Student student=new Student();

    student.setName(name);

    student.setSno(sno);

    session.setAttribute("name", name);

    session.setAttribute("sno", sno);

    response.sendRedirect("SecondServlet");

}

 

}

实现过程中发现程序必须在doGet中才能显示,所以使用了doPost(request,response);

SecondServlet

package com.demo;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

/**

 * Servlet implementation class SecondServlet

 */

@WebServlet("/SecondServlet")

public class SecondServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public SecondServlet() {

        super();

        // TODO Auto-generated constructor stub

    }

 

/**

 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

 */

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

    HttpSession session = request.getSession();

    String name = (String) session.getAttribute("name");

    String sno = (String) session.getAttribute("sno");

    out.println("name:"+name+"sno:"+sno);

  

}

 

/**

 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

 */

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//out.println("sno:"+request.getParameter("sno"));

    //out.println("name:"+request.getParameter("name"));

//out.println("dopost");

//response.setContentType("text/html;charset=utf-8");

    //PrintWriter out = response.getWriter();

   // HttpSession session = request.getSession();

   // String name = (String) session.getAttribute("name");

   // String sno = (String) session.getAttribute("sno");

    //out.println("name:"+name+"sno:"+sno);

doPost(request,response);

   

    

}

 

}

 

 

 

 

 

 

运行程序发现页面已跳转到servlet2

若不使用重定向使用转发的话页面会继续保持在servlet1



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值