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

使用IDEA創(chuàng)建servlet?JavaWeb?應(yīng)用及使用Tomcat本地部署的實現(xiàn)

 更新時間:2022年01月17日 09:17:34   作者:小熊coder  
本文主要介紹了使用IDEA創(chuàng)建servlet?JavaWeb?應(yīng)用及使用Tomcat本地部署

記錄一下使用IDEA創(chuàng)建servlet并使用Tomcat本地部署的過程。

需要安裝好的軟件

首先IDEA社區(qū)版不支持Java EE,因此要使用Ultimate版本。

Tomcat版本是Tomcat9。Tomcat教程地址:Tomcat下載和安裝(圖解)

在安裝好IDEA Ultimate版本和Tomcat9之后,我們還需要了解一些背景知識,以便我們更好的進行這個過程。

背景知識-Servlet是什么?

Servlet 是 Server Applet 的縮寫,譯為“服務(wù)器端小程序”,是一種使用 Java 語言來開發(fā)動態(tài)網(wǎng)站的技術(shù)。

Servlet 雖然被稱作“小程序”,但是它的功能卻異常強大,因為它是基于 Java 的,幾乎可以使用所有的 Java API,Java 能做的事情,Servlet 也能做。

Java 是一種功能強大的通用型編程語言,可以處理 HTTP 請求,可以訪問數(shù)據(jù)庫,可以生成 HTML 代碼,您完全可以使用原生 Java 來開發(fā)動態(tài)網(wǎng)站。但是,使用原生 Java 開發(fā)動態(tài)網(wǎng)站非常麻煩,需要自己解析 HTTP 請求的報頭,需要自己分析用戶的請求參數(shù),需要自己加載數(shù)據(jù)庫組件……種種原因?qū)е率褂迷?Java 開發(fā)動態(tài)網(wǎng)站幾乎是一件不能被接受的事情。正是基于這種原因,Java 官方后來推出了 Servlet 技術(shù),它對開發(fā)動態(tài)網(wǎng)站需要使用的原生 Java API 進行了封裝,形成了一套新的 API,稱為 Servlet API。

使用 Servlet 開發(fā)動態(tài)網(wǎng)站非常方便,程序員只需要集中精力處理業(yè)務(wù)邏輯,不需要再為那些基礎(chǔ)性的、通用性的功能編寫代碼,這使得 Servlet 在動態(tài)網(wǎng)站開發(fā)領(lǐng)域具備了很高的實用性。

Servlet 基于 Java,可以使用幾乎全部的 Java API,所以它的功能異常強大,完全可以勝任企業(yè)級開發(fā),能夠處理那些高并發(fā)、大吞吐量、業(yè)務(wù)邏輯復雜的應(yīng)用場景。

您可以這樣理解,Servlet 是 Sun 公司推出的一種基于 Java 的動態(tài)網(wǎng)站開發(fā)技術(shù)。編寫 Servlet 代碼需要遵循 Java 語法,一個 Servlet 程序其實就是一個按照 Servlet 規(guī)范編寫的 Java 類。Servlet 程序需要先編譯成字節(jié)碼文件(.class文件),然后再部署到服務(wù)器運行。

Servlet 是一種規(guī)范

嚴格來說,Servlet 只是一套 Java Web 開發(fā)的規(guī)范,或者說是一套 Java Web 開發(fā)的技術(shù)標準。只有規(guī)范并不能做任何事情,必須要有人去實現(xiàn)它。所謂實現(xiàn) Servlet 規(guī)范,就是真正編寫代碼去實現(xiàn) Servlet 規(guī)范提到的各種功能,包括類、方法、屬性等。

Servlet 規(guī)范是開放的,除了 Sun 公司,其它公司也可以實現(xiàn) Servlet 規(guī)范,目前常見的實現(xiàn)了 Servlet 規(guī)范的產(chǎn)品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它們都被稱為“Servlet 容器”。Servlet 容器用來管理程序員編寫的 Servlet 類。

Servlet 接口

所有的 Servlet 功能都是通過一個名為Servlet的接口(Interface)向外暴露的,編寫 Servlet 代碼,可以從實現(xiàn) Servlet 接口開始,就像下面這樣:

