自从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动态网站项目。
小插曲: 添加Tomcat服务器
在弹出来的新建项目对话框中,如果你的Target runtime
一项为<None>
,需要先点击旁边的New Runtime,以添加我们的Tomcat。
展开Apache
一项,选择和你下载Tomcat版本号一致的运行时,这里我们选的是Apache Tomcat v10.0
。
点击下一步,第一行名称我们可以不管,重点是第二行,我们需要在指定我们先前下载的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。
弹出来的小窗口,我们指定新Servlet的类名,这里我写的是MyFirstServlet
。同时请务必注意,在下面的祖先类一栏,我们应该选择/填写jakarta.servlet.http.HttpServlet
。
点击确定,就会为我们创建出正确的Servlet类了。
MyFirstServlet.java1 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;
public class MyFirstServlet extends HttpServlet { private static final long serialVersionUID = 1L;
public MyFirstServlet() { super(); }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("Served at: ").append(request.getContextPath()); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
}
|
可以展开观察一下顶部的import
语句,确保使用了jakarta
命名空间而非javax
命名空间。我曾经有同学在初学Java Web时,因为这个原因,调试了一个多小时没找到原因。最后发来源代码一看,正是在Tomcat 10上,运行着javax.*
的代码,IDE也没有成功给出错误提示。
同时,Eclipse还会为我们添加Servlet到web.xml
里。
web.xml1 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.java1 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;
@WebServlet(name = "MyFirstServlet", value = "First") public class MyFirstServlet extends HttpServlet {
}
|
测试运行
点击运行,首次运行会提示需要配置Tomcat服务器,只需要展开Apache
项目,选择先前添加的对应Tomcat,其他问题Eclipse会帮我们解决。
在浏览器中访问地址。注意路径要和web.xml
或者注解中匹配噢。
剩下的具体开发问题,不在本文讨论范围,我们下次再讨论。