Maven 專案

      在〈Maven 專案〉中尚無留言

本篇說明如何在 Linux 上使用 Maven 建立 Servlet 專案,然後使用 VS Code 與之連線。

Linux 安裝套件

todo

sudo apt install maven

 建立專案

Ctrl+Shift+p 選擇 Remote-SSH: Connect to Host,指定網址。

將專案建立在遠端 /server 目錄之下,專案名稱為 JavaWeb

cd /server

mvn archetype:generate \
-DgroupId=com.example \
-DartifactId=JavaWeb \
-DarchetypeArtifactId=maven-archetype-webapp \
-DinteractiveMode=false

以上 -DgroupId 一定要寫

pom.xml

pom.xml 設定成如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.ddns.mahalrtc</groupId>
  <artifactId>JavaWeb</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>JavaWeb Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jakartaee>11.0.0-M1</jakartaee>
  </properties>

  <dependencies>
    <!-- Servlet API -->
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>${jakartaee}</version>
        <scope>provided</scope>
    </dependency>
    
    <!-- JSTL API -->
    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
        <version>3.0.2</version>
    </dependency>
    <!-- JSTL Implementation -->
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jakarta.servlet.jsp.jstl</artifactId>
        <version>3.0.1</version>
    </dependency>

    <!-- MySQL -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.4.0</version>
    </dependency>

    <!-- Thumbnailator -->
    <dependency>
        <groupId>net.coobird</groupId>
        <artifactId>thumbnailator</artifactId>
        <version>0.4.21</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>JavaWeb</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.12.1</version>
            <configuration>
                <source>17</source>
                <target>17</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.4.0</version>
        </plugin>
    </plugins>    
  </build>
</project>

todo

發佈

使用如下指令發佈網站

mvn clean package

發佈的目標預設在專案下的 target/JavaWeb

發佈到指定的目錄

指定發佈目錄其實沒什麼必要,但如果真的要修改,請開啟專案下的 pom.xml,在 <build> 裏新增 <directory>,如下所示

<build>
<directory>/server/tomcat</directory>
<finalName>Tomcat</finalName?
</build>

<directory> : 指定編譯打包輸出路徑
<finalName> : 指定生成的檔名(如 my-app.war、my-app.jar),

執行 mvn clean package,即會發佈到 /server/tomcat/Tomcat 之下。

Tomcat docBase

開啟 /opt/tomcat/conf/server.xml,將 docBase 改成如下

<Context path="/" docBase="/server/JavaWeb/target/JavaWeb" debug="0" reloadable="true" />

記得要重新啟動 Tomcat

sudo systemctl restart tomcat

輸入 https://xxx.ddns.net/index.jsp 即可看到網頁

JSTL

maven 編譯時,預設會把 jsp 的 JSTL 關閉,所以在 jsp 檔案的最開頭需把 isELIgnored 設為 false。

<%@ page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

todo

新增首頁 Servlet

在 src/main/ 裏新增 java 目錄,然後在 java 下新增 home,然後在 home按右錄/New Java File/Class

package home;

import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet(name = "index", urlPatterns = {"/index"})
public class views extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.getRequestDispatcher("/template/home/index.jsp").forward(request, response);
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *