1. 背景
首先,說(shuō)明一下,這是一篇關(guān)于 Java Web 基礎(chǔ)入門的文章,上學(xué)期開(kāi)始學(xué)習(xí) Java Web ,看了不少有關(guān) 「XXX從入門到精通」的書(shū)籍,近期,要幫著導(dǎo)師帶幾名本科生,所以決定總結(jié)一下以前學(xué)的 Java Web 的基礎(chǔ)知識(shí),畢竟不能在本科生面前丟面子嘛。
2.Web開(kāi)發(fā)相關(guān)知識(shí)
2.1 靜態(tài)/動(dòng)態(tài) Web 資源
Web 即表示網(wǎng)頁(yè)的意思,他用于表示Internet主機(jī)上供外界訪問(wèn)的資源,該資源可以被分為兩類:
1.靜態(tài)Web資源:是指是實(shí)際存在的,無(wú)需經(jīng)過(guò)服務(wù)器的編譯,直接加載到客戶瀏覽器上顯示出來(lái),供人們?yōu)g覽的數(shù)據(jù)始終不變。例如, *.html頁(yè)面。

執(zhí)行流程:
- 瀏覽器中輸入所要請(qǐng)求的資源的 URL ,發(fā)送 HTTP 請(qǐng)求包,經(jīng)過(guò) DNS 域名解析返回IP地址,然后進(jìn)過(guò)層層 Router 等網(wǎng)絡(luò)設(shè)備的轉(zhuǎn)發(fā),到達(dá)服務(wù)器,服務(wù)對(duì) HTTP 包頭進(jìn)行解析,例如,發(fā)現(xiàn) * .html 的靜態(tài)文件的請(qǐng)求,然后讀取服務(wù)器相關(guān)目錄下的資源文件,返回 HTTP 響應(yīng)包,瀏覽器接受到 * .html 文件并解析,生成 Web 視圖。
特點(diǎn):
- Web 頁(yè)面中的內(nèi)容是不能動(dòng)態(tài)更新的,所有用戶任何時(shí)刻看到的頁(yè)面內(nèi)容都是一致的。
- 靜態(tài) Web 頁(yè)面無(wú)法連接數(shù)據(jù)庫(kù),無(wú)法和用戶實(shí)現(xiàn)實(shí)時(shí)交互。
- 靜態(tài) Web 頁(yè)面也可以通過(guò)添加 JavaScript 實(shí)現(xiàn)一些動(dòng)態(tài)的視覺(jué)效果,這些都是在客戶端實(shí)現(xiàn)的,在服務(wù)器端并不發(fā)生改變。
2.動(dòng)態(tài)Web資源:與靜態(tài)頁(yè)面不同的是,其顯示的內(nèi)容是在訪問(wèn)該頁(yè)面的時(shí)候動(dòng)態(tài)生成的【改變的內(nèi)容主要來(lái)自于數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變】,并不是指頁(yè)面會(huì)動(dòng)。
目前,比較流行的動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)有:ASP、PHP、JSP

