Servlet——转发、相对路径与绝对路径

1.转发

(1)什么是转发?

一个web组件将未完成的处理交给另外一个web组件继续做。

注:
    web组件: jsp或者servlet的统称。
    通常是一个servlet获得数据,然后转发给一个jsp
    来展现。

(2)如何转发?

step1.绑订数据到request对象上。

request.setAttribute(String name,Object obj);
注:
    a. name通常称之为绑订名,obj称之为绑订值。
    b. 该方法内部的实现:就是以name作为key,以
        obj作为value,调用Map.put方法。
    c.  Object request.getAttribute(String     name);

step2.获得转发器。

RequestDispatcher rd = 
        request.getRequestDispatcher(Sting uri);
注:
    a.uri:转发的目的地,通常是一个jsp。
    b.RequestDispatcher是一个接口,该方法会返回    一个符合该接口的对象,这个对象一般我们称    之为转发器。    
    c.转发的本质是一个web组件通知容器去调用另外一个web组件,可以将转发器理解为web组件通知容器的媒介。

step3.转发

rd.forward(request,response);

(3)特点

a.转发之后,浏览器地址栏的地址不变。

b.转发的目的地有限制,要求属于同一个web应用。

2.比较转发与重定向

(1)地址栏地址有无变化

转发之后,浏览器地址栏地址不变;重定向之后,浏览器
地址栏地址会发生改变。

(2)目的地有无限制

转发有限制,重定向没有任何限制。

(3)能否共享request对象和response对象。

转发可以,重定向不行。

注:
    容器收到请求之后,会立即创建request对象和
    response对象。当响应发送完毕,容器会立即销毁
    这两个对象。也就是说,request对象和response
    对象的生存时间是一次请求与响应期间存在。
    重定向是两次请求。

(4)一件事是否完成

转发是一件事未做完,让另外一个web组件继续做;
而重定向是一件事已经完成,再做另外一件独立的事件。

2.路径问题

链接、表单提交、重定向和转发如何填写相应的路径

<a href=""></a>
<form action="">
response.sendRedirect("")
request.getRequestDispatcher("")

(1)什么是相对路径?

不以”/“开头的路径

(2)什么是绝对路径?

以”/“开头的路径

(3)如何写绝对路径?

链接、表单提交、重定向从应用名开始写;转发
从应用名之后开始写。

注:
    不要将应用名直接写在路径里面!
    应该使用以下方法来获得实际部署时的应用名:
        String request.getContextPath();

    在实际开发时,建议尽量使用绝对路径。

# 练习

添加用户时,如果用户名已经存在,则在添加用户的页面上
提示“用户名已经存在”。否则,将用户信息插入到数据库,然后重定向到用户列表。

提示:

step1.在UserDAO类中添加一个方法

public User findByUsername(String uname);

step2.修改AddUserServlet

调用UserDAO的findByUsername方法,如果返回
值不为null,则绑订错误提示信息到request,然后
转发到addUser.jsp;否则调用UserDAO的save方法,
将用户信息插入到数据库。

step3.修改addUser.jsp (显示提示信息)

QAQ感谢你的支持=w=