JSP请求转发和重定向(深入)

需求:现在有这样一个test1.jsp①--->(test2.java)servlet②--->test3.jsp③的请求过程,需要最后一个jsp能获取到第一个jsp页面填写的值

笔者的实现方法:

1.请求转发

在test1.jsp中提交表单

<form action="test2" method="post">
     username: <input type="text" name="username">
      <input type="submit" value="submit">

</form>

在test2.java中的请求转发代码

RequestDispatcher rd = req.getRequestDispatcher("test3.jsp");

rd.forward(req,resp);

在test3.jsp中获取①中的值

 <% String username = request.getParameter("username");
    System.out.println(username);
   %>
username:<%=username %>


此方法经实践,成功得到①中填写的值,并且可以看到请求转发的请求次数只有一次,浏览器中也只能看出请求到了Servlet页面,实际上在后台已经转向了下一个jsp页面(

注:test6_1.jsp,test6_2.java,test6_3.jsp分别对应的是上文的test1.jsp①--->(test2.java)servlet②--->test3.jsp③下同)

2.重定向

<1>只对②即test2.java中的代码进行修改

resp.sendRedirect("test6_3.jsp");

在③中不能得到①中的值

<2>对②和③进行修改,并且使用Attribute函数,能否取得值?

test2.java

String username = req.getParameter("username");
req.setAttribute("username1",username);
resp.sendRedirect("test6_3.jsp");

test3.jsp

<%
    String username = (String)request.getAttribute("username1");
   %>
result.<br/>
username:<%=username %>



结果表明:重定向不带参数的跳转是不能获取到第一个jsp中的值。而且由图可以看出重定向方式发生了两次请求。

分析:在Servlet中进行重定向的时候调用了.HttpServletResponse对象的sendRedirect(String location)方法,而Response是响应对象即响应对象的方法,既然调用了响应对象的方法,表明整个请求过程已经结束,服务器开始向客户端返回执行的结果,并让客户端重新请求下一个jsp页面,所以得不到值username为null。





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值