一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 手工搭建Servlet實(shí)現(xiàn)

手工搭建Servlet實(shí)現(xiàn)

2021-09-29 11:55進(jìn)擊的李同學(xué) Java教程

現(xiàn)在作為一個(gè)Java程序員,我們已經(jīng)習(xí)慣了使用IDE和Web框架進(jìn)行開(kāi)發(fā),IDE幫助我們做了編譯、打包的工作。Spring框架則幫助我們實(shí)現(xiàn)了Servlet接口,并把Servlet容器注冊(cè)到了Web容器中。本文主要介紹了Servlet手工搭建,感興趣的可以了解

前言

在初學(xué)Java web的時(shí)候,就曾聽(tīng)到過(guò)這樣一種說(shuō)法:
java Web的演變過(guò)程大概可以分為4個(gè)階段:

  • jsp + Servlet + jdbc
  • spring + struts2+ hibernate(ssh)
  • spring + SpringMVC + mybatis(ssm)
  • 微服務(wù)階段。

  所以學(xué)習(xí) Java web,可以從第3個(gè)階段開(kāi)始學(xué)習(xí),不用再去關(guān)注Servlet,那么Servlet是否還有學(xué)習(xí)的必要呢?
答案是有,并且非常重要。俗話說(shuō)萬(wàn)變不離其宗,這個(gè)宗指的就是技術(shù)的底層,你會(huì)發(fā)現(xiàn)技術(shù)的底層其實(shí)都是相通的,只要把握了這個(gè)宗,我們就能在技術(shù)的浪潮來(lái)臨時(shí),把握機(jī)會(huì),而不是去追逐一個(gè)又一個(gè)的泡沫。

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

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

  如果程序一直都處于正常運(yùn)行的狀態(tài),不了解底層其實(shí)并沒(méi)有什么問(wèn)題,但是如果程序一旦出現(xiàn)了預(yù)期之外的異常,那么如果我們不懂底層,就沒(méi)有辦法準(zhǔn)確的定位問(wèn)題。
所以今天要和大家分享的是Servlet的學(xué)習(xí):

手工搭建一個(gè)Servlet

下載Tomcat

  首先我們需要下載Tomcat :https://tomcat.apache.org/download-90.cgi
  Tomcat的目錄如下: (Mac系統(tǒng)、Tomcat 8.5.38)

手工搭建Servlet實(shí)現(xiàn)

  • /bin:存放在windows(.bat)和Linux(.sh)環(huán)境下運(yùn)行的腳本文件。
  • /conf: 存放配置的文件,其中最重要的是server.xml(配置Servlet)
  • /lib:存放Tomcat以及所有Web應(yīng)用都可以訪問(wèn)的jar文件
  • /logs:存放Tomcat執(zhí)行時(shí)產(chǎn)生的日志文件
  • /work:存放JSP編譯后的產(chǎn)生class文件
  • /webapps:Tomcat的Web應(yīng)用目錄

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;
 
/**
 * 自定義Servlet.
 *
 * @author jialin.li
 * @date 2019-12-15 20:46
 */public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("開(kāi)始處理get請(qǐng)求");
        PrintWriter writer = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        writer.println("<h1>hello Servlet</h1>");
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("開(kāi)始處理post請(qǐng)求");
        PrintWriter writer = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        writer.println("<h1>hello Servlet</h1>");
    }
}

編譯程序

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

?
1
javac -cp ./servlet-api.jar MyServlet.java

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

手工搭建Servlet實(shí)現(xiàn)

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

?
1
2
MyWebApp/WEB-INF/web.xml
MyWebApp/WEB-INF/classes/MyServlet.class

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<description> Servlet Example. </description>
<display-name> MyServlet Example </display-name>
<request-character-encoding>UTF-8</request-character-encoding>
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</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

?
1
sh startup.sh

手工搭建Servlet實(shí)現(xiàn)  

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

hello Servlet

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

讀取日志

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

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

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

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

manager.***.log/host-manager.***.log
  存放Tomcat自帶的Manager項(xiàng)目的日志信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
 
/**
 * 自定義Servlet.
 *
 * @author jialin.li
 * @date 2019-12-15 20:46
 */
@WebServlet("/myAnnotationServlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("開(kāi)始處理get請(qǐng)求");
        PrintWriter writer = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        writer.println("<h1>hello Servlet</h1>");
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("開(kāi)始處理post請(qǐng)求");
        PrintWriter writer = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        writer.println("<h1>hello Servlet</h1>");
    }
}

這個(gè)注解有兩層含義: 這個(gè)Java類是一個(gè)Servlet;這個(gè)Servlet對(duì)應(yīng)的url路徑是myAnnotationServlet

然后我們需要重新編譯文件,并刪除原來(lái)的web.xml,重新啟動(dòng)tomcat,驗(yàn)證結(jié)果:

hello Servlet

可以看出,使用注解和使用配置文件的效果是一樣的。

到此這篇關(guān)于手工搭建Servlet實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Servlet手工搭建內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/nedulee/p/12063894.html

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7472021-02-04
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
主站蜘蛛池模板: 免费370理论片中文字幕 | 日韩视频免费看 | 国产亚洲精品综合在线网址 | 国产亚洲精品高清在线 | 2012手机在线中文字幕 | 精品久久久久久国产91 | 扒开女人下面使劲桶屁股动漫 | 美女被绑着吸下部的故事 | 免费观看欧美一级高清 | 日本国产在线视频 | 免费观看二十女人一摸是水 | aaaa黄色片 | 国内精品久久久久久野外 | 性色生活片在线观看 | 国产短视频精品一区二区三区 | 国产成人精品免费 | 国产福利视频一区二区微拍 | 欧美亚洲免费 | 99re这里只有精品在线观看 | 视频在线观看一区二区三区 | 欧美特黄一级大片 | 波多野结衣快播 | 国自产在线精品免费 | 久久九九有精品国产23百花影院 | www.天天操| 美女张开腿黄网站免费精品动漫 | 亚洲 欧美 清纯 校园 另类 | 色噜噜亚洲男人的天堂www | 国产在线观看福利片 | 极品妖艳许清赵丽全文免费阅读 | 无码一区二区三区视频 | 国产精品va在线观看无 | 免费看h片的网站 | 久久久免费热线精品频 | 国产成人黄网在线免 | 高清日韩在线 | 欧美草比视频 | 免费网址在线观看入口推荐 | 黑人巨荃大战乌克兰美女 | 岛国不卡 | 久久se精品一区二区国产 |