Servlet第五天

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();

猜你喜欢

转载自blog.csdn.net/anqing_liu/article/details/80636111