《JSP/Servlet學習筆記》html
《JSP&Servlet學習筆記》第2版java
Chapter1 Web應用程序簡介web
學習目標:數據庫
1.1 Web應用程序基礎知識瀏覽器
HTML,HTTP,URL和文字編碼。安全
HTML服務器
HTML基礎知識:架構
http://www.w3schools.com/html/default.aspapp
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 從模式到框架