public class ServletDemo implements Servlet { //TODO:}

直接實現(xiàn) Servlet 接口比較麻煩,需要實現(xiàn)很多方法,所以 Servlet 規(guī)范又提供了兩個抽象類,分別是 GenericServlet 類和 HttpServlet 類,它們都實現(xiàn)了 Servlet 接口的很多常用功能。和 GenericServlet 類相比,HttpServlet 類更加方便,所以實際開發(fā)中一般都繼承自 HttpServlet 類。

JSP

Servlet 是第一代 Java Web 開發(fā)技術(shù),它將 HTML 代碼以字符串的形式向外輸出,編寫 HTML 文檔就是在拼接字符串,非常麻煩,所以 Java 官方又推出了第二代 Web 開發(fā)技術(shù)——JSP。

JSP 才是現(xiàn)代化的 Web 開發(fā)技術(shù),它允許 HTML 代碼和 JSP 代碼分離,讓程序員能夠在 HTML 文檔中直接嵌入 JSP 代碼。

現(xiàn)在沒有人直接使用 Servlet 開發(fā)動態(tài)網(wǎng)站,大家都轉(zhuǎn)向了 JSP 陣營。但是 JSP 依賴于 Servlet,用戶訪問 JSP 頁面時,JSP 代碼會被翻譯成 Servlet 代碼,最終,HTML 代碼還是以字符串的形式向外輸出的。您看,JSP 只是在 Servlet 的基礎(chǔ)上做了進一步封裝。

JSP 代碼可以調(diào)用 Servlet 類,程序員可以將部分功能在 Servlet 中實現(xiàn),然后在 JSP 中調(diào)用即可。

總之,Servlet 是 JSP 的基礎(chǔ),Servlet 雖然不直接面向用戶,但是它依然是 JSP 的后臺支撐,想玩轉(zhuǎn) JSP,必須先玩轉(zhuǎn) Servlet。

學習順序:

  • 學習 Servlet 的正確順序是:Java --> Servlet。
  • 學習 JSP 的正確順序是:Java --> Servlet --> JSP。

Web 容器

我們知道,Servlet 是基于 Java 語言的,運行 Servlet 必然少不了 JRE 的支持,它負責解析和執(zhí)行字節(jié)碼文件(.class文件)。然而 JRE 只包含了 Java 虛擬機(JVM)、Java 核心類庫和一些輔助性性文件,它并不支持 Servlet 規(guī)范。要想運行 Servlet 代碼,還需要一種額外的部件,該部件必須支持 Servlet 規(guī)范,實現(xiàn)了 Servlet 接口和一些基礎(chǔ)類,這種部件就是 Servlet 容器。

Servlet 容器就是 Servlet 代碼的運行環(huán)境(運行時),它除了實現(xiàn) Servlet 規(guī)范定義的各種接口和類,為 Servlet 的運行提供底層支持,還需要管理由用戶編寫的 Servlet 類,比如實例化類(創(chuàng)建對象)、調(diào)用方法、銷毀類等。

Servlet 中的容器和生活中的容器是類似的概念:生活中容器用來裝水、裝糧食,Servlet 中的容器用來裝類,裝對象。

讀者可能會提出疑問,我們自己編寫的 Servlet 類為什么需要 Servlet 容器來管理呢?這是因為我們編寫的 Servlet 類沒有 main() 函數(shù),不能獨立運行,只能作為一個模塊被載入到 Servlet 容器,然后由 Servlet 容器來實例化,并調(diào)用其中的方法。

一個動態(tài)頁面對應(yīng)一個 Servlet 類,開發(fā)一個動態(tài)頁面就是編寫一個 Servlet 類,當用戶請求到達時,Servlet 容器會根據(jù)配置文件(web.xml)來決定調(diào)用哪個類。

下圖演示了 Servlet 容器在整個 HTTP 請求流程中的位置:

HTTP請求流程

您看,Web 服務(wù)器是整個動態(tài)網(wǎng)站的“大門”,用戶的 HTTP 請求首先到達 Web 服務(wù)器,Web 服務(wù)器判斷該請求是靜態(tài)資源還是動態(tài)資源:如果是靜態(tài)資源就直接返回,此時相當于用戶下載了一個服務(wù)器上的文件;如果是動態(tài)資源將無法處理,必須將該請求轉(zhuǎn)發(fā)給 Servlet 容器。

Servlet 容器接收到請求以后,會根據(jù)配置文件(web.xml)找到對應(yīng)的 Servlet 類,將它加載并實例化,然后調(diào)用其中的方法來處理用戶請求;處理結(jié)束后,Servlet 容器將處理結(jié)果再轉(zhuǎn)交給 Web 服務(wù)器,由 Web 服務(wù)器將處理結(jié)果進行封裝,以 HTTP 響應(yīng)的形式發(fā)送給最終的用戶。

常用的 Web 容器有 Tomcat、Jboss、Jetty、WebLogic 等,其中 Tomcat 由 Java 官方提供,是初學者最常使用的。

為了簡化部署流程,Web 容器往往也會自帶 Web 服務(wù)器模塊,提供基本的 HTTP 服務(wù),所以您可以不用再安裝 Apache、IIS、Nginx 等傳統(tǒng)意義上的服務(wù)器,只需要安裝一款 Web 容器,就能部署 Servlet 網(wǎng)站了。正是由于這個原因,有的教材將 Tomcat 稱為 Web 容器,有的教材又將 Tomcat 稱為 Web 服務(wù)器,兩者的概念已經(jīng)非常模糊了。

將 Web 容器當做服務(wù)器使用后,上面的流程圖就變成了下面的樣子:

HTTP 請求流程

注意,Servlet 容器自帶的 Web 服務(wù)器模塊雖然沒有傳統(tǒng)的 Web 服務(wù)器強大,但是也足以應(yīng)付大部分開發(fā)場景,對初學者來說是足夠的。當然,您也可以將傳統(tǒng)的 Web 服務(wù)器和 Servlet 容器組合起來,兩者分工協(xié)作,各司其職,共同完成 HTTP 請求。

總結(jié)

Servlet 容器就是 Servlet 程序的運行環(huán)境,它主要包含以下幾個功能:

