本系列博客汇总在这里:请求对象 request 和响应对象 response 汇总
HttpServletRequest 请求转发(服务器端跳转 forward)
-
在 Servlet 中请求转发是大量要使用的,因为当我们访问一个 Servlet 的时候通常会执行一些后台的业务逻辑,然后跳转到一个结果页面,那么跳转到结果页面的这个过程就是请求转发,举个例子我们做登录的功能,我们填写用户名密码然后提交到一个负责登录的 Servlet,Servlet 为我们做用户名和密码的校验,如果我们都正确的话,我们就要跳转到登录的提示页面,如果错误就要跳转到登录失败的页面。
-
Request 的请求转发也可以叫做服务器端的跳转,虽然有页面的跳转但是我们会发现地址栏是不会有变化的。
request.getRequestDispatcher("/success.html").forward(request, response);
-
我们不但可以跳转到静态页面(后续主要讲解是动态页面我们通常会跳转到一个 jsp( jsp 在Servlet 之后产生)的提示页面,因为我们要返回的是动态页面,所有 html 是不适合(后续讲解))。还可以跳转到 Servlet,此时我们可以给 request 来设置当前域中的属性值,在该域之内(当前请求完成之前)都能获得到该属性值。
request.setAttribute("name", "魏宇轩"); request.getAttribute("name");
-
以上操作完整源码
web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.wyx.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet> <servlet-name>HelloServlet1</servlet-name> <servlet-class>com.wyx.servlet.HelloServlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet1</servlet-name> <url-pattern>/hello1</url-pattern> </servlet-mapping> </web-app>
1.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>请求转发</title> </head> <body> <h1>请求转发html页面</h1> <form action="/reqresp_demo4/hello" method="post"> 姓名:<input name="name" type="text"><br> 年龄:<input name="age" type="text"><br> 简介:<textarea rows="10" cols="20" name="introduce"></textarea> <br> <input type="submit" value="提交"> </form> <hr> <h1>请求转发servlet</h1> <form action="/reqresp_demo4/hello1" method="post"> 姓名:<input name="name" type="text"><br> 年龄:<input name="age" type="text"><br> 简介:<textarea rows="10" cols="20" name="introduce"></textarea> <br> <input type="submit" value="提交"> </form> </body> </html>
success.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>请求转发</title> </head> <body> <h1>注册成功</h1> </body> </html>
HelloServlet
package com.wyx.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 逻辑的处理 */ System.out.println("servelt被访问"); /** * request请求转发,服务器端的页面跳转,地址栏不变 */ request.getRequestDispatcher("/success.html").forward(request, response); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
HelloServlet1
package com.wyx.servlet; import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("servelt1被访问"); request.getRequestDispatcher("/hello").forward(request, response); } /** * post方式请求处理中文乱码 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
如有错误,欢迎指正!