網絡程序兩層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()