執(zhí)行流程:
- 動(dòng)態(tài)WEB中,程序依然使用客戶端和服務(wù)端,客戶端依然使用瀏覽器(IE、FireFox等),通過(guò)網(wǎng)絡(luò)(Network)連接到服務(wù)器上,使用HTTP協(xié)議發(fā)起請(qǐng)求(Request),現(xiàn)在的所有請(qǐng)求都先經(jīng)過(guò)一個(gè)WEB Server Plugin(服務(wù)器插件)來(lái)處理,此插件用于區(qū)分是請(qǐng)求的是靜態(tài)資源(.htm或者是.htm)還是動(dòng)態(tài)資源。
如果WEB Server Plugin發(fā)現(xiàn)客戶端請(qǐng)求的是靜態(tài)資源(.htm或者是.htm),則將請(qǐng)求直接轉(zhuǎn)交給WEB服務(wù)器,之后WEB服務(wù)器從文件系統(tǒng)中取出內(nèi)容,發(fā)送回客戶端瀏覽器進(jìn)行解析執(zhí)行。
如果WEB Server Plugin發(fā)現(xiàn)客戶端請(qǐng)求的是動(dòng)態(tài)資源(例如:.jsp、.asp/.aspx、.php等),則先將請(qǐng)求轉(zhuǎn)交給WEB Container(WEB容器),在WEB Container中連接數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)等一系列操作后動(dòng)態(tài)拼湊頁(yè)面的展示內(nèi)容,拼湊頁(yè)面的展示內(nèi)容后,把所有的展示內(nèi)容交給WEB服務(wù)器,之后通過(guò)WEB服務(wù)器將內(nèi)容發(fā)送回客戶端瀏覽器進(jìn)行解析執(zhí)行。
注意:
所謂靜態(tài)頁(yè)面,是基于訪問(wèn)頁(yè)面時(shí)網(wǎng)頁(yè)的內(nèi)容有無(wú)變化而言的,與頁(yè)面的視覺(jué)效果無(wú)關(guān),因?yàn)閯?dòng)態(tài)的視覺(jué)效果主要是通過(guò)JavaScript、jquery等技術(shù)實(shí)現(xiàn)的。
2.2 Web 服務(wù)器
- Web服務(wù)器是指駐留于因特網(wǎng)上某種類型計(jì)算機(jī)的程序,是可以向發(fā)出請(qǐng)求的瀏覽器提供文檔的程序。當(dāng)Web瀏覽器(客戶端)連到服務(wù)器上并請(qǐng)求文件時(shí),服務(wù)器將處理該請(qǐng)求并將文件反饋到該瀏覽器上,附帶的信息會(huì)告訴瀏覽器如何查看該文件(即文件類型)。

- 服務(wù)器是一種被動(dòng)程序:只有當(dāng)Internet上運(yùn)行在其他計(jì)算機(jī)中的瀏覽器發(fā)出請(qǐng)求時(shí),服務(wù)器才會(huì)響應(yīng)。

2.2.1 常見(jiàn)的 Web 服務(wù)器:
-
Tomact
TomcatTomcat是一個(gè)實(shí)現(xiàn)了JAVA EE標(biāo)準(zhǔn)的最小的WEB服務(wù)器,是Apache 軟件基金會(huì)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun 和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。因?yàn)門omcat 技術(shù)先進(jìn)、性能穩(wěn)定,而且開(kāi)源免費(fèi),因而深受Java 愛(ài)好者的喜愛(ài)并得到了部分軟件開(kāi)發(fā)商的認(rèn)可,成為目前比較流行的Web 應(yīng)用服務(wù)器。學(xué)習(xí)JavaWeb開(kāi)發(fā)一般都使用Tomcat服務(wù)器,該服務(wù)器支持全部JSP以及Servlet規(guī)范。
Mac 系統(tǒng)下是自帶 Java 環(huán)境,安裝Tomact服務(wù)器后,可以通過(guò)終端,進(jìn)入系統(tǒng)中 Tomact 所在的路徑:

如圖所示,即可在本機(jī)開(kāi)啟 Tomact 服務(wù)器,打開(kāi)瀏覽器,輸入 127.0.0.1:8080 ,即可顯示一下頁(yè)面:

- ** IIS **
Microsoft的Web服務(wù)器產(chǎn)品為Internet Information Services (IIS),IIS 是允許在公共Intranet或Internet上發(fā)布信息的Web服務(wù)器。ⅡS是目前最流行的Web服務(wù)器產(chǎn)品之一,很多著名的網(wǎng)站都是建立在ⅡS的平 臺(tái)上。IIS提供了一個(gè)圖形界面的管理工具,稱為Internet信息服務(wù)管理器,可用于監(jiān)視配置和控制Internet服務(wù)。

