forward和redirect的区别
RequestDispatcher类的forward()方法。该方法是指当浏览器发送请求的到servlet端时候,servlet把这个请求转发给另一个servlet
理,整个请求域不变,其中调用request.setAttribute()方法存入的数据对于第二个servlet也可取。
还有一种用法是当有请求到servlet端的时候,servlet经过一系列的处理通过request.setAttribute()方法把对象集合返回给前台,
前台jsp页面通过<c:foreach>遍历返回的对象。需要注意的是当以这种形式返回的时候,所有路径都要写成绝对路径,相对路径有
时候是以这个servlet所在路径为相对路径,你会发现你的css样式莫名的消失了。换成绝对路径问题解决。
HttpServletRequest类的sendRedirect()方法。这种方法一般用于当前台登陆页面的失败的时候,整个servlet端重定向回这个登陆页
面,让用户重新输入账号和密码。个人觉得在这种情况下让用户重新输入账号和密码比较好。如果还用forward回到登陆页面,
输入框里的值不会清空,体验感不是很好,当然只是个人观点。
下面看下forward的像前台传递对象集合的例子。
servlet:
while(it.hasNext()){
Element thingElement=it.next();
Thing thing=new Thing();
//设置事件编号
thing.setthingId(thingElement.attributeValue("category"));
//设置事件名称
thing.setthingName(thingElement.elementText("title"));
//设置事件发布者
thing.setthingAuthor(thingElement.elementText("author"));
//设置书籍内容
thing.setthingContent(thingElement.elementText("content"));
//设置事件起止时间
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date=sdf.parse((thingElement.elementText("startdata")));
thing.setthingStartdata(date);
} catch (ParseException e) {
e.printStackTrace();
}
try {
thing.setthingEnddata(new SimpleDateFormat("yyyy-MM-dd").parse(thingElement.elementText("enddata")));
} catch (ParseException e) {
e.printStackTrace();
}
li.add(thing);
}
request.setAttribute("list", li);
RequestDispatcher requestDispatcher=request.getRequestDispatcher("Home_page/homepage.jsp");
requestDispatcher.forward(request, response);
}
jsp:
<c:forEach items="${list}" var="thing">
<div class="detail">
<div class="right-text">
<p class="p1" id="${thing.getthingId()}">标号:${thing.getthingId()}</p>
<p class="p1">标题:${thing.getthingName()}</p>
<p class="p1">内容:${thing.getthingContent()}</p>
<p class="p1">日期:<fmt:formatDate value="${thing.getthingStartdata()}" pattern="yyyy-MM-dd" />
-- <fmt:formatDate value="${thing.getthingEnddata()}" pattern="yyyy-MM-dd" /></p>
<p class="p1">发布者:${thing.getthingAuthor()}</p>
</div>
<div class="right-operation">
<div class="remove">删除</div>
<div class="change">修改</div>
</div>
</div>
<br/>
</c:forEach>