版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、TOMCAT部分Tomcat的下載和安裝到apache官網(wǎng)下載:。找到tomcat對應(yīng)的頁面,可以下載安裝程序,可以下載zip包。zip包解壓到本地硬盤即可。然后就是配置環(huán)境變量。TOMCAT_HOME:tomcat在本地硬盤的工作文件夾;path:%TOMCAT_HOME%bin。配置完環(huán)境變量后進(jìn)入cmd命令行窗口,輸入startup.bat可以啟動tomcat,shutdown.bat關(guān)閉tomcat。其實(shí)在Windows下startup.bat和shutdown.bat也可以使用catalina命令。其實(shí)無論Windows還是Linux,啟動tomcat都是
2、通過catalina連接的。catalina startcatalina stop如果想看啟動參數(shù),可以:catalina debug run,之后exit退出。Tomcat配置首先看看Tomcat5.x目錄結(jié)構(gòu):bin:二進(jìn)制可執(zhí)行文件腳本common:Catalina本身和Web應(yīng)用可加載的類目錄conf:配置文件目錄logs:日志目錄server:服務(wù)器所需的類庫目錄shared:WebApp共享的類庫webapps:Web應(yīng)用所存放的目錄applicationswork:Tomcat產(chǎn)生的工作目錄(存放jsp產(chǎn)生的class文件)temp:存放臨時產(chǎn)生的文件(tomcat用于安全的管理
3、)Tomcat6.x和5.x的目錄結(jié)構(gòu)會有所不同,6系列的Tomcat目錄會少,但無所謂。基本功能一樣的。Tomcat配置文件:conf/server.xml:(注意備份):服務(wù)器的主配置文件conf/web.xml:定義所有Web應(yīng)用的配置conf/tomcat-user.xml:定義了Tomcat用戶信息server.xml中定義Tomcat端口的:如果Tomcat端口和其他應(yīng)用程序端口發(fā)生(比如Oracle)沖突,可以修改以上端口。如果一臺電腦上安裝多個Tomcat,可以修改server.xml中三個端口:8080,8005和8009。SERVLET部分Servlet配置Servlet是
4、服務(wù)端的小程序,一般在容器中運(yùn)行,最常見的容器是Tomcat。Web容器格式必須遵循Sun公司的規(guī)范:WEB-ROOT:(WEB-ROOT的名字可以隨意取名)|-WEB-INF (名字必須為WEB-INF)|-web.xml (配置文件,有格式要求,可以拷貝Tomcat的ROOT下的)|-lib|-classesWeb程序可以放在webapps文件夾下,也可以放在其他地方。不過放在其他地方要在Tomcat中配置虛擬目錄。Tomcat中配置虛擬目錄是必須的,因?yàn)樗械拈_發(fā)有可能是在其他目錄中完成的。比如,我在E盤建立ServletStudy文件夾,這個就是Web根文件夾(WEB-ROOT),下面
5、有WEB-INF文件夾,WEB-INF文件夾下有web.xml文件。web.xml內(nèi)容如下: Welcome to Tomcat Welcome to Tomcat 這樣一個虛擬目錄就配置好了。Web開發(fā)虛擬目錄一覽表:WEB-ROOT 根目錄,一搬虛擬目錄會直接在此目錄中配置 |-WEB-INF 整個Web中的最安全的目錄 |-classes 保存所有*.class文件,*.class文件必須放在一個包中 |-lib 保存第三方的jar包 |-web.xml 整個Web工程的部署文件 |-js 存放javascript的文件夾 |-css 存放css的文件夾 |-jsp 存放jsp頁面的文件
6、夾 |-index.htm, index.jsp 一般的歡迎界面但是此時服務(wù)器并不知道E盤上存在這樣一個工作目錄,所以此時,必須在Tomcat下conf下server.xml文件之中配置此工作目錄(虛擬目錄)。修改server.xml文件,在里面加入如下的配置,要在之內(nèi)設(shè)置。其中Context表示上下文,表示配置一個新的上下文 path:表示瀏覽器中輸入的路徑:必須有/ docBase:表示此路徑對應(yīng)著硬盤上的真實(shí)目錄以后就可以通過http:/localhost:8008/ss找到硬盤上的E:ServletStudy文件夾了。配置完之后要重啟動服務(wù)器。這是在地址欄里輸入:http:/local
7、host:8008/ss出現(xiàn)了404錯誤。是因?yàn)樵赥omcat中將目錄列表功能關(guān)閉了(為了安全,Tomcat5.5之后),所以,想現(xiàn)在通過瀏覽器觀察一個目錄中的全部內(nèi)容,需要修改Tomcat下conf下web.xml文件。但是在開發(fā)時候可以打開目錄列表功能,在發(fā)布時候一定要關(guān)閉。修改web.xml,把servlet下init-param的listings改為true即可。重啟服務(wù)器。再次輸入:http:/localhost:8008/ss(我改了Tomcat的端口)。說明:所有的Servlet程序必須在Web目錄中執(zhí)行,依靠web容器執(zhí)行,Servlet本身是一個類,并且不需要由主方法調(diào)用執(zhí)行
8、;Servlet必須放在WEB-INF/classes中;一個Servlet類必須繼承HttpServlet,那么此類才是Servlet程序;Servlet程序必須放在一個包中。開發(fā)Servlet程序要把Tomcat下lib下servlet-api.jar放到Java下jre下lib下ext中。也可以設(shè)置環(huán)境變量。如果采用集成開發(fā)環(huán)境eclipse或MyEclipse,直接引入jar包即可。設(shè)置環(huán)境變量,命令行模式下:set classpath=%TOMCAT_HOME%libservlet-api.jar命令行模式下編譯java文件:javac -d . HelloServlet.java,
9、會自動在當(dāng)前目錄下建立包路徑。我采用MyEclipse開發(fā),集成了開發(fā)環(huán)境,很方便,但為了了解Servlet原理,我會把MyEclipse生成的.class文件放到剛剛建立的“虛擬目錄”中進(jìn)行配置。Servlet開發(fā)第一個Servlet程序:HelloWorldServlet.javapackage com.ghk.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;imp
10、ort javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class HelloWorldServlet extends HttpServlet / 這個東西寫不寫都一樣private static final long serialVersionUID = 1L;/* * Tomcat調(diào)用doGet方法時候會幫你傳進(jìn)來一個具體的類的對象 * 這個類是實(shí)現(xiàn)了這個接口的 * HttpServletRequest 代表客戶端傳遞過來的請求 * HttpServletR
11、esponse 代表到客戶端的應(yīng)答 */Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException / 這句話是給IE瀏覽器看的,告訴瀏覽器的編碼為中文,否則中文亂碼response.setContentType(text/html;charset=GB18030);/ out為response方法提供的輸出流(打印流)/ 這個out自動flush,不拋異常PrintWriter out = response.
12、getWriter();out.println();out.println(hello);out.println();out.println();out.println(HELLO WORLD!);out.println();out.println();out.println();out.close();super.doGet(request, response);這個serlvet程序是在com.ghk.servlet包下建立的,所以要在虛擬目錄的classes文件夾下建立com文件夾,com文件夾下建立ghk文件夾,ghk文件夾下建立servlet文件夾,把生成的HelloWorldSer
13、vlet.class放到servlet文件夾下。這還沒完。打開這個虛擬目錄的web.xml文件,標(biāo)簽內(nèi)容添加內(nèi)容如下:helloworldservletcom.ghk.servlet.HelloWorldServlethelloworldservlet/helloworldservlet標(biāo)簽內(nèi)名字隨意取,但是兩個內(nèi)容要一致;是這個類的全名;是瀏覽器對應(yīng)的訪問路徑,前面必須加“/”。之后建立的servlet程序也要這樣設(shè)置。一個servlet可以對應(yīng)多個servlet-mapping。下面啟動Tomcat服務(wù),打開瀏覽器,輸入地址:http:/localhost:8008/ss/hellowor
14、ldservlet,會看到顯示結(jié)果。第一個最簡單的Servlet程序演示完畢!另外:Servlet路徑以地址欄為準(zhǔn),地址欄上只要可以顯示出正確的路徑,就絕對不會找不到Servlet。Servlet生命周期在整個Servlet生命全過程,只有一個Servlet對象。當(dāng)用戶第一次訪問Servlet的時候,Tomcat“造”出這個Servlet對象。客戶端第一次請求過來,服務(wù)端new出實(shí)例,只new一次。接下來調(diào)用init方法,只調(diào)用一次。接下來以多線程方式處理客戶端請求。(Tomcat內(nèi)部有一個線程池,會預(yù)先準(zhǔn)備若干線程,當(dāng)客戶端發(fā)送請求時,線程們會啟用,指向Servlet的引用)而后,服務(wù)端調(diào)用
15、service(繼承過來的)方法,這個service方法調(diào)用service(自身)方法,后來的service調(diào)用相應(yīng)的doXXX方法。當(dāng)服務(wù)關(guān)閉的時候,調(diào)用Servlet的destroy方法銷毀對象,釋放內(nèi)存。下面看一段源碼:LifeCycleServlet.javapackage com.ghk.servlet;import javax.servlet.*;import javax.servlet.http.*;public class LifeCycleServlet extends HttpServlet private static final long serialVersionUI
16、D = 1L;public void init() throws ServletException System.out.println(* 初始化 *);/ 這個init方法優(yōu)先執(zhí)行public void init(ServletConfig config) throws ServletException System.out.println(* 初始化+ config.getInitParameter(ref1) + *);public void service(ServletRequest req, ServletResponse res) System.out.println(* se
17、rvice服務(wù) *);public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, java.io.IOException System.out.println(* 服務(wù)doGet *);public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, java.io.IOException this.doGet(req, resp);public voi
18、d destroy() System.out.println(* 銷毀 *);通過源碼,結(jié)合上面的解釋,應(yīng)該對這個小程序沒有什么疑義了。(別忘了配置web.xml,參考下文)下面要討論的是ServletConfig。ServletConfigServletConfig是Servlet的配置信息,是一個接口。Servlet繼成HttpServlet時候可以帶來一個實(shí)例(或者說接口的實(shí)現(xiàn)對象)。在web.xml中可以為Servlet程序設(shè)置初始值,ServletConfig可以得到初始值的信息,也可以得到Servlet的信息。一個Servlet程序中如果有init方法(無參)和init方法(有參:
19、ServletConfig)會優(yōu)先調(diào)用有參方法。如果開發(fā)人員重寫init方法,酌情選擇。下面看例子:web.xml(帶有初始化參數(shù)的)inittestservletcom.ghk.servlet.InitTestServletlvdiold_greenpiaodiold_fuckinittestservlet/inittestservletInitTestServlet.javapackage com.ghk.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletCon
20、fig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class InitTestServlet extends HttpServlet private static final long serialVersionUID = 1L;SuppressWarnings(unchecked)Overr
21、ideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=GB18030);ServletConfig config = this.getServletConfig();PrintWriter out = response.getWriter();/ 得到的是虛擬目錄下web.xml里標(biāo)簽里設(shè)置的Servlet名稱out.print(S
22、ervlet的名稱 + t);out.println(config.getServletName() + );/ 得到Tomcat下server.xml中的上下文路徑out.print(Servlet的路徑 + t);out.println(config.getServletContext().getContextPath() + );java.util.Enumeration initParas = config.getInitParameterNames();/ 得到初始化參數(shù)的名和值while(initParas.hasMoreElements()String name = initPa
23、ras.nextElement().toString();out.print(name + t);out.print(config.getInitParameter(name)+ );out.close();以上程序看一眼就明白了,做個試驗(yàn)測一下。Cookies基于Cookies的編程只起到一個錦上添花的功能,可有可無。Session首先聲明:1.Session是服務(wù)端的一小塊內(nèi)存;2.Session與客戶端窗口對應(yīng),包括本窗口及其子窗口;3.客戶端和服務(wù)端有對應(yīng)的SessionID;4.Session是通過讀取客戶端的Cookie來“溝通”的,但毋需重寫Cookie;5.如果客戶端禁掉了Co
24、okie,可以通過URL重寫來實(shí)現(xiàn)Session;6.Session有失效期,在Tomcat下conf下web.xml文件中標(biāo)簽里面??梢酝ㄟ^修改這個標(biāo)簽來設(shè)定Session的失效期。HttpServletRequest中的Session管理方法:1getRequestedSessionId():返回隨客戶端請求到來的會話ID??赡芘c當(dāng)前的會話ID相同,也可能不同。2getSession(boolean isNew):如果會話已經(jīng)存在,則返回一個HttpSession,如果不存在并且isNew為true,則會新建一個HttpSession3isRequestedSessionIdFromCoo
25、kie():當(dāng)前的Session ID如果是從Cookie獲得,為true4isRequestedSessionIdFromURL():當(dāng)前Session ID如果是由URL獲得,為true5isRequestedSessionIdValid():如果客戶端的會話ID代表的是有效會話,則返回true。否則(比如,會話過期或根本不存在),返回falseHttpSession的常用方法:getAttributeNames()/getAttribute()getCreateTime()getId()getMaxInactiveInterval()invalidate()isNew()setAttri
26、bute()setMaxInactivateInterval()下面看一段程序,假設(shè)客戶端沒有禁用Cookies:package com.ghk.servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;public class ShowSession extends HttpServlet private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest re
27、quest, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=GB18030);PrintWriter out = response.getWriter();/ HttpServletRequest中g(shù)etSession方法返回類型為HttpSessionHttpSession session = request.getSession(true);String heading;Integer accessCount = (Int
28、eger) session.getAttribute(accessCount);if (accessCount = null) accessCount = new Integer(0);heading = 歡迎新的來訪!; else heading = 歡迎老客戶回來!;accessCount = new Integer(accessCValue() + 1);session.setAttribute(accessCount, accessCount);out.println(Session追蹤+ n+ + heading+ n+ 您的Session信息:n+ n+ n + 信
29、息類型值n + n+ IDn + + session.getId()+ n+ n + 創(chuàng)建時間n+ + new Date(session.getCreationTime()+ n+ n + 上次訪問時間n+ + new Date(session.getLastAccessedTime()+ n+ n + 之前訪問次數(shù)n+ + accessCount + n + n + );public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
30、 doGet(request, response);這個例子展示了客戶端沒有禁用Cookies時的現(xiàn)象。(現(xiàn)象自己可以做試驗(yàn)觀看)再看下面這個例子(客戶端仍然不禁用Cookies):package com.ghk.servlet;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class SessionInfoServlet extends HttpServlet private static final long serialVersionUID = 1L;public void doGet
31、(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException / 取得當(dāng)前Session,如果沒有則新建HttpSession mySession = request.getSession(true);response.setContentType(text/html;charset=GB18030);PrintWriter out = response.getWriter();out.println();out.println();out.println(Servl
32、et會話信息);out.println();out.println();out.println(會話信息);out.println(新會話嗎: + mySession.isNew();out.println(會話ID: + mySession.getId();out.println(會話創(chuàng)建時間:+ new java.util.Date(mySession.getCreationTime();out.println(上次訪問會話時間+ new java.util.Date(mySession.getLastAccessedTime();out.println(Request Informati
33、on);out.println(Session ID from Request: + request.getRequestedSessionId();out.println(Session ID via Cookie: + request.isRequestedSessionIdFromCookie();out.println(Session ID via rewritten URL: + request.isRequestedSessionIdFromURL();out.println(Valid Session ID: + request.isRequestedSessionIdValid
34、();out.println();out.close();public String getServletInfo() return Servlet returns session information.;這個例子主要顯示了session方法的使用。下面這個例子是客戶端禁用了Cookies情況下服務(wù)端采用URL重定向方法“記住”客戶:package com.ghk.servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class URLSession extends HttpSer
35、vlet private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=GB18030);PrintWriter out = response.getWriter();HttpSession session = request.getSession(true
36、);out.println(Session追蹤+ n+ session id: + session.getId() + + from url: + request.isRequestedSessionIdFromURL() + + from cookie: + request.isRequestedSessionIdFromCookie()+ + test + );public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doG
37、et(request, response);Session部分到這里告一段落。ServletContext在servlet的doXXX方法中定義:ServletContext application = this.getServletContext();能夠得到ServletContext對象。這個對象所反映的是Servlet所處的環(huán)境(即Tomcat容器)。它的具體應(yīng)用和Session一樣,只不過他的范圍是最大的。在整個Tomcat服務(wù)啟動階段都適用。下面看一段代碼:package com.ghk.servlet;import javax.servlet.http.*;import java
38、x.servlet.*;import java.io.*;public class TestServletContext extends HttpServlet private static final long serialVersionUID = 1L;Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=gb1803
39、0);PrintWriter out = response.getWriter();ServletContext application = this.getServletContext();Integer accessCount = (Integer) application.getAttribute(accessCount);if (accessCount = null) accessCount = new Integer(0); else accessCount = new Integer(accessCValue() + 1);application.setAttrib
40、ute(accessCount, accessCount);out.println(Session追蹤+ n + + accessCount + n + n + + n);用法和Session差不多,但是范圍更大,在整個服務(wù)器啟動階段都適用。Servlet中使用JavaBean和鏈接數(shù)據(jù)庫和普通java程序中、struts中以及jsp等等中使用相同,遵從Servlet語法即可。Servlet和頁面的關(guān)系Servlet接收表單參數(shù)表單頁面:inputservlet.jsp請輸入?yún)?shù):注釋:action中的路徑要配好,ss是servlet的虛擬路徑;inputservlet是訪問該servlet的
41、訪問路徑,在虛擬路徑web.xml中配置的。action=/ss/inputservlet中的第一個/代表http:/localhost:8008Servlet類:InputServlet.javapackage com.ghk.servlet;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.Htt
42、pServletResponse;public class InputServlet extends HttpServlet private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, java.io.IOException / 設(shè)置從服務(wù)端到客戶端頁面的顯示字符集response.setContentType(text/html;charset=GB18030
43、);/ 設(shè)置從客戶端頁面到服務(wù)端的字符集request.setCharacterEncoding(GB18030);String param = request.getParameter(ref);PrintWriter out = response.getWriter();out.println() ;out.println();out.println(從頁面?zhèn)鬟f來的內(nèi)容為:) ;out.println(param) ;out.println() ;out.close();public void doPost(HttpServletRequest req, HttpServletRespon
44、se resp)throws ServletException, java.io.IOException this.doGet(req, resp);Servlet轉(zhuǎn)發(fā)到Jsp1 RequestDispatcher接口對象允許將請求轉(zhuǎn)發(fā)到其他服務(wù)器資源(比如轉(zhuǎn)到其他的Jsp頁面),它的forward(HttpServletRequest,HttpServletResponse)方法可以將請求轉(zhuǎn)發(fā);2 可以有多種方式得到RequestDispatcher接口對象:request.getRequestDispatcher(“/xxx.jsp”)this.getServletContext().ge
45、tRequestDispatcher(/xxx.jsp)this.getServletConfig().getServletContext().getRequestDispatcher(/xxx.jsp)以上三種方式得到的是同樣對象:javax.servlet.RequestDispatcher3 可以通過HttpServletRequest的setAttribute(String name,String value)來設(shè)置需要傳遞的參數(shù),然后在代理servlet/jsp中就可以使用HttpServerletRequest的getAttribute(String name)來獲得對應(yīng)的值。下面是例子:servlettojsp.jspServletToJsp.jsppackage com.ghk.servlet;import javax.servlet.Reques
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024葡萄酒年份酒經(jīng)銷商售后服務(wù)與銷售合同3篇
- 2024藥品質(zhì)量檢驗(yàn)與監(jiān)管合同
- 二零二四年委托創(chuàng)作合同:原創(chuàng)音樂作品委托創(chuàng)作協(xié)議
- 二零二五年度綠色復(fù)墾土地流轉(zhuǎn)合同模板3篇
- 二零二五年度大巴車租賃與綠色出行宣傳合同3篇
- 2025年度餐飲店食品安全風(fēng)險評估合同9篇
- 二零二四年三人共同投資大數(shù)據(jù)科技公司合同3篇
- 2025年度鐵路旅游列車運(yùn)營管理合同3篇
- 2025年度綠色家居產(chǎn)品認(rèn)證服務(wù)合同簡易版2篇
- 2024年環(huán)境工程監(jiān)理研發(fā)合同
- 專升本英語閱讀理解50篇
- 施工單位值班人員安全交底和要求
- 中國保險用戶需求趨勢洞察報告
- 數(shù)字化轉(zhuǎn)型指南 星展銀行如何成為“全球最佳銀行”
- 中餐烹飪技法大全
- 靈芝孢子油減毒作用課件
- 現(xiàn)場工藝紀(jì)律檢查表
- 醫(yī)院品管圈與護(hù)理質(zhì)量持續(xù)改進(jìn)PDCA案例降低ICU病人失禁性皮炎發(fā)生率
- 新型電力系統(tǒng)研究
- 烘干廠股東合作協(xié)議書
- 法院服務(wù)外包投標(biāo)方案(技術(shù)標(biāo))
評論
0/150
提交評論