本章目标
掌握Servlet服务器端跳转及客户端跳转的使用;
掌握RequestDispatcher接口的使用。

 

Servlet跳转
从一个JSP或者是一个HTML页面可以通过表单或超链接跳转进Servlet,那么从Servlet也可以跳转到其他的Servlet、JSP或其他页面。
两种跳转形式:
    客户端跳转
    服务器端跳转

 

客户端跳转
在Servlet中如果要想进行客户端跳转,直接使用HttpServletResponse接口的sendRedirect()方法即可,但是需要注意的是,此跳转只能传递session范围的属性,而无法传递request范围的属性。

 

客户端跳转

package cn.demo;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ClientRedirectDemo extends HttpServlet {//继承HttpServlet
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {//处理服务
		request.getSession().setAttribute("name", "chaoyi");//设置session属性
		request.setAttribute("info", "www.baidu.com");//设置request属性
		response.sendRedirect("demo.jsp");//页面跳转
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {//处理服务
		this.doGet(request, response);//调用doGet()
	}
}

 

配置web.xml

<servlet><!-- 定义servlet -->
  	<servlet-name>client</servlet-name><!-- 与servlet-mapping对应 -->
  	<servlet-class>cn.demo.ClientRedirectDemo</servlet-class><!-- 定义包.类名称 -->
  </servlet>
  <servlet-mapping><!-- 映射路径 -->
  	<servlet-name>client</servlet-name><!-- 与servlet相对应 -->
  	<url-pattern>/030907/ClientRedirectDemo</url-pattern><!-- 页面的映射路径 -->
  </servlet-mapping>

 

接收属性

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>接收属性</title>
</head>
<% request.setCharacterEncoding("utf-8"); %>
<body>
<h3>session 属性:<%=session.getAttribute("name") %></h3>
<h3>request 属性:<%=request.getAttribute("info") %></h3>
</body>
</html>

 

效果图:

Servlet跳转_java

 

服务器端跳转
在Servlet中没有像JSP中的“<jsp:forward>”指令,所以,如果要想执行服务器端跳转的话,就必须依靠RequestDispatcher接口完成,此接口中提供了如下的两个方法:

public void forward(ServletRequest request,ServletResponse response) throws ServletException,IOException
public void include(ServletRequest request,ServletResponse response) throws ServletException,IOException


使用RequestDispatcher接口的forward()方法就可以完成跳转功能的实现,但是如果要想使用此接口还需要使用ServletRequest接口提供的如下方法进行实例化

public RequestDispatcher getRequestDispatcher(String path)

 

使用服务器端跳转

package cn.demo;
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServerRedirectDemo extends HttpServlet {//继承HttpServlet
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {//处理服务
		request.getSession().setAttribute("name", "chaoyi");//设置session属性
		request.setAttribute("info", "www.baidu.com");//设置request属性
		//实例化RequestDispatcher对象,同时指定跳转路径
		RequestDispatcher rd=request.getRequestDispatcher("demo.jsp");
		rd.forward(request, response);//服务器跳转
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {//处理服务
		this.doGet(request, response);//调用doGet()
	}
}

 

配置web.xml

<servlet><!-- 定义servlet -->
  	<servlet-name>servlet</servlet-name><!-- 与servlet-mapping对应 -->
  	<servlet-class>cn.demo.ServerRedirectDemo</servlet-class><!-- 定义包.类名称 -->
  </servlet>
  <servlet-mapping><!-- 映射路径 -->
  	<servlet-name>servlet</servlet-name><!-- 与servlet相对应 -->
  	<url-pattern>/030907/ServerRedirectDemo</url-pattern><!-- 页面的映射路径 -->
  </servlet-mapping>

 

效果图:

Servlet跳转_web.xml_02


  

小结
掌握两种跳转的区别;
服务器端跳转可以传递request范围的属性,而客户端跳转无法传递request范围的属性。