servlet.txt筆記


javase jdbc ==》java訪問數據庫
html ==》瀏覽器顯示內容,沒法把數據提交給後臺?==》動態網頁技術(servlet)解決前臺、後臺交互問題
動態網頁技術:servlet jsp php asp
靜態網頁技術 --html,xml,css,jsphp

servlet:接受客戶端請求,處理完數據,響應客戶端數據 基於請求和響應的服務程序(動態網頁技術) 靜態網頁技術 --html,xmlcss

servlet:它只是一個接口,接口只定義規範(請求、響應) ,如何實現接受請求 和 響應客戶端 ,並無提出具體技術。
GenericServlet:定義通常的、與協議無關的 servlet 是抽象類 主要給子類繼承
HttpServlet:基於http 協議 實現servlet接口 也是抽象類
基於ftp協議實現servlet接口 (ftpServlet)html

--要想實現 客服端 請求 ,服務端響應 這樣的功能,後來使用http協議,實現上面的要求
目前只有HttpServlet 實現servlet接口,因此 咱們寫的任何Servlet 都是要繼承HttpServlet 。java


Servlet:
init 初始化方法
getServletConfig:得到servlet配置信息
service:服務(接受請求 並響應)
getServletInfo:得到servlet 相關信息
destroy:摧毀 ,主要是釋放內存空間web


httpServlet:
service:調用 doget dopost dodelete dooptions。。。。spring

***咱們寫的Servlet 只要繼承HttpServlet 實現 doget dopost數據庫

如何訪問servlet:apache

web.xml: 在web.xml中註冊servlet 並提供客戶端訪問路徑
<servlet>
<servlet-name>TwoServlet</servlet-name>
<servlet-class>cn.gem.servlet.TwoServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>TwoServlet</servlet-name>
<url-pattern>/TwoServlet</url-pattern>
</servlet-mapping>瀏覽器

TwoServlet twoServlet=Class.forName("cn.gem.servlet.TwoServlet").newInstance();
客戶端 訪問/TwoServlet路徑 找到一個名字叫 twoServlet,這個對象就是 Class.forName("cn.gem.servlet.TwoServlet").newInstance(),
而後 調用這個 對象的 doget 或者 dopost 方法。(至於調用doget 仍是 dopost 依賴於 訪問的方式)tomcat


訪問路徑:

http://localhost:8080/ 是訪問到E:\509\apache-tomcat-6.0.44\webapps這個目錄 默認訪問root 下面的index.html

精確匹配:/ServletTwo

