標籤:
MyEclipse整合Tomcat
- 首先配置Tomcat,即配置環境變數Java_HOME、path,在第一講中已經完成了,不再贅述。
- Eclipse代碼風格匯入MyEclipse:
- 每個項目都要配置一次代碼風格,文字大小,快速鍵等等比較麻煩,可以用File下面的匯入、匯出功能。比如Eclipse下的File->General->Preferences->export all,產生一個*.epf檔案,然後用MyEclipse中的File->import->General->Preferences,選擇剛剛匯出的epf檔案import all即可。
- 開啟MyEclipse,在Window->Preferences->MyEclipse->Servers,選擇Tomcat 6.x,將Tomcat home directory設定為Tomcat的根目錄(比如我這裡是D:\Program Files\apache-tomcat-6.0.44,順便提一下,我本來裝的最新版8.0.9,可是不知道如何整合到MyEclipse中,因為MyEclipse(我的是8.5版)裡面只有Tomcat 4/5/6這幾個選項,因此不得不到Apache Tomcat首頁下載6.0版的Tomcat),將Tomcat sever下面的選項按鈕選為Enable,確定。
- MyEclipse中,Window->Preferences->Java->Installed JREs,Add一個Standard VM,在JRE home中鍵入本機Java的安裝目錄,回到剛才的Installed JREs目錄,選擇剛剛add的JRE,不要使用MyEclipse內建的,另外這裡之所以要選擇JRE,是因為Tomcat本身就是Java寫的,要有Java運行時環境才能跑起來。接下來,回到Tomcat 6.x,將JDK選為剛剛添加的那個。
配置完成後,在MyEclipse的右上方有一個名為Open Perspective,點擊,選擇MyEclipse Java Enterprise,然後MyEclipse中上部有個名為Run/Stop/Restart MyEclipse Servers的表徵圖,點擊選擇啟動Tomcat 6.x。而後在瀏覽器地址欄中輸入localhost:8080,出現Apache Tomcat的首頁,即為配置成功。
使用Eclipse結合Tomcat開發一個簡單的Servlet和JSP
Servlet是Java伺服器端編程,不同於我們之前寫的一般的Java應用程式,Servlet程式是運行在伺服器上的,伺服器有很多種,這裡我們使用的是Tomcat。
File->New->Web Project,項目命名為test,J2EE Specification Level 選擇Java EE 5.0,確定。到硬碟上找到test檔案夾,開啟WebRoot,開啟WEB-INF,裡面有三個檔案classes,lib,web.xml,其中classes用來放置Java編譯好的問價,lib是項目依賴的第三方JAR,web.xml是項目的部署描述符。
其次,想要項目放到Tomcat裡運行,必須告訴Tomcat項目在什麼地方:
進入Tomcat的安裝目錄,開啟conf目錄,開啟server.xml,通過對這個檔案進行相關的設定,Tomcat就可以找到我們的項目,在最後面幾行的</Host>標籤之前添加資訊:
<Context path="/test" docBase="D:\JavaWeb\test\WebRoot" reloadable="true"/>
其中Context是內容相關的意思,Tomcat伺服器中可以配置多個上下文,每個上下文對應一個Web應用;docBase是項目下面的WebRoot目錄,path是邏輯上的虛擬路徑(注意這裡的test和項目的test雖然名字一樣,但是它們之間沒有任何關係,你也可以把path改成"/abc"等),映射到docBase;reloadable表示是否可以重新載入。
接下來在MyEclipse中重新啟動Tomcat,瀏覽器地址欄鍵入localhost:8080/test,顯示This is my JSP page,說明剛才的配置成功。
在src目錄下建立一個包,命名為com.test.servlet;在建立的包下面建立一個類MyServlet,該類需要繼承HttpServlet類(一般來說,Servlet都需要繼承此類)。類的實現如下:
package com.test.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{process(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{process(req, resp);}protected void process(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{resp.setContentType("text/html");PrintWriter out = resp.getWriter();out.println("<HTML><HEAD><TITLE>My First Servlet</TITLE></HEAD>");out.println("<BODY>");out.println("<H1>Hello World</H1>");out.println("</BODY></HTML>");}}
接著在MyEclipse中配置Web-INF目錄下的web.xml,開啟在左下角選擇source,刪掉:
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
在</web-app>前面添加:
<servlet><servlet-name>MyServlet</servlet-name><servlet-class>com.test.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/MyServlet</url-pattern></servlet-mapping>
重啟Tomcat,瀏覽器訪問http://localhost:8080/test/MyServlet,出現"Hello World"即為成功。
在程式中對process方法稍作修改,列印系統目前時間:
protected void process(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{resp.setContentType("text/html");PrintWriter out = resp.getWriter();out.println("<HTML><HEAD><TITLE>My First Servlet</TITLE></HEAD>");out.println("<BODY>");out.println("<H1>Hello World</H1>");out.println("<br>" + new java.util.Date().toLocaleString());out.println("</BODY></HTML>");}
重新整理瀏覽器的http://localhost:8080/test/MyServlet頁面即可。
當然我們也可以在Console中列印系統時間,在剛剛添加的哪行語句下面,添加:
System.out.println("當前系統時間為:"+ new java.util.Date().toLocaleString());
然後在瀏覽器中重新整理頁面幾次,Console中也相應的列印出系統時間幾次。
- 最後我們分析一下Servlet是如何執行的?我們為什麼要在web.xml中添加上述的代碼呢?一是告訴用戶端,二是告訴Tomcat如何找我的資源,尋找的規則是:在servlet-mapping中根據url-pattern(其中‘/‘表示當前系統的根路徑(這裡是test)),找到servlet-name,然後在servlet中找跟他匹配的servlet-name,然後找到相應的servlet-class,如果發現其沒有執行個體化,就執行個體化它(其中的doGet處理用戶端的GET請求,doPost處理用戶端的POST請求,而通過瀏覽器訪問時全部使用的GET請求),立刻執行其doGet方法,doGet方法本身調用了process方法,執行後,伺服器返回的HTML資訊如下:
<HTML><HEAD><TITLE>My First Servlet</TITLE></HEAD><BODY><H1>Hello World</H1><br>2015-7-2 9:28:13</BODY></HTML>
瀏覽器解釋HTML,顯示出"
Hello World
2015-7-2 9:28:13"
這樣的結果。
需要注意的幾點:
- servlet-mapping元素中的servlet-name必須和servlet元素中的servlet-name匹配,這是由它的尋找規則決定的。
- servlet元素中的servlet-class必須是包名+類名。
- url-pattern前面以‘/‘開頭,表示用戶端以什麼樣的url格式請求servlet,也可以改成"/abc",這樣在瀏覽其中需要訪問http://localhost:8080/test/abc。
第二部分_搭建Java Web開發環境與配置Tomcat伺服器&JSP詳解