JavaWeb基礎

Java Webhtml

JavaWeb工做原理java

Web應用程序web

Web服務器數組

Web瀏覽器瀏覽器

HTML文件緩存

HTTP協議(超文本傳輸協議)安全

位於TCP/IP協議的應用層(頂層)服務器

TCP協議是長鏈接,HTTP是短鏈接多線程

HTTP協議主要特色併發

1.遵循請求/響應模型

無鏈接

無狀態

工做流程

創建鏈接

發送請求信息

HTTP請求包括請求行、請求頭、空行、消息體

請求行由三部分組成:請求方法、URL、HTTP版本

請求方法有8中,經常使用GET和POST

回送響應信息

HTTP響應包括狀態行、響應頭、空行、消息體

狀態行中的狀態碼有5種

1xx:信息,請求收到,繼續處理

2xx:成功

3xx:重定向,爲了完成請求,必須進一步執行的動做

4xx:客戶端錯誤

5xx:服務端錯誤

關閉鏈接

Web服務器缺陷

只能提供靜態頁面

CGI程序:多進程,沒法實現高併發

Java的解決方案:Servlet及Web容器

Servlet(無main方法,屬於javaEE)

主要任務

讀取瀏覽器發送的數據

作業務處理,生成結果

給瀏覽器作響應

Web容器

負責Servlet的管理和運行

通訊支持

生命週期管理

多線程支持

JSP支持

處理安全性

Web容器和Servlet對請求和響應的處理總結

JavaWeb page12-13

JavaWeb應用程序的組成

配置文件:web.xml(必須在WEB-INF目錄下),瀏覽器只能訪問到WEB-INF外面的文件

靜態文件

類文件和包

Web容器Tomcat

目錄結構

bin:啓動和關閉服務器

lib:共用的jar文件

logs:日誌

webapps:應用程序部署目錄

發佈Web應用

打war包命令:jar cvf myweb.war html images jsp WEB-INF *.html *.jsp

Servlet基礎

Servlet規範

Web應用程序

Servlet和HTTP Servlet

過濾器

安全

國際化

Servlet API

HttpServlet繼承GenencServlet,GenencServlet實現了ServletConfig和Servlet接口

開發Servlet程序的步驟

1.自定義類繼承httpServlet

2.重寫doGet和doPost方法

3.在web.xml中作配置

Servlet中不能用全局變量,線程安全問題

解決1:用局部變量

解決2:線程同步 synchronized

Servlet 生命週期

五個過程:建立、初始化、提供服務、銷燬、GC回收

建立(構造器)

初始化:init方法

服務:調用Service方法(它去調用doGet或doPost)

銷燬:調用destroy方法

GC卸載

正常狀況下,服務能夠執行屢次,其餘只執行一次。在長時間沒有發送請求後,須要從新建立Servlet

Servlet默認是多線程的,所以給定時間內容器只裝載一個Servlet實例

Servlet基本配置

<url-patttern>匹配規則三種

徹底匹配:<url-pattern>/servlet/MyServlet.do</url-pattern>

目錄匹配:<url-pattern>/servlet/*</url-pattern>

擴展名匹配:<url-pattern>*.do</url-pattern>

容器查找規則:首先查找徹底匹配,找不到則查找目錄匹配,若是還找不到就查找擴展名匹配。一個請求能夠匹配多個目錄匹配,容器最終會選擇最長的目錄匹配

Servlet初始化配置

在一個Servlet元素中使用<init-param>、<param-name>、<param-value>元素

訪問初始化參數

this.getServletConfig().getInitParameter(String name)

this.getInitParameter(String name)

ServletContext應用上下文對象

歸納

屬於整個Web應用程序

能夠訪問到Web應用程序資源的本地輸入流

把資源的虛擬路徑轉換爲物理路徑

記錄事件日誌

綁定一個對象在整個Web應用程序中共享

獲取應用上下文對象

ServletContext context= this.getServletConfig().getServletContext()

ServletContext context= this.getServletContext()

經常使用方法

context.getRealPath():將虛擬路徑轉換爲部署到服務器那邊的真實物理路徑

數據共享

context.setAttribute("username","張三"):在應用上下文中保存數據(能夠存任何數據類型)

context.getAttribute("username"):在應用上下文中取出數據(根據鍵取出值,再強轉)

getInitParameter():得到全局的初始化參數(初始化配置中,在Servlet元素外用<Context-Param>元素)

使用Servlet處理HTTP響應

HttpServletResponse對象用於建立響應

設置響應狀態行

五類狀態碼

1xx:信息,請求收到,繼續處理

2xx:成功

3xx:重定向,爲了完成請求,必須進一步執行的動做

4xx:客戶端錯誤

5xx:服務端錯誤

設置狀態碼

setStatus()方法,例:resp.setStatus(HttpServletResponse.SC_NOT_FOUND)

兩種專用方法

sendError(HttpServletResponse.SC_NOT_FOUND,"你輸入的路徑有錯") 生成一個404應答, 能夠自定義錯誤信息!

sendRedirect(String URL)重定向,用於跳轉頁面或跳轉Servlet!

重定向跳轉Servlet時寫的路徑不加/

原理:首先將狀態碼設置爲302,再根據響應頭裏Location的URL地址,從新發送請求

設置響應頭

setHeader(name,value)

自定義響應頭:resp.setHeader("username", "張三");

經過Content-Type響應頭告訴瀏覽器響應的數據類型是普通HTML文本:resp.setHeader("Content-Type", "text/html");

setContentType(String mimetype)

Content-Type值的類型,叫作MIME(Multipurpose Internet Mail Extending)

text/html

text/plain

image/jpeg

設置響應消息體

傳遞文本流getWriter()

傳遞二進制流getOutputStream()

下載文件

使用Servlet處理HTTP請求

瀏覽器向服務器發HTTP請求的四種方式

地址欄輸入 Get

超連接 Get

表單提交 Get/Post

表單提交中傳輸二進制數據,只能使用POST方法

改變默認編碼集 enctype="multipart/form-data"

開啓Servlet3.0文件上傳開關 @MultipartConfig

提交方法 method="post"

AJAX Get/Post

GET/POST方法比較

GET

提交數據類型:文本

提交數據長度:不超過255個字符

提交數據可見性:做爲URL地址的一部分顯示在瀏覽器地址欄

提交數據緩存:緩存在瀏覽器URL歷史狀態中

POST

提交數據類型:文本,二進制文本

提交數據長度: 沒有限制

提交數據可見性: 做爲請求的消息體,不可見

提交數據緩存:不會被瀏覽器緩存

如何選擇GET/POST方法

請求一個靜態頁面或圖形文件時使用GET方法,由於僅僅須要發送文件名

發送大數據的時候使用POST方法

上傳文件時使用POST方法

發送用戶名、密碼或其餘保密信息的時候使用POST方法

獲取HTTP協議請求行

 

 

獲取HTTP協議請求頭

request.getHeader("User-Agent");

獲取HTTP協議消息體

獲取表單數據

request.getParameterValues("hobby") 返回字符串數組

request.getParameter("sex")返回字符串

請求轉發

request.getRequestDispatcher("/FromServlet").forward(request, response);跳頁面或者Servlet

一次請求一次響應。請求轉發在服務器內部完成,而重定向由瀏覽器完成,重定向至少兩次請求兩次響應

使用request對象做爲倉庫

傳數據線程安全(只在一次請求一次響應中有效)

相關文章
相關標籤/搜索