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登陸

圖解兩者的區別:

輸入圖片說明

輸入圖片說明

相關文章
相關標籤/搜索