  • 實現(xiàn) Servlet 規(guī)范定義的各種接口和類,為 Servlet 的運行提供底層支持;
  • 管理用戶編寫的 Servlet 類,以及實例化以后的對象;
  • 提供 HTTP 服務(wù),相當于一個簡化的服務(wù)器。

背景知識-JavaWeb應(yīng)用的目錄結(jié)構(gòu)

JavaWeb 應(yīng)用由一組 Servlet/JSP、HTML 文件、相關(guān) Java 類、以及其他的資源組成,它可以在由各種供應(yīng)商提供的 Servlet 容器中運行。由 JavaWeb 應(yīng)用的定義可知, Servlet 是 JavaWeb 應(yīng)用的一個組件。

為了讓 Servlet 容器順利地找到 JavaWeb 應(yīng)用的各個組件,Servlet 規(guī)范規(guī)定,JavaWeb 應(yīng)用必須采用固定的目錄結(jié)構(gòu),即每種組件在 JavaWeb 應(yīng)用中都有固定的存放目錄。

以 Tomcat 為例,通常將 JavaWeb 應(yīng)用存放到 Tomcat 的 webapps 目錄下。在 webapps 下,每一個子目錄都是一個獨立的 Web 應(yīng)用,子目錄的名字就是 Web 應(yīng)用的名字,也被稱為 Web 應(yīng)用的上下文根。用戶可以通過這個上下文根來訪問 JavaWeb 應(yīng)用中的資源。

webapps 的目錄結(jié)構(gòu)如下圖。

JavaWeb 結(jié)構(gòu)圖

下表中對 webapps 下各個目錄進行了介紹。

 

目錄描述是否必需
\servletDemoWeb 應(yīng)用的根目錄,屬于該 Web 應(yīng)用的所有資源都存放在這個目錄下。
\servletDemo\WEB-INF存放 web.xml、lib 目錄以及 classes 目錄等。
\servletDemo\WEB-INF\classes存放各種 .class 文件或者包含 .class 文件的目錄,Servlet 類的 .class 文件也存放在此。
\servletDemo\WEB-INF\lib存放應(yīng)用所需的各種 jar 包,例如 JDBC 驅(qū)動程序的 jar 包。
\servletDemo\WEB-INF\web.xmlweb.xml 中包含應(yīng)用程序的配置和部署信息。

下面我們一步一步開始這個過程:

1.新建一個java項目

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112160858255.png

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112160950817.png

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112161135332.png

先看一下默認建好的java項目的目錄結(jié)構(gòu):

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112161220492.png

2.將普通java項目轉(zhuǎn)換成JavaWeb項目

通過背景知識JavaWeb應(yīng)用的目錄結(jié)構(gòu),我們可以知道普通Java項目的目錄結(jié)構(gòu)和JavaWeb項目的目錄結(jié)構(gòu)差別是很大的,因此我們需要將普通項目轉(zhuǎn)成JavaWeb項目。

在項目名上右鍵,選擇 Add Framework Support

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112161551226.png

勾選Web Application

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112161650144.png

此時,我們可以看到項目的目錄結(jié)構(gòu)變成了如下所示情況

image-20220112161803477

可以看到,和之前JavaWeb應(yīng)用的目錄結(jié)構(gòu)已經(jīng)差不多了,但是在目錄WEB-INF下,還缺少兩個目錄classes和lib,我們自己新建一下這兩個目錄即可。

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112162115120.png

新建好之后,項目目錄結(jié)構(gòu)如下圖所示:

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112162155736.png

3.進行項目目錄結(jié)構(gòu)的設(shè)置

我們知道JavaWeb應(yīng)用的目錄結(jié)構(gòu)中:

\servletDemo\WEB-INF\classes目錄存放各種 .class 文件或者包含 .class 文件的目錄,Servlet 類的 .class 文件也存放在此。

\servletDemo\WEB-INF\lib目錄存放應(yīng)用所需的各種 jar 包,例如 JDBC 驅(qū)動程序的 jar 包。

因此我們要對編譯生成的字節(jié)碼文件的路徑進行一下更改。

點擊File-Project Structure

image-20220112163341718

將Modules中的Paths改成你項目中的classes目錄

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112163544140.png

繼續(xù),在Libraries中添加lib目錄

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112163733267.png

選擇 Jar Directory

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112163919526.png

4.引入Tomcat的jar包

此時我們想要新建一個servlet是新建不了的,因為JRE并沒有包含這個包,這個包在Tomcat中存在,因此我們需要將這個包添加進來。

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112165104096.png

右鍵項目名,選擇Open Module Settings

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112165231758.png

添加Tomcat安裝目錄下的servlet-api.jar包。

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112165642086.png

此時,我們新建文件即可發(fā)現(xiàn)servlet選項了!

在這里插入圖片描述

設(shè)置類名和包名

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112165927729.png

5.簡單寫一些代碼用來測試

此時我的Servlet.java文件內(nèi)容如下:

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用PrintWriter.write()方法向前臺頁面輸出內(nèi)容
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.write("good good study, learn to change");
        writer.close();
    }
    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用PrintWriter.write()方法gaifang向前臺頁面輸出內(nèi)容
        PrintWriter writer = resp.getWriter();
        writer.write("good good study, learn to change");
        writer.close();
        doGet(req, resp);
    }
}

