Servlet(1)之Servlet技術應用

單詞

●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項目:

  1. 創建一個動態的Web項目
    在這裏插入圖片描述
    勾選web.xml配置文件選項
    在這裏插入圖片描述
  2. 在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);
	}

}
  1. 將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

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。
  • 頁面跳轉的方法:
  1. servlet的請求轉發方法:
    request對象的getRequestDispatcher("* .html") . forward(request,response);方法
    不但可以將請求轉發到指定的頁面,也可以轉發到指定的servlet中。
    可以攜帶參數

在這裏插入圖片描述
2. servlet的重定向方法:
response對象的sendRedirect("*.html");方法。
在這裏插入圖片描述
servlet請求轉發和重定向

用途:
1.需要指定參數的時候,使用請求轉發。

2.不需要指定參數,或者直接跳轉到頁面的時候,使用重定向。
用戶名或密碼錯誤,直接跳轉到登錄頁面,進行重新登錄。

Servlet生命週期

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對象(應用上下文)

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對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章