欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Servlet跳转

程序员文章站 2024-03-15 10:39:17
...

一,Servlet跳转

    关于跳转,有两种方式:

    1,客户端跳转,地址栏跳转后发生改变,而且无法传递request范围的属性,是在所有操作都完成之后才产生的跳转。语法是:response.sendRedirect() ;

    2,服务器跳转,地址栏发生改变,能传递request范围的属性,属于无条件跳转,只要一执行到,则立即执行跳转操作。语法是:<jsp:forward>

    Servlet也可以完成跳转,因为Servlet本身也存在HttpServletResponse对象,所以直接通过此方法的sendRedirect()执行跳转。

    从一个JSP页面或者一个HTML页面可以通过表单(form action)或超链接(a href)跳到Servlet,那么从Servlet也可以跳转到JSP或HTML。

    Servlet的客户端跳转:直接使用HttpServletResponse接口中的sendRedirect()方法进行跳转,但是此跳转只能传递session范围的属性,不能传递request范围的属性。

public class ClientRedirectDemo extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.getSession().setAttribute("name", "IronMan") ;	//设置session属性,能传递
		request.setAttribute("info", "www.baidu.com") ;	        //设置request属性,不能传递
		response.sendRedirect("get_info.jsp") ;
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request,response) ;
	}
}

    上边代码执行后,可以发现已经将session的属性内容进行了传递,但是request的属性内容没有传递,因为在客户端跳转中,不能传递request属性范围。

    服务器端跳转

    因为在Servlet中服务器端跳转没有JSP中的"<jsp:forward>"的跳转格式,所以想要执行服务器端跳转,则必须依靠RequestDispatcher接口完成。此接口中含有跳转方法,

    public void forward(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{}

    如果要想使用RequsetDispatcher接口,还需要使用ServletRequest接口提供的一下方法进行实例化。

    public RequestDispatcher getRequestDispatcher(String path) ;

    RequestDispatcher rd = request.getRequestDispatcher(String path) ;    //进行接口对象实例化

public class ServerRedirectDemo extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.getSession().setAttribute("name","IronMan") ;	//设置session属性
		request.setAttribute("info","www.baidu.com") ;			//设置request属性
		RequestDispatcher rd = request.getRequestDispatcher("get_info.jsp") ;	//实例化接口对象,指定跳转页面
		rd.forward(request,response) ;					//进行服务器端跳转。
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response) ;
	}
}


转载于:https://my.oschina.net/bugkiller/blog/631114