6.設(shè)置Tomcat

因為我們是需要在IDEA中啟動Tomcat,并把我們的項目部署上去。因此我們需要對Tomcat進行設(shè)置。

點擊菜單欄上的Run-Edit Configuration

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112170457720.png

點擊加號

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112170602412.png

選擇Tomcat server中的Local

image-20220112170653350

配置一下Tomcat安裝目錄,然后系統(tǒng)會自動識別出Tomcat的版本。

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112170820316.png

點擊切換到Deployment下,點擊下面的加號,選擇Artifact。

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112170905313.png

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112170946201.png

https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20220112171036596.png

7.開啟Tomcat

設(shè)置好Tomcat信息之后,菜單欄右上側(cè)會出現(xiàn)如下按鈕。

image-20220112171532583

點擊綠色小三角,運行Tomcat。

在瀏覽器中輸入下面網(wǎng)址:http://localhost:8080/blog_war_exploded/Servlet

為什么是這個地址呢?

前面Tomcat設(shè)置時,我們設(shè)置了一個路徑/blog_war_exploded。Servlet是我們創(chuàng)建的類,因此通過這個地址就可以訪問到我們的網(wǎng)頁。

一切正常的話,我們可以看到如下畫面

在這里插入圖片描述

說明我們的servlet項目已經(jīng)成功部署在本地運行的Tomcat上。

總結(jié)

