1 请求转发是什么
请求转发,字面意思理解分为请求和转发,浏览器发出请求,请求对象将请求转发给另一个页面
2 Demo
index.jsp
<html>
<body>
<h2>Hello World!</h2>
<form action="${pageContext.request.contextPath}/login" method="get">
username:<input type="text" name="username"> <br>
password:<input type="password" name="password"> <br>
<input type="checkbox" name="hobbies" value="girl">girl
<input type="checkbox" name="hobbies" value="game">game
<input type="checkbox" name="hobbies" value="ball">ball
<input type="checkbox" name="hobbies" value="gym">gym
<br/>
<input type="submit">
</form>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Success</title>
</head>
<body>
<h1>Success</h1>
</body>
</html>
LoginServlet
理解req.getRequestDispatcher(“success.jsp”).forward(req,resp);
请求转发:请求还是forward(req,resp),只是req对象调用getRequestDispatcher方法转发给了success.jsp
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobbies = req.getParameterValues("hobbies");
String shobbies = Arrays.toString(hobbies);
System.out.println(shobbies);
req.getRequestDispatcher("success.jsp").forward(req,resp);
}
}
注册Servlet
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.duowei.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
来看一下结果
观察一下,URL地址是不是没有变成 success.jsp ,但是页面内容是success.jsp的。
3 总结
再次理解一下
请求转发:req对象做的事情,req.getRequestDispatcher(),URL不跳转
响应重定向:resp对象做的事情,resp.sendredirect(),URL跳转