jsp/servlet學習筆記(核心編程)servlet部分

來源:互聯網
上載者:User

標籤:日誌   檢查   names   多線程編程   常用   next   ida   第四章   中文   

功用:
1.讀取用戶端顯示資料
2.賭氣瀏覽器隱式請求資料
3.產生結果
4.向客戶發送顯示資料(文檔)
5.發送隱式HTTP相應資料

1.效率:傳統CGI對每一個請求都會啟動一個進程
servlet使用輕量級的java線程處理
2.便利 3.強大 4.廉價 5.可移植 6.安全

jsp作用
某種程度上,servlet看作是含有html的java程式
將jsp看作是含有java代碼的html頁面
jsp會翻譯成servlet,servlet會被編譯,在請求期間啟動並執行就是servlet

Web目錄
html以及jsp文檔放在頂級目錄中
web.xml檔案放在WEB-INF子目錄中
servlet和其他類要麼放在WEB-INF/Classes中,要麼放在WEB-INF/Classes對應的包裡面
CLASSPATH需要包含.class檔案頂級目錄,需要把webAppDir/WEB-INF/Classes加入到CLASSPATH中去

為每個servlet指定一個地址,web.xml
<web-app>

</web-app>
必須要將所有servlet元素放在servlet-mapping之前,不能相互混合

第三章servlet基礎
METHOD:Get、Post請求
servlet一般拓展為HttpServlet,並根據資料發送方式覆蓋不同的方法doGet或doPost方法
HttpServletRequest所有的請求資訊
HttpServletRequest指定輸出資訊,可以獲得printWrite,用它可以將文檔內容發送到客戶。對於簡單的servlet,大部分工作花在了println產生上
兩種一場ServletException和IOException

輸出html,(response方法)設定相應前序 setHead()也可以
常用setContentType設定輸出文件類型為text/html,會緩衝前序資料,緩衝區大小 set/getBufferSize

類檔案雖好放在包中

1.servlet生命週期
構造器 init 調用servive方法。servlet規定任何時間只允許單個線程運行。多個並發請求一般會導致多個線程同時調用service方法

get正常的url請求,post需要特殊列為method的html表單中

直接覆蓋service不是個好思想。doPost和doGet相互調用

doXxx是service的主體

2.init
初始化參數非常依賴於web.xml,調用getServletConfig,擷取ServletConfig對象的引用

3.destroy方法
伺服器移除該servlet時調用該方法,應當主動將某些操作資料儲存起來,防止意外(斷電等)發生

servlet實現了SingleThreadModel介面,防止多線程訪問,但並不是好的選擇。最好多線程不要同時對servlet訪問。這裡涉及到多線程編程。

調試:
列印輸出
IDE內建調試
日誌跟蹤
Apache Log4J
重啟伺服器等

第四章 處理表單資料
使用action屬性指定處理資料的jsp或servlet地址
<form action="url"> 省略action將提交到自身頁面
submit按鈕

讀取 reques,大小寫敏感
讀取單個值;getParameter(),返回string
讀取多個值 getPatameterValues() 返回數組
參數名尋找 ①getPatameterNames()返回一個Enumeration hasMoreElement和nextElement迭代讀取在讀取時可以調用getParameter()、getPatameterValues()方法

②getPatameterMap()

讀取未經處理資料 getReader和getInputStream
多字元集資料讀取
1.單個參數轉碼
String first = request.getParamter("first");
String first = new String(first.getBytes(),"GBK");
2.setCharaterEncoding()

//多次拼接字串,需要使用StringBuffer提高效率

javaBean自動填滿表單java對象,自動轉換資料類型
bean:普通類,擁有私人欄位,並擁有get/set方法
(jsp:setProperty)以後講

第五章:處理Http請求前序(reqert)
首先判斷是否為空白
前序:
GET/servlet/Search?keyword=servlets+jsp HTTP/1.1

