使用eclipse创建Jakarta EE Web项目

自从Eclipse基金会将Java EE转到Jakarta EE后,一些软件包的名称就发生了变化。而最新版的Tomcat 10,也将jakarta作为默认的命名空间。因此,从未来的角度考虑,我们新建Java Web项目的时候,就应该使用jakarta而不是javax了。

在IDEA里边,选用哪个命名空间,有一个选项可以直接切换。而如果使用的是开源的IDE Eclipse JEE版本,情况可能会让新手摸不着头脑。为了避免日后再次踩坑,这里记录一下,如何使用Eclipse jee新建一个web项目,并使用jakarta命名空间以兼容Tomcat 10或以上版本。

开发工具平台

上述两个工具下载好后解压即可使用。

开始我们的第一个项目

我们首先创建一个Eclipse的工作区。不用担心,工作区就是个文件夹,用来存储你的项目。找个你觉得合适的地方,新建个文件夹就可以了。这里,我们的工作区名为JakartaProjects_2021

接着,我们点击左上角的File->New->Dynamic Web Project,创建一个Java Web动态网站项目。

Eclipse主界面

小插曲: 添加Tomcat服务器

在弹出来的新建项目对话框中,如果你的Target runtime一项为<None>,需要先点击旁边的New Runtime,以添加我们的Tomcat。

添加Tomcat运行时

展开Apache一项,选择和你下载Tomcat版本号一致的运行时,这里我们选的是Apache Tomcat v10.0

选择Tomcat版本号

点击下一步,第一行名称我们可以不管,重点是第二行,我们需要在指定我们先前下载的Tomcat解压后的目录。

指定Tomcat解压路径

点击Finish,Tomcat就添加好了。

接下来,填写项目名称,项目路径,Tomcat运行时等。注意,为了使用Jakarta规范,Dynamic web module version一项应该大于等于5.0.

如果在后面的流程中,新建的文件莫名其妙地只有javax而没有jakarta可以再次确认是否在本步骤中误选Dynamic web module version一项为4.0或者更低版本号。

创建动态网页项目

点击确定,让Eclipse为我们创建好项目。

这样一来,初始项目就创建好了。

刚刚新建的项目结构

编写第一个Servlet

从简单入手,我们从编写第一个Servlet开始。首先,我们在src/main/java上,右键单击,新建一个包,名字可以由你自己决定。这里我就选择了com.test.servlet作为包名。

接着,在新建的包上,右键单击,新建一个Servlet。

在package中新建Servlet

弹出来的小窗口,我们指定新Servlet的类名,这里我写的是MyFirstServlet同时请务必注意,在下面的祖先类一栏,我们应该选择/填写jakarta.servlet.http.HttpServlet

新建Servlet类对话框

点击确定,就会为我们创建出正确的Servlet类了。

MyFirstServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.test.servlet;

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

/**
* Servlet implementation class MyFirstServlet
*/
public class MyFirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public MyFirstServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

}

可以展开观察一下顶部的import语句,确保使用了jakarta命名空间而非javax命名空间。我曾经有同学在初学Java Web时,因为这个原因,调试了一个多小时没找到原因。最后发来源代码一看,正是在Tomcat 10上,运行着javax.*的代码,IDE也没有成功给出错误提示。

同时,Eclipse还会为我们添加Servlet到web.xml里。

web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="5.0">
<display-name>MyJakartaWeb1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>MyFirstServlet</display-name>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>com.test.servlet.MyFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/MyFirst</url-pattern>
</servlet-mapping>
</web-app>

也可以在MyFirstServlet类开头,使用注解的方式添加虚拟路径。

MyFirstServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.test.servlet;

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

import jakarta.servlet.annotation.WebServlet;

/**
* Servlet implementation class MyFirstServlet
*/
@WebServlet(name = "MyFirstServlet", value = "First")
public class MyFirstServlet extends HttpServlet {
/**
Other Codes
*/
}

测试运行

点击运行,首次运行会提示需要配置Tomcat服务器,只需要展开Apache项目,选择先前添加的对应Tomcat,其他问题Eclipse会帮我们解决。

添加Tomcat服务器

在浏览器中访问地址。注意路径要和web.xml或者注解中匹配噢。

访问Servlet

剩下的具体开发问题,不在本文讨论范围,我们下次再讨论。