1.转发
(1)什么是转发?
一个web组件将未完成的处理交给另外一个web组件继续做。
注:
a. web组件指的是jsp或者servlet。
b. 常见的场景是一个servlet获取处理结果之后,转交给一个jsp来展现。
(2)如何转发?
1)step1. 绑订数据到request对象上。
request.setAttribute(String name,Object obj);
注:
name一般称之为绑订名,
obj一般称之为绑订值。
Object request.getAttribute(String name);
2)step2. 获得转发器。
RequestDispatcher rd =
request.getRequestDispatcher(String uri);
注:
a. RequestDispatcher是一个接口,
该方法会返回一个符合该接口要求的对象,我们一般称之为转发器。
b. uri是转发的目的地,比如一个jsp的地址。
c. 转发的本质是一个web组件通过转发器,通知容器去调用另外一个web组件。
3)step3.转发
rd.forward(request,response)
(3)特点
a.转发之后,浏览器地址栏的地址不变。
b.转发的目的地地址是有限制的,要求是一个应用中的某个web组件的地址。
2.比较转发与重定向
(1)能否共享request对象?
转发可以,而重定向不行。
注:
a.当请求到达容器时,容器会立即创建request和response,当响应发送完毕,容器会立即销毁这两个对象。也就是说,request和response的生存时间是一次请求与响应期间存在!
b.转发是一次请求,重定向是两次请求。
(2)浏览器地址栏的地址有无变化?
转发无变化,而重定向有变化。
(3)目的地有无限制
转发有限制(同一个应用),而重定向没有任何限制。
登录
流程:
用户填写用户名和密码并提交,服务器端检查是否有匹配条件的记录,如果有,则登录成功,跳转到用户列表页面;否则登录失败,跳转到登录页面并提示用户。
步骤:
step1. UserDAO类
public User find(String username);
step2. 测试UserDAO。
step3. login.jsp
step4. LoginServlet
读取用户名和密码
调用UserDAO的find方法
登录成功:重定向list
登录失败:转发到login.jsp
2.路径问题
(1)什么是路径问题?
链接地址、表单提交、重定向、转发都需要填写一个路径(或者也可以称之为地址)。
<a href="addUser.jsp">
<form action="login">
response.sendRedirect("list")
request.getRequestDispatcher("listUser.jsp")
(2)相对路径
不以"/"开头的路径
(3)绝对路径
以"/"开头的路径
(4)如何写绝对路径?
链接、表单提交、重定向从应用名开始写,转发从应用名之后开始写。
注:
不要将应用名直接写在路径里面!
而应该使用以下方法获得实际部署时的应用名:
String request.getContextPath();