1. 背景
首先铐望,說明一下捌刮,這是一篇關(guān)于 Java Web 基礎(chǔ)入門的文章,上學(xué)期開始學(xué)習(xí) Java Web 叹卷,看了不少有關(guān) 「XXX從入門到精通」的書籍撼港,近期,要幫著導(dǎo)師帶幾名本科生骤竹,所以決定總結(jié)一下以前學(xué)的 Java Web 的基礎(chǔ)知識(shí)帝牡,畢竟不能在本科生面前丟面子嘛。
2.Web開發(fā)相關(guān)知識(shí)
2.1 靜態(tài)/動(dòng)態(tài) Web 資源
Web 即表示網(wǎng)頁的意思蒙揣,他用于表示Internet主機(jī)上供外界訪問的資源靶溜,該資源可以被分為兩類:
1.靜態(tài)Web資源:是指是實(shí)際存在的,無需經(jīng)過服務(wù)器的編譯懒震,直接加載到客戶瀏覽器上顯示出來罩息,供人們?yōu)g覽的數(shù)據(jù)始終不變。例如个扰, *.html頁面瓷炮。
執(zhí)行流程:
- 瀏覽器中輸入所要請(qǐng)求的資源的 URL ,發(fā)送 HTTP 請(qǐng)求包锨匆,經(jīng)過 DNS 域名解析返回IP地址崭别,然后進(jìn)過層層 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 頁面中的內(nèi)容是不能動(dòng)態(tài)更新的,所有用戶任何時(shí)刻看到的頁面內(nèi)容都是一致的矢赁。
- 靜態(tài) Web 頁面無法連接數(shù)據(jù)庫糯笙,無法和用戶實(shí)現(xiàn)實(shí)時(shí)交互。
- 靜態(tài) Web 頁面也可以通過添加 JavaScript 實(shí)現(xiàn)一些動(dòng)態(tài)的視覺效果撩银,這些都是在客戶端實(shí)現(xiàn)的给涕,在服務(wù)器端并不發(fā)生改變。
2.動(dòng)態(tài)Web資源:與靜態(tài)頁面不同的是,其顯示的內(nèi)容是在訪問該頁面的時(shí)候動(dòng)態(tài)生成的【改變的內(nèi)容主要來自于數(shù)據(jù)庫中數(shù)據(jù)的改變】够庙,并不是指頁面會(huì)動(dòng)恭应。
目前,比較流行的動(dòng)態(tài)網(wǎng)頁制作技術(shù)有:ASP耘眨、PHP昼榛、JSP
執(zhí)行流程:
- 動(dòng)態(tài)WEB中,程序依然使用客戶端和服務(wù)端剔难,客戶端依然使用瀏覽器(IE胆屿、FireFox等),通過網(wǎng)絡(luò)(Network)連接到服務(wù)器上钥飞,使用HTTP協(xié)議發(fā)起請(qǐng)求(Request)莺掠,現(xiàn)在的所有請(qǐng)求都先經(jīng)過一個(gè)WEB Server Plugin(服務(wù)器插件)來處理,此插件用于區(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ù)庫结耀,從數(shù)據(jù)庫中取出數(shù)據(jù)等一系列操作后動(dòng)態(tài)拼湊頁面的展示內(nèi)容,拼湊頁面的展示內(nèi)容后匙铡,把所有的展示內(nèi)容交給WEB服務(wù)器图甜,之后通過WEB服務(wù)器將內(nèi)容發(fā)送回客戶端瀏覽器進(jìn)行解析執(zhí)行。
注意:
所謂靜態(tài)頁面鳖眼,是基于訪問頁面時(shí)網(wǎng)頁的內(nèi)容有無變化而言的黑毅,與頁面的視覺效果無關(guān),因?yàn)閯?dòng)態(tài)的視覺效果主要是通過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 常見的 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è)人共同開發(fā)而成。因?yàn)門omcat 技術(shù)先進(jìn)滋尉、性能穩(wěn)定玉控,而且開源免費(fèi),因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認(rèn)可狮惜,成為目前比較流行的Web 應(yīng)用服務(wù)器高诺。學(xué)習(xí)JavaWeb開發(fā)一般都使用Tomcat服務(wù)器,該服務(wù)器支持全部JSP以及Servlet規(guī)范碾篡。
Mac 系統(tǒng)下是自帶 Java 環(huán)境虱而,安裝Tomact服務(wù)器后,可以通過終端开泽,進(jìn)入系統(tǒng)中 Tomact 所在的路徑:
如圖所示牡拇,即可在本機(jī)開啟 Tomact 服務(wù)器,打開瀏覽器穆律,輸入 127.0.0.1:8080 惠呼,即可顯示一下頁面:
- ** 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)頁瀏覽技即、文件傳輸、新聞服務(wù)和郵件發(fā)送等方面樟遣,它使得在網(wǎng)絡(luò)(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事而叼。它提供ISAPI(Intranet Server API)作為擴(kuò)展Web服務(wù)器功能的編程接口;同時(shí)豹悬,它還提供一個(gè)Internet數(shù)據(jù)庫連接器葵陵,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的查詢和更新。
3 . JSP 簡介
JSP 技術(shù)是由原 SUN 公司提出瞻佛,他基于 Java Servlet 技術(shù)來實(shí)現(xiàn)開發(fā)的動(dòng)態(tài)脱篙、高性能的 Web 應(yīng)用程序娇钱,JSP 的網(wǎng)頁實(shí)質(zhì)就是在 Html 的基礎(chǔ)上按照指定的語法格式添加 Java 代碼片段與 JSP 的特殊標(biāo)記,然后以 .jsp 為后綴保存绊困。 JSP 實(shí)質(zhì)上也是一個(gè)HTML頁面文搂,只不過他包含用于產(chǎn)生動(dòng)態(tài)網(wǎng)頁內(nèi)容的 Java 代碼,這些 Java 代碼可以是 Java Bean秤朗、SQL語句等煤蹭。
3.1 JSP 的執(zhí)行流程:
** JSP執(zhí)行的大體流程:** 首先,客戶端向 Web服務(wù)器發(fā)出請(qǐng)求取视,然后 JSP引擎負(fù)責(zé)將頁面轉(zhuǎn)化為 servlet硝皂,此 Servlet 經(jīng)過虛擬機(jī)的編譯后生成類文件,然后再將類文件加載進(jìn)內(nèi)存中執(zhí)行作谭,最后礁鲁,由服務(wù)器將處理的結(jié)果返回給客戶端鸳君。
JSP 頁面會(huì)被編譯成 Servlet 代碼出革,所以從執(zhí)行效率上來說谓着,肯定沒有 Servle t快,但并不是每次都需要編譯怨酝,當(dāng)?shù)谝淮尉幾g完成之后傀缩,JSP 引擎會(huì)緩存已經(jīng)編譯后的類文件,所以农猬,當(dāng)重復(fù)調(diào)用的時(shí)候,就不需要重復(fù)的編譯了售淡。
下面我從一個(gè) Java Web 項(xiàng)目中找出了一個(gè)簡單 JSP 源代碼斤葱,先熟悉一下JSP 頁面的基本組成:
<!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 頁面代碼不同的是 JSP 引入了一些標(biāo)簽,引入了相應(yīng)的類庫汤纸。
Java Web 的入門基礎(chǔ)就寫到這里吧衩茸,下次有空開始寫 JSP 的基礎(chǔ)語法以及簡單的實(shí)例。
感悟:
發(fā)現(xiàn)寫文章好累人啊贮泞,御魔了一晚上才寫了這么點(diǎn)楞慈,每次想說的總是很宏達(dá),可是一下筆就陷入無盡的細(xì)節(jié)中啃擦,自己的寫作表達(dá)能力仍需努力澳依丁!現(xiàn)在是真佩服那些能夠堅(jiān)持寫完一個(gè)系列的博主令蛉。所以聚霜,遇到用心寫的文章,也許文章并不完美,但不要吝嗇你的喜歡蝎宇、評(píng)論奧弟劲,因?yàn)檎悄阆矚g、評(píng)論鞭策他們走向優(yōu)秀姥芥。