1、请求转发和重定向的区别
重定向:
请求转发:
可以看出,请求转发只需要发起一次请求,与重定向不同,请求转发发生在服务器内部。请求转发后浏览器的地址不会改变。
2、request请求转发
需要建立两个Servlet:
注意事项:配置文件(两个Servlet):
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>MyServletname</servlet-name> <servlet-class>MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServletname</servlet-name> <url-pattern>/abc</url-pattern> </servlet-mapping> <servlet> <servlet-name>MyServletname1</servlet-name> <servlet-class>Servlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServletname1</servlet-name> <url-pattern>/abc1</url-pattern> </servlet-mapping> </web-app>
定义Servlet1:MyServlet:(直接访问的是这个Servlet)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("MyServlet"); RequestDispatcher dispatcher=request.getRequestDispatcher("/abc1");//获取转发器 dispatcher.forward(request,response); }
定义Servlet2:请求转发后跳转到此Servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("Servlet2"); }
虽然访问的是MyServlet的地址,但是显示的结果表示Servlet2被访问了,但是地址并不会改变。这也是请求转发与重定向的区别。