RequestDispatcher

RequestDispatcher只有两个方法:html

** public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException;**java

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

两个方法都是服务器端的请求跳转,惟一的区别就是forward用户最后接收到的是第二个servletresponse响应,而include方法用户能够同时接收到第一个和第二个servletresponse响应。sql

上代码:浏览器

package handler;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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

/**
 * Servlet implementation class LoginHandler
 */
public class LoginHandler extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public LoginHandler() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		String name = request.getParameter("name");
		String password = request.getParameter("password");
		DataSource dataSource = (DataSource) request.getSession().getServletContext().getAttribute("dataSource");
		try {
			Connection connection = dataSource.getConnection();
			String sql = " select count(1) from user where name = ? and password = ?";
			PreparedStatement statement = connection.prepareStatement(sql);
			statement.setString(1, name);
			statement.setString(2, password);
			ResultSet resultSet = statement.executeQuery();
			resultSet.next();
			int count = resultSet.getInt(1);
			if (count == 1) {
				System.out.println("登陆成功");
				RequestDispatcher rd = request.getRequestDispatcher("welcome");
				response.getWriter().append("登陆成功\n");
				response.getWriter().append("come from LoginHandler servlet \n");
				rd.forward(request, response);
				/* rd.include(request, response);*/
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
package handler;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet implementation class WelcomeServlet
 */
public class WelcomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public WelcomeServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		String name=request.getParameter("name");
		PrintWriter pw= response.getWriter();
		pw.append("欢迎"+name+"登陆");
		pw.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

web.xml服务器

<servlet>
		<servlet-name>LoginHandler</servlet-name>
		<display-name>LoginHandler</display-name>
		<description></description>
		<servlet-class>handler.LoginHandler</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>welcome</servlet-name>
		<description></description>
		<servlet-class>handler.WelcomeServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>LoginHandler</servlet-name>
		<url-pattern>/LoginHandler</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>welcome</servlet-name>
		<url-pattern>/welcome</url-pattern>
	</servlet-mapping>

在浏览器中输入:app

http://localhost:8080/study_web/LoginHandler?name=liyuhang&password=123321

当使用代码:url

rd.forward(request, response);

浏览器的响应以下:spa

欢迎liyuhang登陆

当使用代码:code

/* rd.include(request, response);*/

浏览器响应以下:

登陆成功 come from LoginHandler servlet 欢迎liyuhang登陆

图解两者的区别:

输入图片说明

输入图片说明

相关文章
相关标签/搜索