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用戶最後接收到的是第二個servlet的response響應,而include方法用戶能夠同時接收到第一個和第二個servlet的response響應。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登陸
圖解兩者的區別: