最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年07月08日 11:50:36   作者:進(jìn)擊的李同學(xué)  
現(xiàn)在作為一個Java程序員,我們已經(jīng)習(xí)慣了使用IDE和Web框架進(jìn)行開發(fā),IDE幫助我們做了編譯、打包的工作。Spring框架則幫助我們實現(xiàn)了Servlet接口,并把Servlet容器注冊到了Web容器中。本文主要介紹了Servlet手工搭建,感興趣的可以了解一下

前言

在初學(xué)Java web的時候,就曾聽到過這樣一種說法:
java Web的演變過程大概可以分為4個階段:

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

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

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

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

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

手工搭建一個Servlet

下載Tomcat

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

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

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

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("開始處理get請求");
        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("開始處理post請求");
        PrintWriter writer = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        writer.println("<h1>hello Servlet</h1>");
    }
}

編譯程序

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

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

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

  接著我們需要創(chuàng)建一個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)容如下:

<?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的映射。

啟動Tomcat

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

sh startup.sh

  

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

hello Servlet

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

讀取日志

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

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

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

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

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

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("開始處理get請求");
        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("開始處理post請求");
        PrintWriter writer = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        writer.println("<h1>hello Servlet</h1>");
    }
}

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

然后我們需要重新編譯文件,并刪除原來的web.xml,重新啟動tomcat,驗證結(jié)果:

hello Servlet

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

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

相關(guān)文章

  • SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時丟失精度問題

    SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時丟失精度問題

    這篇文章主要介紹了SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時丟失精度問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java詳細(xì)分析String類與StringBuffer和StringBuilder的使用方法

    Java詳細(xì)分析String類與StringBuffer和StringBuilder的使用方法

    當(dāng)對字符串進(jìn)行修改的時候,需要使用 StringBuffer 和 StringBuilder類,和String類不同的是,StringBuffer和 StringBuilder類的對象能夠被多次的修改,并且不產(chǎn)生新的未使用對象
    2022-04-04
  • Java中hashMap遍歷的9種方式

    Java中hashMap遍歷的9種方式

    hashMap是非常重要的容器類,本文主要介紹了Java中hashMap遍歷的9種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • logback.xml動態(tài)配置程序路徑的操作

    logback.xml動態(tài)配置程序路徑的操作

    這篇文章主要介紹了logback.xml動態(tài)配置程序路徑的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot單元測試解讀

    SpringBoot單元測試解讀

    SpringBoot提供了基于JUnit5的測試工具,方便進(jìn)行測試,默認(rèn)導(dǎo)入相關(guān)依賴,創(chuàng)建測試類,使用斷言(Assertions類)進(jìn)行斷言操作,支持參數(shù)化測試
    2025-02-02
  • Java 實戰(zhàn)項目錘煉之仿天貓網(wǎng)上商城的實現(xiàn)流程

    Java 實戰(zhàn)項目錘煉之仿天貓網(wǎng)上商城的實現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+servlet+mysql+ajax實現(xiàn)一個仿天貓網(wǎng)上商城項目,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • 最新評論

    木里| 濉溪县| 河池市| 定州市| 金沙县| 彭州市| 建水县| 达日县| 白银市| 洪洞县| 清水河县| 曲麻莱县| 铜陵市| 营山县| 庆云县| 将乐县| 和林格尔县| 衡山县| 武夷山市| 澄城县| 沭阳县| 庆阳市| 京山县| 海南省| 拜泉县| 英山县| 哈密市| 金山区| 石家庄市| 瓦房店市| 铁力市| 茂名市| 承德县| 勐海县| 商水县| 蕲春县| 行唐县| 曲靖市| 交口县| 天门市| 同德县|