NO.67 JSP、Servlet相關

1. include指令

語法: <%@ include file=""%>

作用:通知容器,在將jsp文件轉換成servlet類時,將file屬性指定的文件的內容插入到該指令所在的位置。

注:被包含的文件并沒有對應的servlet類。

2.比較轉發與重定向

(1)能否共享request

轉發可以,而重定向不行。

? 注:request和response的生存時間很短暫(一次請求和響應期間存在)。

(2)目的地有無限制

轉發有限制(同一個應用),而重定向沒有限制。

(3)瀏覽器地址欄的地址有無變化

轉發沒有變化,而重定向有變化。

3.路徑問題

(鏈接,表單提交,重定向,轉發如何填寫路徑)

1)相對路徑

a.什么是相對路徑?

不以"/"開頭的路徑。

2)絕對路徑

a.什么是絕對路徑?

以"/"開頭的路徑

b.如何寫絕對路徑?

鏈接,表單提交,重定向從應用名開始寫,轉發從應用名之后開始寫。

注:不要將應用名直接寫在路徑里面,而應該使用getContextPath方法來獲得應用名。

String request.getContextPath();

4. Servlet的生命周期

(1)什么是servlet的生命周期

容器如何創建servlet對象,如何對其進行初始化處理,如果調用其方法來處理請求,以及如何銷毀該對象的整個過程。(即容器如何管理servlet)。

(2)四個階段

1)實例化

a.什么是實例化?

容器創建servlet對象。

b.什么時候實例化?

情況1:容器收到請求之后才會創建。

情況2: 容器啟動之后,立即創建(需要額外配置)。

? 注:容器默認情況下,只會創建一個實例。

2)初始化

a.什么是初始化?

實例化之后,容器會調用該實例的init方法。

? 注:該方法只會執行一次!

b.GenericServlet的init方法是如何實現的?(了解)

將容器傳遞過來的ServletConfig對象保存下來了,并且提供了getServletConfig方法。

c.如何實現自已的初始化處理邏輯?

override GenericServlet的init方法(不帶參的那個)。

d.初始化參數

step1.配置初始化參數

step2.調用ServletConfig提供的方法

String getInitParameter(String paramName)

3)調用(就緒)

a.什么是就緒?

容器收到請求之后,會調用servlet實例的service方法。

b.HttpServlet的service方法是如何實現的?

依據請求類型,分別調用對應的doXXX方法(比如,get請求就調用doGet方法)。

4)銷毀

a.什么是銷毀?

容器在刪除servlet實例之前,會調用該實例的destroy方法。該方法只會執行一次。

b.可以override GenericServlet提供的init方法來實現自已的銷毀處理邏輯。

(3)相關的幾個接口和類

1)Servlet接口

a.init(ServletConfig config)

b.service(ServletRequest req,ServletResponse res)

? 注:ServletRequest是一個接口,HttpServletRequest是其子接口。ServletResponse與之類似。

c.destroy()

2)GenericServlet抽象類

實現了Servlet接口的init和destroy方法。

3)HttpServlet抽象類

繼承了GenericServlet,實現了service方法。

練習:

提示:

step1.建表

create table t_user(

id number(8) primary key,

username varchar2(50) unique,

name varchar2(100),

password varchar2(20),

gender char(1)

);

create sequence t_user_seq;

step2.實體類 User

step3.UserDAO類

//完成插入操作

public void save(User user);

//查看用戶名是否存在,如果不存在,返回null,

//否則返回User對象。

public User findByUsername(String username);

step4.regist.jsp

step5.ActionServlet

a. 讀取注冊信息

b. 查看用戶名是否存在,如果存在,提示用戶(使用轉發)

request.setAttribute("regist_failed","用戶名已經存在");

c.如果用戶名不存在,則將注冊信息插入到數據庫,跳轉到登錄頁面(使用重定向)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容