web 基础(二)

//
HttpServletRequest req
req.setAttribute("heelo","world");
resp.sendRedirect(req.getContextPath()+"01/02.jsp");
客户端跳转 值传递不到jsp页面 这种方式只能把值存在session中 req.getSession().setAttribute()

传值 只能服务器端跳转
req.setAttribute("hello","world");
RequestDispatcher rd = req.getRequestDispactcher("01/02.jsp");
rd.forward(req,rsp);

jsp文件放入WEB-INF中无法直接访问只能通过servlet 服务器端的跳转去访问
req.setAttribute("hello","world");
RequestDispatcher rd = req.getRequestDispactcher("WEB-INF/01/02.jsp");
rd.forward(req,rsp);
此时直接访问02.jsp地址无法访问 只能通过配置的servlet去访问

当把一个对象传递给jsp页面
req.setAttribute("user",u)
jsp中则通过
${user.nickname} 对象名称.属性去获取值


jsp中标签
gt > greater than
lt < less than
ne !=
eq == 


jsp标签中 if else
<c:if test="${user.age gt 18}">成年了</c:if>
<c:choose>
   <c:when test="${user.age le 18}">未成年</c:when>
   <c:otherwise>18</c:otherwise>s
</c:choose>



jsp标签中的for
<c:forEach var="u" items="${users}" varStatus="s">
   //s相当于迭代器
   ${s.current.name}
   ${s.index}//当前索引
   ${s.first}//是否是第一个 true false
   ${s.last}//是否是最后一个值 true false
   ${s.begin}//开始的索引
   ${s.end}//从哪一个结束的 设置的索引
   ${u.usernames}
</c:forEach>s

${empty aa}//判断aa是否为空 
${not empty aa}//判断aa不为空

jsp 页面中的跳转 redirect 客户端跳转
servlet 跳转 forward 服务器端跳转  servlet如果客户端跳转 则跳转到另一个servlet


客户端重定向和服务端跳转的区别

区别
客户端重定向: 这是HTTP协议规定的一种机制,浏览器的地址会发生变化,会发起新的请求,原先的request对象和reponse对象在新的请求里面不可用。request对象和reponse对象是存在于服务端的对象,原先的请求已经结束了,这两个对象在服务端都被释放了

服务端跳转:  就是在服务端将请求由当前servlet分发给另外一个servlet(JSP本质也是sevlet)进行处理,原先的request对象和reponse对象继续可用

RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;
而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以使用绝对URL重定向到其他站点的资源
Redirect(客户端重定向)

标准意义上的“重定向”指的是HTTP重定向,它是HTTP协议规定的一种机制。这种机制是这样工作的:当client向server发送一个请求,要求获取一个资源时,在server接收到这个请求后发现请求的这个资源实际存放在另一个位置,于是server在返回的response中写入那个请求资源的正确的URL,并设置reponse的状态码为301(表示这是一个要求浏览器重定向的response),当client接受到这个response后就会根据新的URL重新发起请求。重定向有一个典型的特症,即,当一个请求被重定向以后,最终浏览器上显示的URL往往不再是开始时请求的那个URL了。这就是重定向的由来。



http重定向的一种典型应用是防止表单重复提交,其原理是:假如当前是一个用户信息编辑页面,表单通过Post提交给saveUser.action, 当该请求提交后,可返回一个重定向的response,地址可以是viewUser.action,即定向到用户详情页面(不能修改和提交)。当然这种防止页面重复提交的方法作用是有限的, 如果用户返回表单页面,重新提交表单,或是用户在服务器端响应到达之前,多次点击提交按钮(可通过JavaScript控制提交按钮点击次数)等等。

在Servlet里,实现客户端重定向的方法是:response.sendRedirect()

Dispatch(服务器端重定向)

Dispatch(Forward)指的是服务器在处理request的过程中将request先后委托多个servlet或jsp接替进行处理的过程。最为常见的是先由一个Servlet处理(比如实现业务逻辑的计算),然后forward给一个JSP进行视图的渲染。在Servlet里,实现dispatch是通过RequestDispatchers来实现的,而这个类有两个方法,一个是forward,另一个是include,相应的在JSP里实现dispatch的标签也有两个:<jsp:forward/>和<jsp:include/>.  不管是forward还是include,我们可以清楚的看到,从一个servlet或jsp向别一个servlet或jsp跳转,request和reponse始终在期间传递,这是服务器端能实现dispatch模式的关键。换句话说,我们可以把request和reponse看作是一种资源,一系列的servlet和jsp都是在基于同一份资源完成它们职责范围之内的计算。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值