Accept:image/gif,image/jpq,*/* 指定處理的類型

Accept-Encoding:gzip 瀏覽器可用的字元集

Accept-Language 列出客戶的慣用語言(中文)

Connection:Keep-Alive 能否處理可儲蓄連結http請求

Content-Length 適用於post資料大小

Authorization 訪問密碼保護的頁面需要表示身份(第二卷)

Cookie:userID=id4545(第八章)

Host:www.books.com
Refere:http://www.books.com/findbooks.html

User-Agent:Mozilla/4.0 瀏覽器資訊或其他客戶程式

讀取前序 getHeader(connection); 大小寫不敏感
getCookie(第八章)
getAuthType和getRemoteUser拆分Authorization讀取
getContentLenget
getContentType
getDateHeader和getIntHeader讀取指定前序並轉換為Date或Int類型
getHeaderNames 返回一個Enumeration

getMethod
getRequestURL
getQueryString
getProTocol 返回前三部分一般為 HTTP/1.1

壓縮頁面資訊
定製瀏覽器
根據客戶的到達方式定製頁面
Refere指出,使用者通過連結到達指定頁面才會發送Refere,如果直接輸入網址則不會發送Refere

第六章 :伺服器相應的產生 respond
setStatus(int) 狀態碼 302 404
sendRedirct(String url)
sendError(int code, String message)

html狀態碼
100 繼續 200 OK,一切正常 202已接受 204沒有文檔
205重設內容 301永久移動 302找到 303 檢查其他文檔

304 未發生更改 307臨時重新導向 400錯誤請求 401未授權 403資源不可用 404未找到 405方法不允許
415 不支援的媒體類型 417 期望不能滿足 500伺服器內部錯誤 503 伺服器不可用 505不支援的http版本

第七章 伺服器相應產生 http相應前序
重點:輸出映像,表格

第八章 cookie管理
用處:標識使用者 記住密碼 定製站定 定製廣告

使用Cookie建構函式cookie,用指定名稱和值創立cookie
cookiesetCookie設定屬性 cookie.getCookie讀取
使用response.addCookie將cookie插入到HTTP相應前序中

讀取採用 request.getCookie() 返回數組 大多數需要遍曆調用每個cookie中getName方法取出對象,用getValue取出對應的值

Cookie c = new Cookie("UserID","a123");

設定最大時效 c.setMaxAge();

插入到相應前序 response.addCookie(c);

使用cookie屬性。
屬性時伺服器發送用戶端前序的一部分。不屬於瀏覽器返回給服務端的前序。每次都要在請求流中擷取。
set/getComment() 注釋
set/getDomain() cookie使用的域(網域名稱)
set/getMaxAge(int) 毫秒
set/getPath() 擷取適用的路徑 如果沒有指定,只發送或返回cookie頁面所在目錄極其子目錄下的(servlet)url ("/")適用於所有網站
set/getSecure()能否加密連結
set/getValue
set/getName
set/getVersion

區分會話cookie與持久性cookie
設定時效的,在超過時效後到期
沒有設定時效的,只在當前表單和子表單中有效

靜態類CookieUtilities類方法單純的提取某個值
getCookieValue(request,"Name","Parame")

第九章 會話跟蹤
因為http時無狀態的不會維護內容相關的資訊
典型的解決方案:cookie url重寫(url加請求字串)以及隱藏表單域

適用HttpSession Api
1.訪問與當前請求相關聯的繪畫對象
requset.getSession擷取httpSession對象,這是一個簡單的散列表 HttpSession session = requset.getSession
2.尋找與會話相關聯的資訊
HttpSession.getAttribute()
3.儲存資訊 setAttribute()
4.廢棄會話資料 removeAttribute() 廢棄指定會話
invalidate()廢棄整個會話
logout退出伺服器銷毀該使用者相關聯的所有會話

5.getAttributeNames() 返回所有屬性的名稱,傳回值是Enumeration

6.boolean isNew() 是否新會話
7.long getCreateionTime()
8.long getLastAccessedTime()最後被客戶訪問的時間
9.set/getMaxIncativeInterval() 自動廢棄時間
存在伺服器端
setAttribute會替換掉任何值

預設會話跟蹤session是基於瀏覽器記憶體中的cookie

jsp/servlet學習筆記(核心編程)servlet部分

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.