《JSP/Servlet學習筆記》
《JSP&Servlet學習筆記》第2版
Chapter1 Web應用程序簡介
學習目標:
1.1 Web應用程序基礎知識
HTML,HTTP,URL和文字編碼。
HTML
HTML基礎知識:
http://www.w3schools.com/html/default.asp
HTTP兩個基本和極其重要的屬性:
1.基於請求和相應模型
2.無狀態通信協議(不會維護有關客戶端的狀態)
瀏覽器使用HTTP的幾種請求方法:
GET,POST,HEAD,PUT,DELETE
使用GET方式發送請求,瀏覽器的地址欄會出現請求參數信息。
GET請求可以發送的請求參數長度有限,太大量的數據使用POST方式。
POST方式
地址欄不會出現請求參數。
你的請求如果會改變服務器的狀態,則應該使用POST請求的方式。
java.net.URLEncoder
Web容器的作用:剖析和轉換通信協議,轉換成JSP/Servlet中可用的Java對象。
在容器的世界里,真正負責請求、相應的是Servlet。
Web容器為每個請求分配一個線程。啟動多個線程負責處理多個請求。
線程安全問題。
深入理解Web容器的行為。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
HttpJspBase -> HttpServlet
控制器知道哪個視圖操作對應哪個模型。
Chapter2 編寫與設置Servlet
2.1 第一個Servlet
javax.servlet.http.HttpServlet
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
String name = request.getParameter(“name”);
}
容器收到HTTP請求后,收集HTTP請求中的信息,並分別創建代表請求與響應的Java對象。
http://localhost:8081/FirstServlet/lisuxuan
2.2 在HelloServlet之后
Servlet接口,GenericServlet類,HttpServlet類定義有關HTTP的相關方法。
將HTTP相關服務流程定義在HttpServlet的service()方法中。
使用@WebServlet
Servlet3.0中:
@WebServlet{
Name=”hello”,
urlPatterns={“/hello.view”},
loadOnStartup = 1
}
當應用程序啟動后,事實上並沒有創建所有的Servlet實例。容器在首次請求需要某個Servlet服務時,才將對應的Servlet類實例化、進行初始化操作。
使用web.xml
Web.xml中的設置會覆蓋Servlet中的標注設置,可以使用標注作為默認值,而Web.xml來作日后更改設置值之用。
請求時的URL只是個邏輯名稱,比如/Hello.view,並不是服務器上真的有個實體文件。而是會由Web容器對應到實際處理請求的文件或者程序實體名稱。
文件組織與部署
關於WAR文件:容器如果發現webapps目錄中有WAR文件會將其解壓縮,並載入Web應用程序。
2.3 進階部署設置
Servlet3.0新增的部署設置功能。
HttpServletRequest.getRequestURI()
contextPath環境路徑:容器挑選Web應用程序的依據。
HttpServletRequest.getContextPath()取得環境路徑。
有關請求的相關信息,都可以使用這個對象來獲取。
Servlet路徑
getServletPath()
2.3.2Web目錄結構
Web應用程序存在一個特殊的/WEB-INF目錄,此目錄中存在的資源項目不會被列入應用程序根目錄中可直接訪問的項。
2.3.3使用web-fragment.xml
Servlet3.0中,JAR文件可用來作為Web應用程序的部分模塊。
web-fragment.xml必須放置在JAR文件中的META-INF目錄中。
Chapter3 請求與響應
3.1 從容器到HttpServlet
Web容器是Servlet/JSP唯一認識的HTTP服務器。
了解Web容器如何生成、管理請求和響應對象,為何設計出這樣的API架構。
3.1.1 Web容器做了什么
創建Servlet實例,完成Servlet名稱注冊及URL模式的對應。
在請求來到時,Web容器會轉發給正確的Servlet來處理請求。
Web容器提供的功能:有關請求/響應對象的生命周期管理(請求/響應對象的創建與銷毀)
3.1.2 doXXX()方法
可以閱讀Servlet標准API的源代碼。
3.2 關於HttpServletRequest
String username = request.getParameter(“name”);
Integer.parseInt();
String[] values = request.getParameterValues(“param”);
Enumeration<String> e = getParameterNames();包括所有請求參數名稱
While(e.hasMoreElements()){
String param = e.nextElement();
}
3.2.2請求參數編碼處理
1.POST請求參數編碼處理
HttpServlet.getCharacterEncoding()
ContextType:text/html;charset=UTF-8
POST和GET的參數編碼處理方式不同:
3.2.3 getReader()/getInputStream()讀取Body內容
HttpServlet上的getReader()方法,取得一個BufferedReader對象。通過該對象,可以讀取請求的Body數據。
java.io.BufferReader
HTTP“文件上傳”機制解析:
3.2.4 getPart(),getParts()取得上傳文件
3.2.5 使用RequestDispatcher調派請求
RequestDispatcher dispatcher = request.getRequestDispatcher(“some.do”);
或者通過ServletContext的getRequestDispatcher()或getNameDispatcher()
通過請求范圍屬性共享數據。
Forward方法 P82
3.3 關於HttpServletResponse
setContentType()
getWriter()
setHeader(),addHeader()
sendRedirect(),sendError();
getOutputStream()取得ServletOutputStream對象
設置響應標頭、緩沖區
3.3.3 使用getOutputStream()輸出二進制字符
getOutputStream()取得ServletOutputStream對象
3.3.4 使用sendRedirect(),sendError()
response.sendRedirect(“http://openhome.cc”)
3.4 綜合練習 P93
3.5 重點復習 P100
Chapter4 會話管理 P105
4.2 HttpSession會話管理
Chapter5 Servlet進階API、過濾器與監聽器 P133
學習目標:
了解Servlet生命周期
使用ServletConfig與ServletContext
各種監聽器的使用
實現Filter接口開發過濾器
5.1 Servlet進階API
對於每個Servlet的設置信息,Web容器會為其生成一個ServletConfig作為代表對象。從該對象可以取得Servlet初始參數,以及代表整個Web應用程序的ServletContext對象。
5.1.1 Servlet、ServletConfig與GenericServlet
5.1.2 使用ServletConfig
ServletConfig:個別Servlet的設置信息代表對象。
getInitParameter() - getInitParameterNames()方法,可以取得設置Servlet時的初始參數。
設置個別Servlet的初始參數P136
5.1.3 使用ServletContext
5.2 應用程序事件、監聽器 P142
Chapter6 使用JSP
Chapter7 使用JSTL
Chapter8 自定義標簽
Chapter9 整合數據庫
Chapter10 Web容器安全管理
Chapter11 JavaMail入門
Chapter12 從模式到框架