1、请求转发
①Servlet在接收到浏览器请求之后,进行一定的处理,先不进行响应,而是在服务器端内部"转发"给其他的Servlet程序继续处理。在这种情况下,浏览器只发出了一次请求,而且浏览器地址栏不会发生变化,用户也感知不到请求被转发了。
②转发请求的Servlet和目标Servlet共享同一个request对象,也就是在目标Servlet中可以通过request.getParameter()方法获取前台传入的参数。
③代码示例
request.getRequestDispatcher("success.jsp").forward(request, response);
request.getRequestDispatcher("success.html").forward(request, response);
request.getRequestDispatcher("forward").forward(request, response);
2、重定向
①Servlet接收到浏览器的请求并处理完之后,会给浏览器一个特殊的响应,这个特殊的响应要求浏览器去请求一个新的资源。这时浏览器会自动去访问这个新的资源的地址。整个过程无需用户操作,但浏览器发出的是两次请求,且浏览器的地址栏会改变为新资源的地址。
②重定向的情况下,原Servlet和目标资源之间就不能共享request域的数据了。
③代码示例
response.sendRedirect("fail.jsp");
response.sendRedirect("fail.html");
response.sendRedirect("forward?username="+username);
3、代码示例
①RegisterServlet.java
package com.keke.servlet; 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; public class RegisterServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); if("lps".equals(username)) { //请求转发 //①跳转到jsp页面 //request.getRequestDispatcher("success.jsp").forward(request, response); //②跳转到html页面 //request.getRequestDispatcher("success.html").forward(request, response); //③跳转到Servlet request.getRequestDispatcher("forward").forward(request, response); } else { //重定向 //①跳转到jsp页面 //response.sendRedirect("fail.jsp"); //②跳转到html页面 //response.sendRedirect("fail.html"); //③跳转到Servlet response.sendRedirect("forward?username="+username); } } }
②ForwardServlet.java
package com.keke.servlet; 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; public class ForwardServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); System.out.println("username="+username); } }
③web.xml
<!-- 注册RegisterServlet --> <servlet> <servlet-name>registerServlet</servlet-name> <servlet-class>com.keke.servlet.RegisterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>registerServlet</servlet-name> <url-pattern>/reg</url-pattern> </servlet-mapping> <!-- 注册RegisterServlet --> <servlet> <servlet-name>forwardServlet</servlet-name> <servlet-class>com.keke.servlet.ForwardServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>forwardServlet</servlet-name> <url-pattern>/forward</url-pattern> </servlet-mapping>