JavaWeb複習(一)
文章目錄
一:概述
1.1 web應用
一個JavaWeb應用:java+servlet+jsp
1.2 流程
web伺服器用於接受客戶需求,然後向客戶返回一些結果
瀏覽器就是一個軟體,它可以與伺服器通訊,能夠解釋html程式碼,並將web頁面呈現給使用者
流程如下:
web上瀏覽器和伺服器的大多數通訊都是使用http協議完成,http協議支援簡單的請求和響應會話,瀏覽器(客戶)傳送一個http請求,伺服器會用一個http響應做應答。
總結就是:1.html告訴瀏覽器如何向用戶顯示內容
2.http是web上客戶和伺服器進行通訊用的協議
3.伺服器使用http向客戶(瀏覽器)傳送html
1.3 HTTP協議
http協議是TCP/IP的上層協議(TCP用於保證從一個網路節點向另一個網路節點發送的檔案能完整到達,IP是一個底層協議,負責把資料塊沿路移動/路由到目的地),需要依賴TCP/IP從一處向另一處完整地傳送請求和響應
http會話的結構是一個簡單的請求/響應序列:瀏覽器發出請求,伺服器做出響應
1.4 請求流/響應流要素
1.4.1請求流關鍵要素:
1.http方法
2.要訪問的頁面(URL)
3.表單引數(如方法參)
1.4.2響應流關鍵要素:
1.狀態碼(表明請求是否成功)
2.內容型別(包括文字、圖片、html等)
3.內容(具體的html、圖片等)
1.5 http請求
http協議有很多請求方法,常用的有get方法和post方法
1.5.1 get請求
get是最簡單的http方法,用於要求伺服器獲取一個資源並把資源發過來
特點:
1.get傳送資料是有限的(取決於伺服器)
2.get傳送的資料會追加到url後,所以傳送的資料完全暴露(通過?符隔開,兩部分加在一起,整個串組成完整的請求url)
1.5.1.1get請求解析
//GET代表http方法, /books/test.jsp 為web伺服器上資源的路徑
//sex=man&name=Professional為引數
//HTTP/1.1 為協議的版本
GET /books/test.jsp?sex=man&name=Professional HTTP/1.1 //請求行
//以下是請求首部
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
Accept: text/xml,application/xml,text/html;q=0.9,text/plain
1.5.2 post請求
post方法可以請求某個東西,與此同時可以向伺服器傳送一些表單資料
1.5.2.1post請求解析
//POST代表http方法, /advisor/test.do 為web伺服器上資源的路徑
//HTTP/1.1 為協議的版本
POST /advisor/test.do HTTP/1.1 //請求行
//以下到空行為請求首部
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
Accept: text/xml,application/xml,text/html;q=0.9,text/plain
(----此處空一行----)
//以下為訊息體
color=dark&taste=malty
1.5.3其他方法
比如head、trace、put、delete、options、connect等方法
1.6 http響應
http響應可以包含html,http還會在響應內容前增加首部資訊,而瀏覽器使用首部資訊來幫助處理html頁面
1.6.1響應解析
//以下為http響應首部
//HTTP/1.1為http協議版本 200為http狀態碼 OK為狀態碼的相應文字
HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate
Date: Tue, 26 Jul 2016 09:32:11 GMT
Expires: Tue, 26 Jul 2016 09:32:12 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 3892
//Content-Type響應首部的值稱為MIME型別,用於告訴瀏覽器要接收的資料是什麼型別,它的值域請求首部的Accept值相關
Content-Type: text/html; charset=utf-8
Last-Modified: Tue, 26 Jul 2016 09:32:12 GMT
1.7 埠
埠是一個16位的數(範圍0~2^16 - 1),用於標識伺服器硬體上一個特定的軟體程式
。它並不是一個可以插入物理裝置的位置,只表示伺服器應用的“邏輯“數。從0~1023的埠號已經保留,由一些眾所周知的服務使用
1.7.1 常用埠
21:FTP
23:Telnet
25:SMTP
37:Time
80:HTTP
443:HTTPS
110:POP3
1.8 Web伺服器
兩個常用的Web伺服器,一個是Apache,另一個是Tomcat
1.9 靜態/動態Web頁面
靜態頁面只是原封不動的在目錄中,伺服器找到靜態頁面,並把它原樣傳給客戶
對於動態頁面而言,Web伺服器上有一個輔助應用可以生成非靜態的即時頁面且能與web伺服器通訊。每當請求到來時,輔助應用具體寫出html,web伺服器再把這個html響應到瀏覽器。輔助應用是一個CGI程式(CGI代表公共閘道器介面)
1.9.1 動態頁面生成流程
舉個動態頁面顯示當前日期的例子:
1.10 Servlet
Servlet是Java Servlet的簡稱,稱為小服務程式或服務聯結器,用於互動式地瀏覽和修改資料,生成動態Web內容
1.10.1 Servlet編寫、部署、執行
1.專案目錄樹和tomcat目錄樹如下:
2.在src目錄下編寫testServlet.java
//以下是一個標準的Servlet宣告
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class testservlet extends HttpServlet {
public void doGet(HttpServletRequest reque, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
java.util.Date today = new java.util.Date();
out.println("<html> <body> <h1> time is </h1> <br> today </body> </html>" ); //Java巢狀html
}
}
3.在etc建立一個部署描述檔案web.xml(每個web應用都有一個部署描述檔案)
<?xml version="1.0" encoding="utf-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.4">
<!--一個部署描述檔案可以宣告多個servlet-->
<!--servlet-name把servlet和servlet-mapping元素繫結在一起-->
<servlet>
<servlet-name>test Servlet</servlet-name>
<!--servlet-class是java類-->
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test Servlet</servlet-name>
<!--url-pattern是客戶所用的請求名-->
<url-pattern>/Serv1</url-pattern>
</servlet-mapping>
</web-app>
4.在project目錄下編譯servlet,生成的testServelet.class檔案將會在classes目錄下
java -classpath /yourpath/tomcat/common/lib/Servlet-api.jar -d classes src/testServlet.java
5.將testServelet.class複製到WEB-INF/classes目錄下,再把web.xml複製到WEB-INF目錄下
6.從tomcat目錄下啟動tomcat
bin/startup.sh
7.開啟瀏覽器,輸入
http://localhost:8080/test/Serv1 //test為專案名,Servl為servlet名
1.11 JSP
在html中引入Java,就是jsp。
1.11.1 示例
舉個當前日期的例子:
<html>
<body>
The time is
<%= new java.util.Date() %>
</body>
</html>
1.11.2 好處
1.使得Java開發人員處理Java,html開發人員開一專心處理Web(僅僅需要學如何呼叫具體Java方法)
2.避免html以某種格式放入一個String中導致錯誤
如果有寫的不對或者不全面的地方 可通過主頁的聯絡方式進行指正,謝謝