IIS是一種Web服務(wù)組件,其中包括Web服務(wù)器、FTP服務(wù)器、NNTP服務(wù)器和SMTP服務(wù)器,分別用于網(wǎng)頁(yè)瀏覽、文件傳輸、新聞服務(wù)和郵件發(fā)送等方面,它使得在網(wǎng)絡(luò)(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作為擴(kuò)展Web服務(wù)器功能的編程接口;同時(shí),它還提供一個(gè)Internet數(shù)據(jù)庫(kù)連接器,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的查詢和更新。

3 . JSP 簡(jiǎn)介
JSP 技術(shù)是由原 SUN 公司提出,他基于 Java Servlet 技術(shù)來(lái)實(shí)現(xiàn)開(kāi)發(fā)的動(dòng)態(tài)、高性能的 Web 應(yīng)用程序,JSP 的網(wǎng)頁(yè)實(shí)質(zhì)就是在 Html 的基礎(chǔ)上按照指定的語(yǔ)法格式添加 Java 代碼片段與 JSP 的特殊標(biāo)記,然后以 .jsp 為后綴保存。 JSP 實(shí)質(zhì)上也是一個(gè)HTML頁(yè)面,只不過(guò)他包含用于產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容的 Java 代碼,這些 Java 代碼可以是 Java Bean、SQL語(yǔ)句等。
3.1 JSP 的執(zhí)行流程:
** JSP執(zhí)行的大體流程:** 首先,客戶端向 Web服務(wù)器發(fā)出請(qǐng)求,然后 JSP引擎負(fù)責(zé)將頁(yè)面轉(zhuǎn)化為 servlet,此 Servlet 經(jīng)過(guò)虛擬機(jī)的編譯后生成類文件,然后再將類文件加載進(jìn)內(nèi)存中執(zhí)行,最后,由服務(wù)器將處理的結(jié)果返回給客戶端。

JSP 頁(yè)面會(huì)被編譯成 Servlet 代碼,所以從執(zhí)行效率上來(lái)說(shuō),肯定沒(méi)有 Servle t快,但并不是每次都需要編譯,當(dāng)?shù)谝淮尉幾g完成之后,JSP 引擎會(huì)緩存已經(jīng)編譯后的類文件,所以,當(dāng)重復(fù)調(diào)用的時(shí)候,就不需要重復(fù)的編譯了。
下面我從一個(gè) Java Web 項(xiàng)目中找出了一個(gè)簡(jiǎn)單 JSP 源代碼,先熟悉一下JSP 頁(yè)面的基本組成:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="net.sf.json.JSONArray"%>
<%@include file="is_login.jsp" %>
<head>
</head>
<body>
<table width="80%" border="0" cellpadding="4" cellspacing="1"
bgcolor="#464646" class="newfont03" align="center">
<tr bgcolor="#EEEEEE">
<td>編號(hào)</td>
<td>新聞標(biāo)題</td>
<td>發(fā)布日期</td>
<td colspan="2">新聞管理</td>
</tr>
<%
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
if(request.getAttribute("json")!=null){
JSONArray json = JSONArray.fromObject(request.getAttribute("json"));
for (int i = 0; i < json.size(); i++) {
%>
<tr bgcolor="#FFFFFF">
<td><%=json.getJSONObject(i).getInt("news_id")%></td>
<td><%=json.getJSONObject(i).getString("news_title")%></td>
<td><%=json.getJSONObject(i).getString("news_date")%></td>
<td><a href="http://localhost:8080/iframework22/deleteNews.u?id=<%=json.getJSONObject(i).getInt("news_id")%>">刪除新聞</a></td>
<td><a href="xiugai.jsp?id=<%=json.getJSONObject(i).getInt("news_id")%>&content=<%=json.getJSONObject(i).getString("news_content")%>&title=<%=json.getJSONObject(i).getString("news_title")%>" >更新新聞</a></td>
</tr>
<%
}
}
else{
%>
<%="出錯(cuò)了" %>
<% }
%>
</table>
</body>
</html>
從中我們可以看到,JSP 代碼并不是直接寫在 HTML 中的,而是寫在 <% %> 中間的,與普通的 HTML 頁(yè)面代碼不同的是 JSP 引入了一些標(biāo)簽,引入了相應(yīng)的類庫(kù)。
Java Web 的入門基礎(chǔ)就寫到這里吧,下次有空開(kāi)始寫 JSP 的基礎(chǔ)語(yǔ)法以及簡(jiǎn)單的實(shí)例。
感悟:
發(fā)現(xiàn)寫文章好累人啊,御魔了一晚上才寫了這么點(diǎn),每次想說(shuō)的總是很宏達(dá),可是一下筆就陷入無(wú)盡的細(xì)節(jié)中,自己的寫作表達(dá)能力仍需努力?。‖F(xiàn)在是真佩服那些能夠堅(jiān)持寫完一個(gè)系列的博主。所以,遇到用心寫的文章,也許文章并不完美,但不要吝嗇你的喜歡、評(píng)論奧,因?yàn)檎悄阆矚g、評(píng)論鞭策他們走向優(yōu)秀。