Servlet跳转

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

Servlet跳转

从一个jsp或者是一个HTML页面可通过表单或超链接跳转进Servlet,从Servlet也可跳转到其他Servlet、jsp或其他页面
两种跳转形式:
客户端跳转——请求重定向
服务器端跳转——请求转发

客户端跳转

在Servlet中进行客户端跳转,可直接使用HttpServletResponse接口的sendRedirect()方法即可,但此跳转只能传递session范围的属性,而无法传递request范围的属性
sendRedirect方法不仅可以重定向到当前应用程序中的其他资源它还可以重定向到同一个站点上的其他应用程序的资源,甚至使用绝对URL重定向到其他站点的资源。
如果传递个sendRedirect方法的相对URL以“/”开头,则是相对整个web站点的根目录,而不是相对于当前web应用程序的根目录

Insert title here 重定向 直接请求转发
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);
        }

在这里插入图片描述

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值