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

使用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之后,我們還需要了解一些背景知識,以便我們更好的進(jìn)行這個過程。

背景知識-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 進(jìn)行了封裝,形成了一套新的 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ù)邏輯復(fù)雜的應(yīng)用場景。

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

Servlet 是一種規(guī)范

嚴(yán)格來說,Servlet 只是一套 Java Web 開發(fā)的規(guī)范,或者說是一套 Java Web 開發(fā)的技術(shù)標(biāo)準(zhǔn)。只有規(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ǔ)上做了進(jìn)一步封裝。

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

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

學(xué)習(xí)順序:

  • 學(xué)習(xí) Servlet 的正確順序是:Java --> Servlet。
  • 學(xué)習(xí) JSP 的正確順序是:Java --> Servlet --> JSP。

Web 容器

我們知道,Servlet 是基于 Java 語言的,運行 Servlet 必然少不了 JRE 的支持,它負(fù)責(zé)解析和執(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 類,當(dāng)用戶請求到達(dá)時,Servlet 容器會根據(jù)配置文件(web.xml)來決定調(diào)用哪個類。

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

HTTP請求流程

您看,Web 服務(wù)器是整個動態(tài)網(wǎng)站的“大門”,用戶的 HTTP 請求首先到達(dá) Web 服務(wù)器,Web 服務(wù)器判斷該請求是靜態(tài)資源還是動態(tài)資源:如果是靜態(tài)資源就直接返回,此時相當(dāng)于用戶下載了一個服務(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é)果進(jìn)行封裝,以 HTTP 響應(yīng)的形式發(fā)送給最終的用戶。

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

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

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

HTTP 請求流程

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

總結(jié)

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

  • 實現(xiàn) Servlet 規(guī)范定義的各種接口和類,為 Servlet 的運行提供底層支持;
  • 管理用戶編寫的 Servlet 類,以及實例化以后的對象;
  • 提供 HTTP 服務(wù),相當(dāng)于一個簡化的服務(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 下各個目錄進(jìn)行了介紹。

 

目錄描述是否必需
\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

先看一下默認(rèn)建好的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.進(jìn)行項目目錄結(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é)碼文件的路徑進(jìn)行一下更改。

點擊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中存在,因此我們需要將這個包添加進(jìn)來。

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進(jìn)行設(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)文章

  • 詳解MyBatis多數(shù)據(jù)源配置(讀寫分離)

    詳解MyBatis多數(shù)據(jù)源配置(讀寫分離)

    這篇文章主要介紹了詳解MyBatis多數(shù)據(jù)源配置(讀寫分離),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • elasticsearch數(shù)據(jù)信息索引操作action?support示例分析

    elasticsearch數(shù)據(jù)信息索引操作action?support示例分析

    這篇文章主要為大家介紹了elasticsearch數(shù)據(jù)信息索引操作action?support示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • SpringBoot用@Async注解實現(xiàn)異步任務(wù)

    SpringBoot用@Async注解實現(xiàn)異步任務(wù)

    這篇文章主要介紹了SpringBoot用@Async注解實現(xiàn)異步任務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java private關(guān)鍵字用法實例

    java private關(guān)鍵字用法實例

    這篇文章主要介紹了java private關(guān)鍵字用法實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java集合包中的fail fast機制詳解

    Java集合包中的fail fast機制詳解

    這篇文章主要介紹了Java集合包中的fail fast機制詳解,當(dāng)我們使用iterator迭代器遍歷一個集合的過程中,如果其它線程,或者它自己向這個集合新增或刪除了一個key-value,那么當(dāng)前線程就會拋出ConcurrentModificationException異常,需要的朋友可以參考下
    2023-12-12
  • Java連接六類數(shù)據(jù)庫技巧全攻略

    Java連接六類數(shù)據(jù)庫技巧全攻略

    本文主要為大家介紹了Java與Oracle、DB2、Sql Server、Sybase、MySQL、PostgreSQL等數(shù)據(jù)庫連接的方法。
    2015-09-09
  • java并發(fā)容器ConcurrentHashMap深入分析

    java并發(fā)容器ConcurrentHashMap深入分析

    這篇文章主要為大家介紹了java并發(fā)容器ConcurrentHashMap使用示例及深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 大話Java混合運算規(guī)則

    大話Java混合運算規(guī)則

    這篇文章主要介紹了大話Java混合運算規(guī)則,小編覺得挺不錯的,在這里分享給大家,需要的朋友可以了解下。
    2017-10-10
  • 一文解決pom.xml報錯Dependency "xxx" not found的問題

    一文解決pom.xml報錯Dependency "xxx" not f

    我們在使用maven進(jìn)行jar包管理時有時會遇到pom.xml中報錯Dependency “XXX” not found,所以在本文中將給大家介紹一下pom.xml報錯Dependency "xxx" not found的解決方案,需要的朋友可以參考下
    2024-01-01
  • Java中的泛型方法詳解及簡單實例

    Java中的泛型方法詳解及簡單實例

    這篇文章主要介紹了Java中的泛型方法詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12

最新評論