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>