在一个web应用中应该如何完成资源的跳转
第一种方式:转发
代码
// 获取请求转发器对象,并调用请求转发器对象的方法forward完成转发 request.getRequestDispatcher("/dept/list").forward(request, response);
注意
1、不论转发多少次,都是一次请求。【即转发是一次请求】
第二种方式:重定向
代码
// 重定向时的路径中需要以项目名开始
response.sendRedirect(request.getContentPath() + "/b");
注:
(1)相当于response对象把/项目名/b响应到浏览器了
(2)重定向是重新发送了一次请求,不是转发了请求,相当于发送了两次请求
注意
1、javabean的规范
(1)有无参数的构造方法
(2)属性私有化
(3)对外提供setter和getter方法
(4)重写toString()
(5)重写hashCode + equals
(6)实现java.io.Serializable接口
转发和重定向的区别
形式上的区别
1、转发:(一次请求)
(1)在地址栏上发送的请求是:http://localhost:8080/servlet/a,最终请求结束之后,浏览器地址栏上的地址还是这个,不变。
(2)转发是一次请求,假如转发的请求是get,若转发的下一个Servlet中没有提供doGet方法,则会405错误
(3)转发可能会存在刷新问题,比如一次请求是往数据库添加数据,如果多次刷新,则会添加多条相同的数据。
2、重定向:(两次请求)
(1)重定向会导致浏览器地址栏上的地址发生改变。
(2)重定向可以解决刷新问题。
转发和重定向的选择
1、转发
如果在上一个Servlet当中向request域中绑定了数据,希望从下一个Servlet当中把request域里的数据取出,使用转发机制
2、重定向
剩下的所有请求都使用重定向(使用较多)