模糊匹配:*
* 表示通配符 可以表明一個字符或者多個字符
/* 表示後面隨便 均可以

*.do 前面隨便 後面必定.do

/*.do 不符合邏輯

精確匹配>模糊匹配(/* > *.do )

*****建議採用精確匹配


生命週期:
第一次請求該servelt 建立servlet 對象,而且調用init方法,且只調用一次

後面每次訪問 調用get 或post方法,直到服務器關閉,該servet 摧毀,而且調用destory方法。

第一次訪問 -- -- 關閉服務器

servlet 建立 :必定要有無參的構造函數 由tomcat服務器建立一次 單例模式

 


傳值:web.xml傳遞參數

ServletConfig:serlvet配置信心都在 ServletConfig 中

<servlet>
<servlet-name>EightServlet</servlet-name>
<servlet-class>cn.gem.servlet.EightServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>關羽</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>20</param-value>
</init-param>
</servlet>

context:通常指上下文環境

ServletContext:指的是整個web項目的上下文環境 ,表示的就是整個web.xml
getInitParameterNames getInitParameter

 

ServletConfig,ServletContext 能夠直接從this(Servlet)中得到這兩個對象


init(),init(ServletConfig config):在GenericServlet中,init(ServletConfig config) 裏面調用init(),因此覆蓋的是init(),而不是init(ServletConfig config)

 


提交數據: 客戶端提交請求數據 給服務端 (Servlet)

request:請求 凡是客戶端提交請求數據 所有在request對象中
getParameter 得到請求參數的值
http://localhost:8080/Servlet/FormServlet?sname=fasdfas&passwd=fasdfasdfasdf -- 質詢參數


get: url提交方式(頭提交方式 head) 速度快 <4k 地址變化(不安全)

http://localhost:8080/Servlet/FormServlet?sname=sdfas&passwd=sdfs123123123123dfd 其實就是form表單get提交方式
使用<a>也可以訪問servlet 這個和 在瀏覽器 地址訪問 一個效果 至關於 form表單get提交方式

 

post:體提交方式(body) 速度慢點 沒有上限(具體看瀏覽器支持) 地址不變(安全些)


響應:

response:凡是服務端給 客戶端 的數據 都在這裏
服務端 對 客戶端響應 須要 創建 通道 Writer w=response.getWriter();

 

亂碼:

請求亂碼:
get:

1.修改tomcat中server.xml
URIEncoding="UTF-8" 服務器採用utf-8的字符集編碼 來進行 解碼和編碼
默認的編碼格式 是 ISO-8859-1

2.new String(sname.getBytes("ISO-8859-1"),"UTF-8")
瀏覽器以utf-8編碼發送數據 ,服務器默認以ISO-8859-1解碼,發送數據給servlet,servlet中須要再以ISO-8859-1格式 得到字節,而後 按照utf-8的字符集 解碼

post: request.setCharacterEncoding("UTF-8");
設置請求數據以utf-8方式 編碼 解碼,這種方式只對 體提交方式有效


響應亂碼:

response.setCharacterEncoding("UTF-8"); 只是說明服務器 對客戶端 響應數據 是以UTF-8 方式,響應,可是 瀏覽器以何種方式 閱讀數據 不受控制!!

response.setContentType("text/html;charset=UTF-8"); 以UTF-8 方式 響應數據,並提醒瀏覽器 以這種方式 閱讀

response.setContentType("text/html;charset=UTF-8") 能夠徹底替代 response.setCharacterEncoding("UTF-8")

 

跳轉: 跳轉資源

1.服務端:request.getRequestDispatcher("/one.html").forward(request, response); 經過請求分發器 跳轉到指定頁面
url地址不變(依然是以前請求服務器的地址) 只訪問一次 服務器(頁面跳轉只是服務器內部在跳,對客戶端透明)


2.客戶端:response.sendRedirect() 重定向
url地址變化 ,跳轉頁面的地址 訪問2次服務器 (把地址發送到客戶端瀏覽器上,並迫使客戶端瀏覽器再次訪問服務器)


//response.sendRedirect("/Servlet/one.html"); 地址要帶上項目名稱
//request.getRequestDispatcher("/one.html").forward(request, response); 地址不須要項目名稱

上述的跳轉 ,底層依然是Writer w=response.getWriter(); w.write("<!DOCTYPE html><html><head>" 只不過這樣的代碼 交給tomcat編寫了

若是要想傳遞動態數據 ,那麼跳轉html 不能夠(html只是靜態語言,沒法java語言)-- jsp

 


servlet與servlet:
數據共享:3種範圍
1.request:一次請求的範圍 ,過了此次請求全部數據失效
2.session:(session 範圍)回話範圍 :當前瀏覽器範圍,只要不關閉瀏覽器 數據一直存在
3.servletContext:整個應用範圍 (服務器範圍) 只要服務器不關閉,數據一致存在

原則:能在request 就不要 放session 能在session 就不要在 servletContext

 

過濾器(Filter):對請求進行預先的處理、篩選

FilterConfig:過濾器的配置信息都在 這裏 ,和 servletCOnfig

生命週期:服務器啓動時 建立(單例)而且調用 init方法,服務器關閉的時候 銷燬對象 服務器開始 到 結束
FilterChain:過濾鏈(多個過濾器)
chain.doFilter(request, response); 把請求釋放到下一個過濾器 ,若是沒有過濾器 訪問目標資源

 


TenServlet.TenServlet()
MyFilter2.doFilter()
MyFilter.doFilter()
TenServlet.doGet()

 

TenServlet.TenServlet()
MyFilter.doFilter()
MyFilter2.doFilter()
TenServlet.doGet()


filter:前後順序 決定過濾器建立的順序 誰在下面誰先建立
filter-mapping:****前後順序 決定過濾過濾請求的順序 誰放在上面 誰先執行

使用:
1.統一字符集編碼

2.登錄驗證 : 當有一個請求過來,若是已經登錄 ,直接訪問首頁,若是沒有登錄,不能訪問你首頁,先登陸
用戶名 密碼 ok 到首頁 ,若是不ok 繼續登陸, 已經登錄 到首頁

 


監聽器 8種:

ServletRequestListener 監聽請求的建立 和 銷燬
HttpSessionListener 監聽回話的建立 和 銷燬
ServletContextListener:監聽整個web應用的建立 和 銷燬


ServletRequestAttributeListener
HttpSessionAttributeListener
ServletContextAttributeListener


HttpSessionActivationListener:會話激活 鈍化監聽器
HttpSessionBindingListener:會話值綁定監聽器


用途:統計在線人數 ,訪問量

 

 

做業:servlet +jdbc 完成員工管理系統

MVC:
m:model dao vo(pojo) service
v:view html jsp。。
c:control 接受前臺請求 並作出響應 servlet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---------------------------------javaweb------------------------------------------------

開發工具:
eclipse:版本很是多,不少不是很兼容
若是項目要求很高,使用特別技術,可能只能使用eclipse。


myeclipse:早期只是eclipse的一個插件,之前myeclipse必須安裝在eclipse的解壓目錄下,如今由於
myeclipse使用很是普遍,如今基本上直接安裝就能夠,8.5 10。 收費的
javaweb開發項目要求及技術不是很是特殊,一般myeclipse就能夠知足要求!
myeclipse開發web項目 比較簡答。

收費的:
jbuilder:
netbean:
***功能比eclipse強大的多,可是由於收費,因此公司使用較少!

 

javaweb項目:
eclipse:dynamic web project
myeclipse: java web
netbean
jbuild

webContent(webRoot)
WEB-INF lib web.xml ---web項目必備要素(目錄結構、名稱都不能變)


服務器:
運行--服務器 tomcat jboss weblogic 。。。

tomcat (免費): 簡單web應用服務器

重量級服務器(收費):都是實現了javaee規範(EJB規範,EJB服務器) ***性 spring(不支持分佈式處理) 服務器架構 EJB:算是java體系中比較高深技術。
jboss:
weblogic :

****開發使用tomcat ,發佈項目時 可能會使用jboss weblogic等服務器
若是你的項目對安全性,併發性要求不高 可能依然會使用tomcat(快一點,免費)

tomcat:
tomcat 6 , tomcat 7
解壓版 :早期都是解壓
安裝版:安裝後的目錄結構 和 解壓後的目錄結構同樣的

bin:存放tomcat 的相關命令
conf:存放一些配置文件
lib:tomcat 的使用到的jar包
logs:日誌
temp:tomcat 運行時生成的臨時文件目錄
webapps:存放web 項目 (發佈項目地址)
work:真正tomcat運營時 使用的工做目錄


tomcat 啓動:會自動讀取conf 文件下面的配置文件 和 webapps下面的項目,以及各個項目下面web.xml

 

 


--------------------------------------------------------------------------------------------------------------


tcp/ip: 安全協議 幾乎全部協議 都是基於tcp/ip協議基礎之上
tcp:三次握手 保證數據可以到達 一旦創建鏈接 ,不主動斷開, 鏈接一直存在 長鏈接協議 數據庫鏈接就是tcp協議

 

****基於互聯網訪問量 特別巨大,因此但願可以 實現 客戶端訪問服務端後,數據交互後 鏈接自動斷開?

http:超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW文件都必須遵照這個標準。
https:依然是http協議 只是多了數字安全認證 比較安全協議
http協議 是個短鏈接協議 數據交互完 當即斷開 基於tcp、ip協議 http封裝了tcp、ip協議 是一個應用層協議

****http協議 封裝了tcp/ip協議,可是可以自動斷開 短鏈接協議


HTTP協議的主要特色可歸納以下:
1.支持客戶/服務器模式。 c/s(client,server) => b/s(瀏覽器(browser ),服務器 server) b/s是c/s的升級

2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。
***訪問路徑 ,提交方式(get post)

因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。

3.靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。


4.無鏈接(短鏈接):無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。---短鏈接協議

5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,
則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。
***服務器不記得你是曾經來過的那個請求!!


URI:路徑

URL (Uniform Resource Locator,統一全球資源定位符): 通俗說法 就是互聯網網址
http://host[":"port][abs_path]
http表示要經過HTTP協議來定位網絡資源;host表示合法的Internet主機域名或者IP地址;port指定一個端口號,爲空則使用缺省端口80;
abs_path指定請求資源的URI;若是URL中沒有給出abs_path,那麼當它做爲請求URI時,必須以「/」的形式給出,一般這個工做瀏覽器自動幫咱們完成。

http:192.168.0.116:8080/index.jsp
https://www.baidu.com
***http協議稱之爲 基於請求、響應的協議
請求:http請求由三部分組成,分別是:請求行、消息報頭、請求正文

請求方法(全部方法全爲大寫)有多種,各個方法的解釋以下:
GET 請求獲取Request-URI所標識的資源
POST 在Request-URI所標識的資源後附加新的數據
HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭
PUT 請求服務器存儲一個資源,並用Request-URI做爲其標識
DELETE 請求服務器刪除Request-URI所標識的資源
TRACE 請求服務器回送收到的請求信息,主要用於測試或診斷
CONNECT 保留未來使用
OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求
******在html4以前瀏覽器 只支持 get post 提交方式

 


響應:在接收和解釋請求消息後,服務器返回一個HTTP響應消息。
HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文

狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做

4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現 404
5xx:服務器端錯誤--服務器未能實現合法的請求

常見狀態代碼、狀態描述、說明:200 OK //客戶端請求成功400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解401 Unauthorized //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用 403 Forbidden //服務器收到請求,可是拒絕提供服務404 Not Found //請求資源不存在,eg:輸入了錯誤的URL500 Internal Server Error //服務器發生不可預期的錯誤503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常eg:HTTP/1.1 200 OK (CRLF)

相關文章
相關標籤/搜索