其實上面的一個過程,是我們將一個非常簡單的Servlet項目部署到Tomcat上,只是為了讓大家了解這樣一個過程,這樣后面只需要專注于項目的開發(fā)。

到此這篇關(guān)于使用IDEA創(chuàng)建servlet JavaWeb 應(yīng)用及使用Tomcat本地部署的實現(xiàn)的文章就介紹到這了,更多相關(guān)IDEA創(chuàng)建servlet JavaWeb 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)等待所有子線程結(jié)束后再執(zhí)行一段代碼的方法

    Java實現(xiàn)等待所有子線程結(jié)束后再執(zhí)行一段代碼的方法

    這篇文章主要介紹了Java實現(xiàn)等待所有子線程結(jié)束后再執(zhí)行一段代碼的方法,涉及java多線程的線程等待與執(zhí)行等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Spring?Web?MVC基礎(chǔ)理論概念

    Spring?Web?MVC基礎(chǔ)理論概念

    Spring?Web?MVC是基于Servlet?API構(gòu)建的原始Web框架,從?開始就包在Spring框架中,Spring?Web?MVC是一個Web框,本文給大家介紹Spring?Web?MVC基礎(chǔ)理論,感興趣的朋友一起看看吧
    2024-08-08
  • Eclipse設(shè)定文件的默認打開方式的具體操作步驟

    Eclipse設(shè)定文件的默認打開方式的具體操作步驟

    以下是對Eclipse設(shè)定文件的默認打開方式的具體操作步驟進行了詳細的介紹,需要的朋友可以過來參考下
    2013-08-08
  • Java 方法遞歸的思路詳解

    Java 方法遞歸的思路詳解

    程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用。但是如果沒終止條件會造成死循環(huán),所以遞歸代碼里要有結(jié)束自調(diào)自的條件,接下來講解一下學習遞歸的思路
    2022-04-04
  • java中treemap和treeset實現(xiàn)紅黑樹

    java中treemap和treeset實現(xiàn)紅黑樹

    這篇文章主要為大家詳細介紹了java中treemap和treeset實現(xiàn)紅黑樹,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 使用@Transactional 設(shè)置嵌套事務(wù)不回滾

    使用@Transactional 設(shè)置嵌套事務(wù)不回滾

    這篇文章主要介紹了使用@Transactional 設(shè)置嵌套事務(wù)不回滾問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot?配置文件總結(jié)

    SpringBoot?配置文件總結(jié)

    SpringBoot中提供一個全局的配置文件:application.properties,這個配置文件的作用就是,允許我們通過這個配置文件去修改Spring?Boot自動配置的默認值,本文詳細總結(jié)了SpringBoot配置文件,文中有詳細的代碼示例,感興趣的同學可以參考下
    2023-05-05
  • SpringBoot數(shù)據(jù)庫初始化datasource配置方式

    SpringBoot數(shù)據(jù)庫初始化datasource配置方式

    這篇文章主要為大家介紹了SpringBoot數(shù)據(jù)庫初始化datasource配置方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Java 泛型總結(jié)(二):泛型與數(shù)組

    Java 泛型總結(jié)(二):泛型與數(shù)組

    數(shù)組與泛型的關(guān)系還是有點復雜的,Java 中不允許直接創(chuàng)建泛型數(shù)組。本文分析了其中原因并且總結(jié)了一些創(chuàng)建泛型數(shù)組的方式。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • java實現(xiàn)文件分片上傳并且斷點續(xù)傳的示例代碼

    java實現(xiàn)文件分片上傳并且斷點續(xù)傳的示例代碼

    本文主要介紹了java實現(xiàn)文件分片上傳并且斷點續(xù)傳的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05

最新評論

右玉县| 彩票| 江孜县| 石林| 密山市| 佳木斯市| 都昌县| 罗源县| 德化县| 葫芦岛市| 镶黄旗| 玛曲县| 县级市| 英山县| 庄河市| 日喀则市| 远安县| 逊克县| 建水县| 雅安市| 泰州市| 八宿县| 平武县| 黄浦区| 苏尼特左旗| 南安市| 铜川市| 长丰县| 天祝| 广水市| 当雄县| 齐河县| 旬邑县| 深泽县| 岳西县| 卓尼县| 游戏| 宁化县| 岳池县| 古浪县| 海淀区|