手工搭建Servlet實(shí)現(xiàn)_第1頁
手工搭建Servlet實(shí)現(xiàn)_第2頁
手工搭建Servlet實(shí)現(xiàn)_第3頁
手工搭建Servlet實(shí)現(xiàn)_第4頁
手工搭建Servlet實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第手工搭建Servlet實(shí)現(xiàn)所以學(xué)習(xí)Javaweb,可以從第3個(gè)階段開始學(xué)習(xí),不用再去關(guān)注Servlet,那么Servlet是否還有學(xué)習(xí)的必要呢?

答案是有,并且非常重要。俗話說萬變不離其宗,這個(gè)宗指的就是技術(shù)的底層,你會(huì)發(fā)現(xiàn)技術(shù)的底層其實(shí)都是相通的,只要把握了這個(gè)宗,我們就能在技術(shù)的浪潮來臨時(shí),把握機(jī)會(huì),而不是去追逐一個(gè)又一個(gè)的泡沫。

我記得初學(xué)java的時(shí)候,還是大三上,教我們java的老師是我們學(xué)院的副院長(zhǎng)。他讓我們用記事本去編寫程序,用命令行去執(zhí)行程序,而隔壁班用的卻是eclipse。當(dāng)初非常羨慕隔壁班,能用上“高大上”的開發(fā)環(huán)境,不用去改一個(gè)又一個(gè)的編譯錯(cuò)誤。現(xiàn)在想起來,卻非常感謝那段經(jīng)歷,它讓我對(duì)Java程序的執(zhí)行過程有了更直觀的認(rèn)識(shí),對(duì)java這門編程語言本身有了更深刻的認(rèn)識(shí)。

而現(xiàn)在作為一個(gè)Java程序員,我們已經(jīng)習(xí)慣了使用IDE和Web框架進(jìn)行開發(fā),IDE幫助我們做了編譯、打包的工作。Spring框架則幫助我們實(shí)現(xiàn)了Servlet接口,并把Servlet容器注冊(cè)到了Web容器中。這樣我們就可以專注于實(shí)現(xiàn)業(yè)務(wù)邏輯,但是同時(shí),卻缺少了接觸底層的機(jī)會(huì)。

如果程序一直都處于正常運(yùn)行的狀態(tài),不了解底層其實(shí)并沒有什么問題,但是如果程序一旦出現(xiàn)了預(yù)期之外的異常,那么如果我們不懂底層,就沒有辦法準(zhǔn)確的定位問題。

所以今天要和大家分享的是Servlet的學(xué)習(xí):

手工搭建一個(gè)Servlet

下載Tomcat

首先我們需要下載Tomcat:/download-90.cgi

Tomcat的目錄如下:(Mac系統(tǒng)、Tomcat8.5.38)

/bin:存放在windows(.bat)和Linux(.sh)環(huán)境下運(yùn)行的腳本文件。

/conf:存放配置的文件,其中最重要的是server.xml(配置Servlet)

/lib:存放Tomcat以及所有Web應(yīng)用都可以訪問的jar文件

/logs:存放Tomcat執(zhí)行時(shí)產(chǎn)生的日志文件

/work:存放JSP編譯后的產(chǎn)生class文件

/webapps:Tomcat的Web應(yīng)用目錄

編寫Servlet程序

我們可以通過繼承GenericServlet抽象類或者HttpServlet抽象類來實(shí)現(xiàn)我們自己的Servlet。HttpServlet是在GenericServlet的基礎(chǔ)上,進(jìn)一步封裝了Http的特性,相對(duì)GenericServlet而言使用簡(jiǎn)單,我們只需要重寫doGet和doPost方法即可。所以這里我們使用HttpServlet。(這里我們是使用記事本編寫的,如果你是使用ide,請(qǐng)引入javax.servlet包,因?yàn)檫@個(gè)包不在jdk的標(biāo)準(zhǔn)開發(fā)包中,方法可以參考:/article/196463.htm)

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;

importjava.io.PrintWriter;

*自定義Servlet.

*@authorjialin.li

*@date2025-12-1520:46

*/publicclassMyServletextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

System.out.println("開始處理get請(qǐng)求");

