失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Servlet(10)—请求转发和请求重定向

Servlet(10)—请求转发和请求重定向

时间:2018-09-15 02:03:09

相关推荐

Servlet(10)—请求转发和请求重定向

请求转发与请求重定向

①区别:

本质区别:请求转发只发出一次请求,请求重定向则发出两次请求。请求转发:地址栏是初次发出请求的地址在最终的Servlet中,request对象和中转的那个request是同一个对象

只能转发给当前web应用的资源

/表示当前web应用的根目录 请求重定向:地址栏不再是初次发出的请求地址,地址栏为最后响应的那个地址在最终的Servlet中,request对象和中转的那个request不是同一个对象可以重定向到任何资源

/表示当前web站点的根目录

②源代码

请求的转发:

public class ForWardServlet extends HttpServlet {private static final long serialVersionUID = 1l;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("ForWordServvlet's doGet");req.setAttribute("name", "abcd");System.out.println("ForWordServlet:" + req.getAttribute("name"));//请求的转发//调用HttpServletRequest的getRequestDispatcher(path)方法获取RequestDispatcher对象,//调用getRequestDispatcher(path)需要填入转发的地址String path = "TestServlet";RequestDispatcher requestDispatcher = req.getRequestDispatcher(path); //2.调用HttpSerlvetReuqest的forward(request, response)进行请求转发requestDispatcher.forward(req, resp);}}

请求的重定向

public class RedirectServlet extends HttpServlet {private static final long serialVersionUID = 1l;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("RedirectServlet's doGet");req.setAttribute("name", "efgh");System.out.println("RedirectSerlvet's name:" + req.getAttribute("name"));//请求执行重定向,直接调用response的sendRedirect(path)方法,其中path为重定向的地址String path = "testServlet";resp.sendRedirect(path);}}

2 . 请求转发与重定向和对象、属性一块使用(实例)

a.jsp

<body><h1>A page</h1><!-- 方式一:include指令 --><%@ include file="b_1.jsp" %><!-- 方式二:jsp标签 --><jsp:include page="b_2.jsp"><jsp:param value="1234" name="username"/></jsp:include><!-- 其作用与请求转发一致 --><%-- <jsp:forward page="b_3.jsp"><jsp:param value="123" name="username"/></jsp:forward> --%><!-- 乱码问题 --><form action="Attr_1.jsp" method="get"><input type="text" name="username" value="中文"><input type="submit" value="Submit"></form><%//设置属性pageContext.setAttribute("pageContextAttr", "pageContextValue"); request.setAttribute("requestAttr", "requestValue"); session.setAttribute("sessionAttr", "sessionValue"); application.setAttribute("applicationAttr", "applicationValue"); %></body>

①Attr_1.jsp:

<h1>Attr_1 page</h1><!-- 获取属性 -->pageContextAttr:<%= pageContext.getAttribute("pageContextAttr") %><br><br>requestAttr:<%= request.getAttribute("requestAttr") %><br><br>session:<%= session.getAttribute("sessionAttr") %><br><br>application:<%= application.getAttribute("applicationAttr") %><br><br><a href="Attr_2_1.jsp">To Attr_2_1 Page</a>:请求转发到Attr_3.jsp<br><br><a href="Attr_2_2.jsp">To Attr_2_2 Page</a>:请求重定向到Attr_3.jsp<br><br><a href="Attr_2_3.jsp">To Attr_2_3 Page</a>:请求转发向到Attr_3.jsp,以获取request对象的属性值<br><br><br><br><!-- 处理post请求的处理方式 --><% request.setCharacterEncoding("UTF-8");%>username(处理post):<%= request.getParameter("username") %><br><br><br><!-- 乱码问题 --><!-- 处理get请求处理方式 --><%String val = request.getParameter("username"); String username = new String(val.getBytes("UTF-8"), "UTF-8");out.println("username(处理get方法一):" + username);%><!-- 这样处理get请求非常麻烦,可以在apache中server.xml中和eclipse中Servlet项目中的servlet.xml文件相同的位置设置usebodyEncoding的值 --><br><br><br>username(处理get方法二):<%= request.getParameter("username") %>②Attr_2_1.jsp:<h1>Attr_2_1 page</h1><%//请求转发request.getRequestDispatcher("/Attr_3.jsp").forward(request, response);%>③Attr_2_2.jsp:<h1>Attr_2_2 page</h1><%//请求重定向response.sendRedirect("Attr_3.jsp");%>④Attr_2_3.jsp:<h1>Attr_2_3 page</h1><%//设置属性pageContext.setAttribute("pageContextAttr", "pageContextValue"); request.setAttribute("requestAttr", "requestValue"); session.setAttribute("sessionAttr", "sessionValue"); application.setAttribute("applicationAttr", "applicationValue"); %><%//请求转发request.getRequestDispatcher("/Attr_3.jsp").forward(request, response);%><br>⑤Attr_3.jsp:<h1>Attr_3 page</h1><!-- 获取属性 -->pageContextAttr:<%= pageContext.getAttribute("pageContextAttr") %><br><br>requestAttr:<%= request.getAttribute("requestAttr") %><br><br>session:<%= session.getAttribute("sessionAttr") %><br><br>application:<%= application.getAttribute("applicationAttr") %>⑥页面访问:请求的页面 到达的页面——> Attr2_1.jsp ——>请求转发, ——> Attr_3.jsp 转发到Attr_3.jsp之后的地址http://localhost:8080/Demo5/Attr_2_1.jspAttr_1.jsp ——> Attr2_2.jsp ——>请求重定向, ——> Attr_3.jsp 到Attr_3.jsp之后的地址http://localhost:8080/Demo5/Attr_3.jsp——> Attr2_3.jsp ——>请求转发 ——> Attr_3.jsp (request对象获取requestAttr属性值,以证实request的属性范围),转发后的地址http://localhost:8080/Demo5/Attr_2_3.jsp

③Attr_2_1.jsp

<body><h1>Attr_2_1 page</h1><%//请求转发request.getRequestDispatcher("/Attr_3.jsp").forward(request, response);%></body>

④Attr_2_2.jsp

<body><h1>Attr_2_2 page</h1><%//请求重定向response.sendRedirect("Attr_3.jsp");%></body>

⑤Attr_2_3.jsp

<body><h1>Attr_2_3 page</h1><%//设置属性pageContext.setAttribute("pageContextAttr", "pageContextValue"); request.setAttribute("requestAttr", "requestValue"); session.setAttribute("sessionAttr", "sessionValue"); application.setAttribute("applicationAttr", "applicationValue"); %><%//请求转发request.getRequestDispatcher("/Attr_3.jsp").forward(request, response);%><br></body>

⑥Attr_3.jsp

<body><h1>Attr_3 page</h1><!-- 获取属性 -->pageContextAttr:<%= pageContext.getAttribute("pageContextAttr") %><br><br>requestAttr:<%= request.getAttribute("requestAttr") %><br><br>session:<%= session.getAttribute("sessionAttr") %><br><br>application:<%= application.getAttribute("applicationAttr") %></body>

结果:

Attr_1.jsp中三个超链接的结果是

超链接1:

超链接2:

超链接3:

如果觉得《Servlet(10)—请求转发和请求重定向》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。