Servlet跳转
从一个jsp或者是一个HTML页面可通过表单或超链接跳转进Servlet,从Servlet也可跳转到其他Servlet、jsp或其他页面
两种跳转形式:
客户端跳转——请求重定向
服务器端跳转——请求转发
客户端跳转
在Servlet中进行客户端跳转,可直接使用HttpServletResponse接口的sendRedirect()方法即可,但此跳转只能传递session范围的属性,而无法传递request范围的属性
sendRedirect方法不仅可以重定向到当前应用程序中的其他资源它还可以重定向到同一个站点上的其他应用程序的资源,甚至使用绝对URL重定向到其他站点的资源。
如果传递个sendRedirect方法的相对URL以“/”开头,则是相对整个web站点的根目录,而不是相对于当前web应用程序的根目录
package com.org;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class RequestServlet1
*/
@WebServlet("/RequestServlet1")
public class RequestServlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RequestServlet1() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
response.setContentType("text/html;charset=UTF-8");
String type=request.getParameter("type");
if(type.equals("redirect")){
response.sendRedirect("RequestServlet2?type="+type);
}else{
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
package com.org;
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;
/**
* Servlet implementation class RequestServlet2
*/
@WebServlet("/RequestServlet2")
public class RequestServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RequestServlet2() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("欢迎,您的请求方式为:"+request.getParameter("type"));
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}


服务器端跳转
在Servlet中执行服务器端跳转,须依靠RequestDispatcher接口完成,此接口中国提供了如下两个方法
public void forward(ServletRequest request,ServletResponse response)throws ServletException,IOException
public void include (ServletRequest request,ServletResponse response)throws
ServletException,IOException
RequestDispatcher实例对象是由Servlet引擎创建,它用于包装一个要被其他资源调用的资源,并可以通过其中的方法将客户端的请求转发给所包装的资源。
使用RequestDispatcher接口的forward方法就可以完成跳转功能的实现,但如果想使用此接口,还需使用ServletRequest接口提供的方法进行实例化 publicRequestDispatcher getRequestDispatcher(String path)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
response.setContentType("text/html;charset=UTF-8");
String type=request.getParameter("type");
if(type.equals("redirect")){
response.sendRedirect("RequestServlet2?type="+type);
}else{
javax.servlet.RequestDispatcher rd = request.getRequestDispatcher("RequestServlet2");
//RequestDispatcher rd=request.getRequestDispatcher("RequestServlet2");
request.setAttribute("type", type);
rd.forward(request, response);
}

客户端跳转与服务器端跳转

本文介绍了Servlet中的跳转方式,包括客户端跳转(请求重定向)和服务器端跳转(请求转发)。客户端跳转通过HttpServletResponse的sendRedirect()方法实现,只能传递session属性。服务器端跳转利用RequestDispatcher接口的forward()方法,可以传递request和session属性。

6025

被折叠的 条评论
为什么被折叠?



