這段時間博主也接觸瞭一些事情,感覺有必要專門把JSP的基礎拿出來說明一下,因為還是很多人和我說看不懂。其實寫博文真的是挺有挑戰性的一件事情,如何把知識點用通俗易懂的語言來表述出來呢?這真的是不太容易的。首先,寫教程需要大量的時間成本,我之前學習JavaWeb的時候,網上搜到的大部分博客,真心話我看不懂。因為那時候的水平太菜瞭,看視頻又嫌太慢。當時我還喜歡抱怨,說網上那些大牛明明水平很高,可為什麼都不肯用大白話把技術點給講出來呢?當時我記得,遇到問題上網隨便一搜,看到的大部分文章,都是代碼一貼就完瞭。最多就是在文章最後寫一行字說明一下。這對當時小白的我真的是心累,而且,我往往看瞭很多博客,發現裡面的代碼都是一樣的。這個時候就挺鬱悶瞭。博客精簡一些自然有精簡的好處,可是那主要是對於有好幾年工作經驗的程序員而言的,對新手來說,無疑增加瞭閱讀的難度。那時候我總想著,要是有一個真正意義上的,完全面向初學者的博客系列就好瞭,而不是代碼一貼,你們自己去意會吧。好在博主終於度過瞭那個難熬的階段,然後某一天發現瞭簡書這麼好的互聯網產品,憑著一點激情和沖動,還有一絲絲天真,開始寫我的第一篇博客。寫瞭之後才發現,寫教程不難,可是要寫出那種通俗易懂的教程是非常耗時間的,有的時候,我感覺知識點就應該是這樣的,可是為瞭讓新人容易理解,我不得不花時間去組織語言和編寫案例。好幾次我都想退出簡書不寫瞭,因為寫教程真的很累。可是看到自己寫的文章閱讀量越來越多,而且大部分看我文章的人都是處於迷茫期的朋友。我仿佛看到瞭當年,剛走出校門的我自己。於是,我決定繼續寫下去,隻是更新的話,不可能像之前有段時間那樣,仿佛打瞭雞血似地一天一更瞭。不過我還是盡量保證每周一到兩更,當然,斷更也是有可能的。(額,我感覺自己有點輕微的潔癖,我竟然總是忍不住要區分 的,地,得 )當然,不管怎樣,那個文章發佈系統我肯定會堅持寫完的,畢竟做出瞭承諾。好的,本系列對JSP,以及如何建立JavaWeb工程做一個講解,如果你在收看《文章發佈系統》系列,而且基礎相對有些薄弱的話,也許這個系列可以幫到你。這也算是《文章發佈系統》系列的一個小分支,我會盡快寫完,為什麼要寫呢?因為我發覺看我文章的大部分人還是初學者,有的甚至連web項目是啥都不知道,於是,我感覺有必要把基礎的東西做一個總結。1. 實驗環境準備(假設你已經裝好瞭jdk,如果不會安裝jdk,請參考這篇文章)1.1 安裝一個eclipse或者MyEclipse(本文以eclipse為例),其實所謂的安裝就是網上去下載一個eclipse,然後解壓一下就好瞭。1.2安裝tomcat,網上下載一個,然後解壓一下。我這次使用的tomcat容器配的是8080端口。1.3 將tomcat配置到eclipse中。具體步驟為:Window — Preferences — Server — Runtime Environment — Add 將tomcat解壓後的路徑配置上去就行瞭。本文假設讀者已經對tomcat,eclipse有一定的瞭解。2. 新建web項目首先,一言不合就打開eclipse我們新建一個項目,File — new — Dynamic Web Project。項目名稱是web,點擊Nextbuild\classes是默認的編譯目錄,還是點擊Next好的,最後點擊Finish,一個web項目就建立好瞭。目錄結構2.啥叫JavaWeb項目,它能幹嘛?JavaWeb項目就是一個應用程序,你不要以為它有多麼神秘。你每天打開的QQ就一個應用程序,你在手機上打開的微信,百度地圖等等,這些都是應用程序。不同的是,QQ是一個本地客戶端程序,它需要你在自己的電腦上安裝一個客戶端,然後你打開QQ,可以登錄,聊天。QQ肯定也分客戶端和服務端,我們電腦上裝的就是客戶端,你要知道的一點是,我們發送消息,發送到哪裡去瞭呢?沒錯,肯定是發送到QQ的服務器上瞭,那裡保存著我們的所有數據。想想也不可能在本地,因為我們在電腦上發送的消息,在手機QQ上不是也能看到嗎?這就說明,肯定是上傳到它的服務器然後保存下來瞭。而Web項目是什麼呢?它也是一個應用程序,隻不過它的客戶端是運行在瀏覽器上的。我們打開瀏覽器,訪問一個地址,比如 https://mp.toutiao.com這個就是我們的訪問路徑,我們通過這個URL向簡書的服務器提交請求,然後服務器進行處理,給你回應。接下來,我們就看到出來一個網頁。我們在這個網頁上可以寫文章,點贊,收藏,等等。我們的每一步操作,其實都和服務器做瞭一個交互。比如一個登錄功能,當我們鼠標點擊那個登錄按鈕,瀏覽器就向服務器提交瞭一個請求,服務器進行處理,然後操作數據庫。最終,它會得出一個結果,就是說,到底能不能讓你登錄,總會有個說法。如果你密碼寫錯瞭,它可能就會得出一個用戶名或密碼錯誤的結論。然後,這個信息會從服務器返回到前臺,前臺就是瀏覽器。所謂的前臺就是你的瀏覽器,沒什麼神秘的。前臺接受到後臺傳過來的信息後,進行一些處理,然後給你個提示,比如,告訴你用戶名或密碼錯誤。這就是一個完整的交互過程。現在隨著網速越來越好,瀏覽器的性能越來越強大,我想web肯定是未來的大趨勢。畢竟,誰都不希望在電腦上安裝一大堆客戶端吧。隻用一個瀏覽器多好。有瞭web,我隻需要有一個瀏覽器,然後就能通過互聯網獲取我想要的資源瞭。這樣不是很美妙嗎?近幾年H5非常流行,尤其是移動端,因為手機瀏覽器基本上都支持css3。一樣的道理,我們肯定也不希望在手機上安裝一大堆應用,卡都卡死瞭,如果能直接訪問一個網頁,就能獲得我想要的服務就好瞭。而且現在WIFI也普遍瞭,如果以後流量能沒有限制,那麼APP的熱度很可能會逐漸被web取代。當然,現在是不太可能的,畢竟訪問網頁要流量啊,而我在手機上安裝瞭APP,就好像電腦的QQ一樣,大部分資源文件就在我本地,我不需要每次都去聯網下載。比如圖片,app就沒事,因為就在本地,可是如果用web,我每次訪問那個網頁,就需要把圖片重新下載一遍。這樣不是很浪費流量嗎?3. 手工搭建web項目現在,為瞭說明服務器和web項目的概念,我們先不用eclipse,來手工搭建一個web項目。服務器,正常情況下就是一臺配置高一點的電腦,除非是那種大型的專用服務器。一般來說,所謂的服務器,就是電腦。比如我現在有一臺電腦,給他裝瞭一個linux系統或者windos系統,然後我說,好瞭,從今以後,這就是服務器瞭。現在服務器一般都是用linux系統的。那麼tomcat又是什麼?tomcat其實也是一個應用程序,你網上下載的tomcat往往是一個壓縮包,然後我們解壓以後就相當於安裝好瞭。可以這麼理解:服務器就是一臺電腦,而tomcat是一個容器,專門存放web項目的容器。以下我都將tomcat稱為tomcat容器。我們看到在tomcat容器根目錄下,有一個webapps文件夾裡面是這樣的:好的,現在我要發佈一個項目瞭,我隻需要把一個已經做好的web項目往裡面一丟就行瞭。除瞭webapps,我們還發現一個bin目錄。一般來說,可執行的文件都放在bin目錄下。打開bin,找到一個startup.bat文件。這就是啟動tomcat的東西,雙擊它,tomcat就被啟動瞭。然後,瀏覽器可以訪問tomcat裡面的項目。現在我們來手工搭建一個web項目,首先,在webapps目錄下新建一個文件夾,是的,就是文件夾,不管你項目是什麼,肯定還是放在文件夾裡面的。項目名稱就叫做webapp。打開webapp,根據web項目的規范,我們需要有一個WEB-INF文件夾。然後,在WEB-INF文件夾裡面,必須要有一個web.xml文件。xml文件,就是一個描述性的文件,我現在的觀點如下:XML = JavaBean = Json = HashMap它無非就是描述一些東西,保存一些數據而已。好的,我們在裡面新建一個web.xml。這個文件非常重要,正因為它的存在,tomcat容器才會知道這個文件夾裡面竟然是一個web項目。否則,tomcat容器是不知道這個web項目的,它隻會將myapp文件夾看做是一個文件夾而已。我們用記事本打開web.xml,將以下代碼拷貝進去。<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app>
<display-name>web</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
<?xml version=”1.0″ encoding=”UTF-8″?>表示這是一個1.0版本的XML文件,編碼為UTF-8。<web-app></web-app>就是這個XML文件的一個根節點,就是告訴你,我這個xml文件裡面,有一個東西叫做web-app。XML的一個作用就是配置文件,web.xml本身就是一個配置文件。在web項目中,我們應用xml最多的也就是配置一些參數。配置參數,就是給屬性賦值嘛,沒什麼神秘的。包括我們學習JavaSE,歸根到底,一直在做的一件事就是new對象,然後調用方法,調用方法的目的一方面是做一些事情,另一方面不還是給屬性賦值嘛。你可以把web.xml看做是一個java類,類名叫做 webApp。它裡面有兩個屬性,分別是display-name和welcome-file-list。display-name是發佈名稱,也就是項目的名字。 welcome-file-list 是歡迎頁面,就是說,當你在瀏覽器直接訪問這個myapp項目,默認跳轉的頁面。想象一下,應該會變得非常好理解。XML就是一個數據描述語言,我們通過web.xml描述這個項目的構成和配置。好的,接下來,我們是不是要給他一個歡迎頁啊。嗯,我們在webapp目錄下添加一個簡單的歡迎頁,裡面就打印一個HelloWorld。<%@ page language=”java” contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Insert title here</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>這是一條JSP的page指令,如果你用面向對象的思維來看待這個玩意,就是new瞭一個page對象,並且給它裡面的language,contentType,charset,pageEncoding屬性分別賦瞭值。language表示JSP頁面所用的語言,默認是java,其實你寫不寫都沒有關系,因為目前來說JSP它隻支持Java。我們來試一下,現在我們把language屬性去掉。就變成瞭這樣:<%@ page contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%>
contentType=”text/html; charset=UTF-8″:設置頁面的內容是文本或者html頁面,字符設置為UTT-8。pageEncoding=”UTF-8″:頁面編碼設置為UTF-8。好的,現在我們在bin目錄,雙擊運行startup.bat啟動完畢。打開瀏覽器,在地址欄輸入http://localhost:8080/myapp/回車哇,是不是出來瞭。太棒瞭。這就是手工搭建一個web項目的過程。隻要你符合web項目的規范,包括文件夾的名字,文件的名字,就會被tomcat容器識別為一個web項目。接下來,我們來寫服務器代碼。在WEB-INF下面新建一個文件夾,名字叫做classes,這個也是規范,就叫這個名字,否則tomcat容器識別不瞭。裡面在創建一個java文件,名字就叫Hello吧用記事本打開,將下面的代碼拷貝進去。import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Hello extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(“已經進入服務器…”);
}
}
這是一個比較簡單的HttpServlet 程序,說到servlet,他的意思就是服務器小程序。原來,在英文中,但凡是let結尾的單詞,都有微小的意思。比如servlet,server是服務器,let結尾,那麼就是服務器小程序。servlet是Server Applet的縮寫,我們再來看Applet,app是應用程序,又是let結尾,所以應該就是小的應用程序。這個就是所謂的英文詞根,也是學英語的一個竅門。類似的例子還有很多,比如d開頭的單詞,大部分都有往下,分開,分散的意思。反正就是有一種往下,或者分發出去的韻味。為瞭驗證這個事情,我們打開有道詞典隨便找幾個看看。**distribution ** 哦,對的,分配,配送,分發。這 不就是有分散,分出去的韻味嗎?determine確定,下決心。這不就是把什麼什麼東西定下來,定下來,不也是往下嗎?所以,得出一個結論,d開頭的單詞,而且,第二個字母必須是元音字母,比如de,di等。那麼,這一類單詞的情感色彩就有一種往下,或者分發出去的韻味。再來說說servlet,let結尾都代表這個單詞是一個小型的東西,比如piglet 小豬 starlet 小星星再比如,psy開頭的單詞,情感色彩就是偏向於精神和心理學方面的,Paste_Image.pngpsychology 心理學還有這下子應該比較好理解瞭吧,所以它為什麼叫servlet,也是有原因的。繼續,我們用命令行的方式將java文件編譯成class文件。在編譯之前,我們先去tomcat容器的lib目錄找一個jar:找到servlet-api.jar,復制一份,拷貝到classes目錄下。然後,我們在該classes目錄下,按住shift,鼠標右鍵,選擇在此處打開命令行窗口。輸入javac -classpath servlet-api.jar Hello.javaclass文件就出來瞭再次打開web.xml,我們還需要把這個servlet配上去,不然tomcat怎麼知道這個servlet需要加入我們的web項目呢?web.xml<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app>
<display-name>web</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
雙擊startup.bat,啟動tomcat容器然後,在瀏覽器的地址欄輸入http://localhost:8080/myapp/hello發現網頁上一片空白,回顧我們的servlet程序,按理說控制臺會打印一句話的Paste_Image.png看看控制臺:果然如此。你應該也已經發現瞭,我們手工搭建web項目的話,是不是很麻煩呀?所以,這也是為什麼我們現在都用eclipse,或者MyEclipse來開發項目瞭。這些IDE工具就是為瞭解決手工編譯的麻煩而出現的。
本文出自快速备案,转载时请注明出处及相应链接。