PrintWriterwriter=resp.getWriter();

resp.setContentType("text/html;charset=utf-8");

writer.println("h1helloServlet/h1

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

System.out.println("開始處理post請(qǐng)求");

PrintWriterwriter=resp.getWriter();

resp.setContentType("text/html;charset=utf-8");

writer.println("h1helloServlet/h1

}

編譯程序

這里需要我們將Tomcatlib中的Servlet-api.jar拷貝到當(dāng)前目錄下。因?yàn)槲覀兙帉懙腗yServlet繼承了HttpServlet抽象類,而這個(gè)類屬于該jar包,調(diào)用下面的命令編譯代碼:

javac-cp./servlet-api.jarMyServlet.java

可以看出,我們編譯成功,生成了一個(gè)class文件。

接著我們需要?jiǎng)?chuàng)建一個(gè)Web應(yīng)用的web文檔結(jié)構(gòu),把它放到Webapps中。結(jié)構(gòu)如下:

MyWebApp/WEB-INF/web.xml

MyWebApp/WEB-INF/classes/MyServlet.class

我們將在web.xml中配置我們的Servlet,web.xml的內(nèi)容如下:

xmlversion="1.0"encoding="UTF-8"

web-appxmlns="/xml/ns/javaee"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/xml/ns/javaee

/xml/ns/javaee/web-app_4_0.xsd"

version="4.0"

metadata-complete="true"

descriptionServletExample./description

display-nameMyServletExample/display-name

request-character-encodingUTF-8/request-character-encoding

servlet

servlet-namemyServlet/servlet-name

servlet-classMyServlet/servlet-class

/servlet

servlet-mapping

servlet-namemyServlet/servlet-name

url-pattern/myservlet/url-pattern

/servlet-mapping

/web-app

這里要保證servlet和servlet-mapping中的servlet-name一致。這樣才能完成從url到servlet的映射。

啟動(dòng)Tomcat

接著我們啟動(dòng)tomcat,找到tomcat的bin目錄,然后執(zhí)行start.sh腳本(如果是windows系統(tǒng),請(qǐng)使用.bat的腳本):[code]sh

shstartup.sh

tomcat的默認(rèn)端口是8080,我們可以訪問一下myservlet,觀察結(jié)果::8080/MyWebApp/myservlet

helloServlet

MyWebApp是我們的應(yīng)用名,即在webapps的文件夾,myservlet是我們配置在web.xml里的Servlet路徑。(如果啟動(dòng)tomcat出現(xiàn)異常,請(qǐng)移步/article/216973.htm,里面有具體的解決辦法)

讀取日志

讀tomcat的日志,也是后端開發(fā)工程師必不可缺的一項(xiàng)技能。它可以幫助我們快速的定位問題。tomcat中的日志分為兩類,一類是運(yùn)行日志,記錄著系統(tǒng)運(yùn)行過程中的信息,比如異常錯(cuò)誤等。一類是訪問日志,記錄著訪問的時(shí)間、IP地址、訪問路徑等相關(guān)信息。

catalina.***.log

主要記錄著Tomcat啟動(dòng)過程中的信息,這個(gè)文件可以看到JVM參數(shù)以及操作系統(tǒng)等日志信息。

catalina.out

catalina.out是Tomcat的標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出,在這個(gè)日志里我們可以看到MyServlet.java程序輸出的信息。

localhost.**.log

主要記錄Web應(yīng)用在初始化過程中,遇到的未處理的異常。

manager.***.log/host-manager.***.log

存放Tomcat自帶的Manager項(xiàng)目的日志信息

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.annotation.WebServlet;

importjava.io.IOException;

importjava.io.PrintWriter;

*自定義Servlet.

*@authorjialin.li

*@date2025-12-1520:46

@WebServlet("/myAnnotationServlet")

publicclassMyServletextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

System.out.println("開始處理get請(qǐng)求");

PrintWriterwriter=resp.getWriter();

resp.setContentType("text/html;charset=utf-8");

writer.println("h1helloServlet/h1

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

System.out.println("開始處理post請(qǐng)求");

PrintWriterwriter=resp.getWriter();

resp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論