單詞
●Request —請求
●Response —響應、迴應
●Config —配置
●Context —上下文,環境
●Attribute —屬性
●Encoding —字符編碼
●Parameter —參數
●Dispatcher —分派員、調度員
Servlet簡介
什麼是Servlet
什麼是Servlet
Servlet是在服務器.上運行的小程序。一個Servlet就是一個Java類,並且可以通過“請求-響應”編程模型來訪問的這個駐留在服務器內存裏的Servlet程序。
●Servlet是Java語言提供的用於開發動態網站的編程技術,厲於JavaEE的組成部分
●Servlet是用於開發服務器端程序的Java技術,該技術可以用於處理用戶請求,爲用戶返回動態網站內容,Servlet程序由Web服務器負責加載執行,是獨立於平臺與協議的Java動態網站開發技術。
●Servlet是JavaEE規範的一部分
狹義上講Servlet僅僅用於指代javax. servlet. Servlet接口或者它的子類型,如javax. servlet. http. HttpServlet等。
廣義上講Servlet不僅僅包含Servlet接口和它的子類型,也包含了Servlet規範中所有的接口API,如ServletRequest、 ServletResponse接口等。
●Servlet接口
Servlet接口定義在javax. servlet包下,該接口定義三個核心抽象方法:
void init(ServletConfig config) ---Servlet對象創建時調用該方法進行初始化。
void service (ServletRequest req ,ServletResponse resp) ---用於處理用戶請求。
void destroy() ---Servlet對象被銷燬時調用該方法執行銷燬前操作。
HttpServlet
HttpServlet
●該抽象類定義在javax. servlet. http包下
●Servlet API提供該抽象類的目的是: 便於開發人員能夠快速開發適用於HTTP協議、處理HTTP請求的自定義Servlet。
●一般情況下,如果開發時自定義Servlet被用來處理HTTP請求, 那麼建議讓自定義Servlet繼承HttpServlet類。
●HttpServlet類實現了Servlet接口
-java. lang.Object
–javax. serMet GenericSerlet
—javax. serMlet.http. HttpSerMet
HttpServlet爲提供七個核心方法用於處理不同方式的HTTP請求
常用的有4個,POST(增加)、DELETE(刪除)、PUT(修改)、GET(查詢)。
總結
Servlet接口:
- init() :初始化servlet對象
- destroy():用於銷燬servlet對象
- web服務器負責創建和銷燬servlet對象用的。
- service(ServletReqeust req, ServletResponse res):處理用戶請求和響應服務器的。
HttpServlet類:
- 抽象類:實現了Servlet接口
- 主要用於處理用戶發送的請求,響應服務器端對客戶端的數據發送。
- 提供七個核心方法用於處理不同方式的HTTP請求:
Get()
Post()
delete()
put()
header()
trace()
options()
第一個Servlet程序
Servlet頁面中文亂碼問題
第一個Servlet程序
創建Servlet程序有兩個方法:
一、
採用註解的方法:
- 一般情況下處理HTTP請求的自定義Servlet都繼承HttpServlet類,重寫對應的doXxx()方法即可,一般只重寫doGet和doPost方法
目錄:
創建動態的Web項目:
- 創建一個動態的Web項目
勾選web.xml配置文件選項
- 在src中創建servlet
這裏添加了Get和Post
/**
* 自定義Servlet類
*/
@WebServlet("/hello.do") // 這是自定義servlet的註解:指定該自定義servlet的URL路徑
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* 構造器
*/
public HelloServlet() {
super();
}
/**
* doGet方法,用於接收用戶發送的get請求:<from method="get"> 默認是get請求
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* doPost方法,用戶接受用戶發送的post請求:<from method="post">
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
- 將servlet添加到Tomcat服務器中運行或直接在eclipse中右鍵類運行
運行成功
這裏打印的就是doGet方法的字段也可以自己添加自己想要輸入的字段
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath()).append("java");
}
如果要添加中文需添加:setCharacterEncoding(“UTF-8”);
二、
採用web.xml配置文件的方法:
servlet需要在web.xml中配置servlet,注意的是配置servlet和@WebServlet()註解是衝突的,兩者不能共存。
步驟在以上的基礎上添加
在web.xml中添加如下配置:
<servlet>
<!-- 類名 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 類所在的路徑 -->
<servlet-class>com.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 類名 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 訪問的網址 -->
<url-pattern>/word.do</url-pattern>
</servlet-mapping>
運行流程是,輸入url後服務器尋找匹配的mapping的name,然後尋找匹配的servlet的name,然後再尋找類路徑執行class。
請求對象和響應對象
請求對象HttpServletRequest
HttpServletRequest的API
HttpServletRequest
主要用於處理用戶的請求信息。
實例化: web服務 器替我們完成的HttpServletRequest對象的實例化操作。
它是作爲doGet獲取doPost方法的參數從客戶傳到服務器端。
- HttpServletRequest的常用方法
常用方法:
setCharacterEncoding(“UTF-8”);設置字符編碼,一般放在最上方
getParameter(“username”); 獲取參數的值
getContextPath() :獲取項目名稱
getRequestURL():獲取客戶請求的完整的URL路徑
getRemoteAddr():獲取客戶端請求的IP地址
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
// 測試HttpServletRequest常用的方法
String context = request.getContextPath();// 獲取項目名稱
String ip = request.getRemoteAddr();// 獲取訪問客戶端的ip地址
String host = request.getRemoteHost();// 獲取客戶端的主機名稱
String url = request.getRequestURL().toString();// 獲取完整的URL名稱
String name = request.getParameter("name");// 獲取用戶輸入的參數的值
// 通過response對象把獲取到的數據打印到瀏覽器頁面上
PrintWriter out = response.getWriter();
out.println(context);
out.println(ip);
out.println(host);
out.println(url);
out.println(name);
}
響應對象HttpServletResponse
主要用於處理服務器的響應信息。
web服務器完成了對象的實例化操作。
主要方法:
setCharacterEncoding(“UTF-8”);設 置字符編碼集,放在方法的最上面。
getWriter() :返回一個PrintWriter對象。
PrintWriter out = response.getWriter();
PrintWriter對象的方法:
print():把信 息打印到頁面上,不帶換行。
println() :把信息打印輸出到頁面上。
append() : 把信息打印輸出到頁面上。
get和post提交方式的區別
1.get是顯式提交,參數和參數值在瀏覽器的地址欄中能夠看見,它的最大長度是256個字符。
2. post是隱式提交,參數和參數值是看不到的,提交的參數個數和長度沒有限制。
request和response對象的頁面跳轉
- request和response對象的頁面跳轉:
除了在servlet裏面打印頁面顯示信息之外,也可以直接跳轉到html頁面上,也可轉發到指定的servlet。 - 頁面跳轉的方法:
- servlet的請求轉發方法:
request對象的getRequestDispatcher("* .html") . forward(request,response);方法
不但可以將請求轉發到指定的頁面,也可以轉發到指定的servlet中。
可以攜帶參數
2. servlet的重定向方法:
response對象的sendRedirect("*.html");方法。
servlet請求轉發和重定向
用途:
1.需要指定參數的時候,使用請求轉發。
2.不需要指定參數,或者直接跳轉到頁面的時候,使用重定向。
用戶名或密碼錯誤,直接跳轉到登錄頁面,進行重新登錄。
Servlet生命週期
●Servlet的生命週期由Servlet容器(JavaWeb服務器)控制
打開瀏覽器輸入http請求—Web容器(tomcat)收到並解析找到對應的Servlet—Servlet實例化—調用對應的方法doGet或doPost進行對請求的處理(比如判斷用戶名或密碼是否正確)—將處理的結果Web容器(tomcat)響應到客戶端
-
Servlet生命週期的各個階段
Servlet生命週期的各個階段,不同階段Servlet容器會調用Servlet對象的不同方法.
實例化—Servlet容器創建Servlet的實例
初始化—該容器調用init()方法
服務—如果請求Servlet,則容器調用service()方法(doGet和doPost也是service()方法的二次封裝)
銷燬—銷燬實例(關閉服務器)之前調用destroy()方法
ServletContext對象(應用上下文)
-
運行在JavaWeb服務器上的每一個web應用程序都有一個與之對應的Servlet上下文(Servlet運行環境),這個Servlet上下文通過
javax.servlet.ServletContext來表示 -
JavaWeb服務器提供商提供了對ServletContext接口的實現
-
JavaWeb服務器啓動時,它會分別爲每一個發佈在當前服務器上web應用程序創建一個對應的ServletContext對象
-
ServletContext對象中包含它所關聯的web應用程序的根路徑
-
因爲每一個JavaWeb應用程序在運行時都會有一個唯一與之關聯的ServletContext對象,那麼在開發時,某個JavaWeb應用程序中所有Servlet和JSP共享的信息可以放置在這個web應用程序對應的ServletContext對象中,如當前Web應用程序在線訪問人數。
-
獲取當前web應用程序所關聯ServletContext對象的方式:
通過Servlet對象(this)的getServletContext()方法:
通過請求對象(this)的getServletContext()方法
通過ServletContext對象的getContext (Stringuri)方法獲取其他web應用程序所關聯的ServletContext對象
ServletContext中常用方法的使用
RUI和RUL是區別
方法名 | 方法描述 |
---|---|
void setAttribute(String name,Obiectobi) | 設置共享屬性 |
Object getAttribute(String name) | 讀取共享屬性 |
void remove Attribute(String name) | 移除共享屬性 |
ServletContext getContext(String uri) | 獲取指定uri的上下文對象 |
String getContextPath() | 返回web程序的上下文路徑 |
String getlnitParameter(String param) | 獲取上下文初始化參數 |
String getRealPath(String path) | 返回資源在服務器上的真實路徑 |
ReauestDispatcher getRequestDispatcher(Stringpath) | 返回一個包裝了路徑信息的Dispatcher對象 |