Servlet

網絡程序兩層CS:客戶端+DB

網絡程序三層CS:客戶端+應用服務器+DB(其中,數據庫負責數據的管理,應用服務器處理業務邏輯,客戶端提供操作界面)

網絡程序BS架構:Browser+Web Server +DB   優點在於:不需要安裝客戶端,用http協議進行通信。

Servelt:擴展Web服務器功能(早期Web服務器只能處理靜態資源的請求,無法動態計算生成Html界面)的組件規範(實現部分功能,部署到容器中才能運行的軟件模塊)。

錯誤提示:404 , 405(Web服務器找不到service()方法處理請求) 500(程序運行過程中出錯)

HTTP協議:HyperText Transfer Protocol定義瀏覽器與Web服務器之間如何通信和通信的數據格式。

請求:請求頭(請求方式+請求路徑+協議版本),消息頭,請求內容(post請求時纔有)

響應:狀態行(協議類型+版本+狀態碼+狀態描述)。消息頭,實體內容。

當Web容器收到一個Http請求時,通信數據由Web容器進行封裝和處理,這些信息被分爲HttpServletRequest和HttpServletResponse

HttpServletRequest:讀取和寫入Http請求數據,取得和設置Cookies,標識http會話,實現請求轉發

常用方法:

getHeaderNames()

getHeader(String name)

getMethod()

getRequestURI

HttpServletResponse:

設置響應碼,設置Session,實現重定向,設置瀏覽器的解碼方式,設置對客戶端的輸出結果。

常用方法:

setContentType(String type)           例如:response.setContentType("text/html;charset=utf8")

setCharacterEncoding(String charset)    例如:response.setCharacterEncoding("utf-8")

public class TestServlet extends HttpServlet{
    public void service(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException{
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("能夠輸出中文信息的Servlet");
        out.close();
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>testServlet</servlet-name>
        <!-- 類名要寫完整,包含包名,注意大小寫 -->
        <servlet-class>web.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>testServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>    
</web-app>

獲取請求參數值得方法:

request.getParameter(name)

request.getParameterValues(name)

表單提交產生亂碼:當表單提交時,瀏覽器會對中文參數值進行編碼(表單所在頁面的字符集進行編碼).Web服務器默認情況下使用iso-8859-1去解碼。

解決方法:表單所在頁面進行編碼:<meta http-equiv="content-type" content="text/javascript;charset=utf-8">--------------request.setCharcterEncoding("utf-8")

解決GET方式時的亂碼問題:

設置頁面編碼,String name = request.getParameter("name"),name = new String(name.getBytes("iso-8859-1"),"utf-8")

返回頁面出現亂碼:設置response.setContentType("text/.html;charset=utf-8")

Servlet運行步驟:建立連接,請求數據打包,容器解析請求數據報封裝成對象,根據web.xml中的配置找到Servlet的service方法,響應打包給瀏覽器,瀏覽器生成頁面。

重定向:服務器向瀏覽器發送一個302狀態碼和Location消息頭的響應,瀏覽器收到後向Location地址發送請求。

重定向:response.sendRedirect(String url)

特點:地址欄變化,不會共享request和response對象,地址任意。

<url-pattern>/*</url-pattern>

<url-pattern>*.do</url-pattern>

Servlet生命週期:實例化(創建Servlet對象),初始化(調用init方法),就緒(service()),銷燬(destroy())

<init-param>
       <param-name>student</param-name>
        <param-value>kk</param-value>
</init-param>

獲取:ServletConfig.getInitParamter("student")

Servelt接口

方法:init(),destroy(),service()

GenericServlet抽象類

方法:實現了init(),destroy()方法,service()沒有實現

HttpServlet抽象類

方法:實現了init(),destroy(),service()

ServletContext:

獲取方式:

1、GenericServlet的getServletContext()

2、ServletConfig的getServletContext()

3、HttpSession的getServletContext()

4、FilterConfig的getServletContext()

ServletContext上下文的作用和特點:

setAttribute(),removeAttribute,getAttribute()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章