本篇說明如何在 Linux 下使用 Gradle 新增 Servlet 專案,然後使用 VSCode 與之連線。雖然也可使用 Maven 建立專案,但 Gradle 更為靈活方便,且是目前最新的技術,所以建議以此為主。
VSCode Extension
VSCode 需安裝如下 Extension
Extension Pack for Java Gradle for Java Language Support for Java (RedHat)
安裝 Gradle
Linux 下需先安裝套件
sudo snap install gradle --classic
建立專案
使用如下指令建立 JavaWeb 專案目錄,然後進行 gradle 初始化。
cd /server mkdir JavaWeb cd JavaWeb gradle init
type : Basic。如果使用 Application 則會把程式碼放在專案下的 app 目錄,反而比較麻煩。
專案名稱 : Enter
DSL : Groovy
Generae build using new APIs and behavior : no
build.gradle
專案下的 build.gradle 設定如下
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'war'
repositories {
mavenCentral()
}
dependencies {
compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:11.0.0'
testImplementation 'junit:junit:4.13'
implementation 'com.mysql:mysql-connector-j:8.4.0'
compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0'
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.2'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'
implementation 'net.coobird:thumbnailator:0.4.21'
}
task explodedWar(type: Copy) {
dependsOn war
from(zipTree(war.archiveFile))
//into("$buildDir/exploded")
into("exploded")
}
build.finalizedBy(explodedWar)
上述的 task expoldedWar 是解壓縮 .war 的指令,目的地為專案下的 exploded 目錄。
專案路徑
請於專案下依序新增 src/main/java 及 src/main/webapp 二個目錄。
模板
將模板置於 src/main/webapp 之下。
自訂 sdk
我們自行撰寫的 sdk 需置於 src/main/java 之下。
發佈
請於專案下執行如下指令,發佈後的結果位於專案下的 exploded 目錄。
gradle clean build
Tomcat 網頁根目錄
開啟 /opt/tomcat/conf/server.xml,將 docBase 設成如下
<Context path="/" docBase="/server/JavaWeb/exploded" debug="0" reloadable="true"/>
然後重啟 Tomcat
sudo systemctl restart tomcat
新增首頁 Servlet
於 java 目錄下新增 home 目錄,然後新增 views.java,內容如下
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";
}
}
VSCode jakarta 錯誤
如果在 VS Code 出現 Jakarta 錯誤,請按下 Shift+Ctrl+p,然後選擇如下指令,reload gradle
Java: Clean Java Language Server Workspace
