4、Servlet模型(一)
Servlet的編寫、訪問過程
Servlet簡介
- Servlet是Java Servlet的簡稱,是小服務程序或服務連接器,是用Java編寫的服務器端程序,主要功能在于獲取請求,返回響應
- 廣義:一個Servlet是一個Java語言編寫的類,提供請求響應式的編程模型
- 狹義:Servlet是指Java語言實現的一個接口
編寫部署Servlet程序
編寫源文件
- 編寫類實現(implements)
javax.servlet.Servlet 接口,在類中實現
javax.servlet.Servlet 接口中的方法
編寫類文件
- 通過Javac命令編譯寫好的源文件
- 注意:-cp參數的使用
部署程序
- 將編譯生成字節碼(.class)文件復制到“號站點號/WEB-INF/classes/"目錄,需要注意目錄結構
- 配置web.xml中的<servlet>、<servlet-mapping>節點
編寫部署Servlet 程序步驟
1、編寫Servlet程序(實現Servlet接口)
2、編譯Servlet源文件,生成字節碼文件
注意:
- DOS窗口中進入Servlet文件所在目錄
- -cp參數導入需要的jar包
javac -cp .;lib\*Hello.java
3、部署
在Tomcat的webapps目錄下創建項目目錄
在項目目錄下創建WEB-INF目錄
在WEB-INF目錄下放置web.xml配置文件、classes目錄和lib目錄
- classes目錄中是步驟2中生成的字節碼文件
- lib目錄中是用到的jar包
4、運行
- 啟動Tomcat
- 訪問Servlet
Servlet處理請求,返回響應
http://localhost:8080/MyWebsite/hello
WEB-INF目錄下web.xml
<servlet>
????? <servlet-name>helloWorld</servlet-name>
????? <servlet-class>xx.xx.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
????? <servlet-name>helloWorld</servlet-name>
????? <url-pattern>/hello</url-pattern>
</servlet-mapping>
Servlet中的請求與響應
接收請求
Tomcat啟動后Web容器首先做的工作
- 接收到請求后服務器轉交請求給Web容器
- Web容器產生請求對象和響應對象
- 調用Servlet的service()方法,并將請求和響應對象作為參數傳入該方法
- service方法根據請求方式調用doXXX()方法
返回響應
- 在doXXX()方法中使用請求對象獲取請求信息,響應對象返回響應結果(PrintWriter對象)
- 銷毀請求、響應對象
接收請求
- HttpServletRequest接口以參數的形式傳遞到service方法里
- HttpServlet的service方法
- 受保護的service()方法根據請求類型調用doXXX()方法
- 所以一般要重寫doXXX()方法
解析請求
getParameter()方法
- href="RegistServlet?userName=zs”
- 表單中的name屬性值的獲取
- request.getHeaderNames();
- request.getHeader(“host”);//服務器主機
- request.getRemoteHost();//客戶端IP
- request.setCharacterEncoding("UTF-8");
Enumeration e = request.getHeaderNames();
while(e.hasMoreElements()) {
??? System.out.println(e.nextElement());
}
Attribute參數
- setAttribute() :設置參數
- getAttribute() :獲取某個參數的值
HttpServletResponse接口
protected void doGet(HttpServletRequest request, HttpServletResponse response)
- getWriter()方法,返回的是一個輸出流
- response.setContentType("text/html");
編碼
- response.setCharacterEncoding("UTF-8");
- response.setContentType ("text/html;charset=UTF-8");
示例:
Servlet中請求數據的傳遞、請求轉發與請求重定向
Servlet應用執行過程--請求轉發
Servlet應用執行過程--重定向
請求重定向、請求轉發
請求轉發
- request.getRequestDispatcher(" targetURL").forward(request, response);
請求重定向
- response.sendRedirect("targetURL")
請求數據的傳遞
請求數據的傳遞
- request.setAttribute(String,Object)
- request.getAttribute(String),返回Object
注意:
請求轉發可以共享參數
- request.getParameter()
- request.getAttribute()
請求重定向無法共享參數
請求重定向、請求轉發區別
本質
- 請求轉發:一次請求
- 請求重定向:兩次請求
速度
- 請求轉發 > 請求重定向
Attribute參數
- 請求轉發可共享參數
- 請求重定向不可共享參數
地址欄??
- 請求轉發:不變
- 請求重定向:變