欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年07月08日 11:50:36   作者:進擊的李同學(xué)  
現(xiàn)在作為一個Java程序員,我們已經(jīng)習(xí)慣了使用IDE和Web框架進行開發(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ù)的浪潮來臨時,把握機會,而不是去追逐一個又一個的泡沫。

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

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

  如果程序一直都處于正常運行的狀態(tài),不了解底層其實并沒有什么問題,但是如果程序一旦出現(xiàn)了預(yù)期之外的異常,那么如果我們不懂底層,就沒有辦法準確的定位問題。
所以今天要和大家分享的是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)境下運行的腳本文件。
  • /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ǔ)上,進一步封裝了Http的特性,相對GenericServlet而言使用簡單,我們只需要重寫doGet和doPost方法即可。所以這里我們使用HttpServlet。(這里我們是使用記事本編寫的,如果你是使用ide,請引入javax.servlet包,因為這個包不在jdk的標準開發(fā)包中,方法可以參考:http://www.dbjr.com.cn/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的默認端口是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://www.dbjr.com.cn/article/216973.htm,里面有具體的解決辦法)

讀取日志

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

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

catalina.out
  catalina.out是Tomcat的標準輸出和錯誤輸出,在這個日志里我們可以看到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)文章

  • 解決Maven項目加載spring bean的配置xml文件會提示找不到問題

    解決Maven項目加載spring bean的配置xml文件會提示找不到問題

    這篇文章主要介紹了解決Maven項目加載spring bean的配置xml文件會提示找不到問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring Boot 如何整合連接池

    Spring Boot 如何整合連接池

    這篇文章主要介紹了Spring Boot 如何整合連接池,幫助大家更好的理解和學(xué)習(xí)spring boot框架,感興趣的朋友可以了解下
    2020-11-11
  • Java中的WeakHashMap淺析

    Java中的WeakHashMap淺析

    這篇文章主要介紹了Java中的WeakHashMap淺析,weakhashmap關(guān)鍵是:當(dāng)一個對象被GC回收時,響應(yīng)的值對象的引用從map中刪除,weakhashmap能節(jié)約存儲空間,來實現(xiàn)緩存那些非必要的數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • 關(guān)于MyBatis結(jié)果映射的實例總結(jié)

    關(guān)于MyBatis結(jié)果映射的實例總結(jié)

    結(jié)果集映射主要是為了解決屬性名和類型名不一致的問題,下面這篇文章主要給大家介紹了關(guān)于MyBatis結(jié)果映射的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Java函數(shù)式編程(三):列表的轉(zhuǎn)化

    Java函數(shù)式編程(三):列表的轉(zhuǎn)化

    這篇文章主要介紹了Java函數(shù)式編程(二):列表的轉(zhuǎn)化,lambda表達式不僅能幫助我們遍歷集合,并且可以進行集合的轉(zhuǎn)化,需要的朋友可以參考下
    2014-09-09
  • Mybatis分頁的實現(xiàn)及使用注解開發(fā)操作

    Mybatis分頁的實現(xiàn)及使用注解開發(fā)操作

    這篇文章主要介紹了Mybatis分頁的實現(xiàn)及使用注解開發(fā)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 全面理解Java中的引用傳遞和值傳遞

    全面理解Java中的引用傳遞和值傳遞

    這篇文章主要介紹了全面理解Java中的引用傳遞和值傳遞,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解決Hibernate4執(zhí)行save()或update()無效問題的方法

    解決Hibernate4執(zhí)行save()或update()無效問題的方法

    這篇文章主要為大家詳細介紹了解決Hibernate4執(zhí)行save()或update()無效問題的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • java中線程掛起的幾種方式詳解

    java中線程掛起的幾種方式詳解

    這篇文章主要介紹了java中線程掛起的幾種方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法

    java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法

    這篇文章主要介紹了java ReadWriteLock的用法,文中講解非常詳細,示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論