在Java EE(现称Jakarta EE)的发展历程中,Servlet技术作为Web应用的重要组成部分,一直在不断演进。最初的Servlet API属于Java EE的一部分,命名为javax.servlet
。随着Java EE迁移到Eclipse Foundation并更名为Jakarta EE,Servlet API也随之改名为jakarta.servlet
。这种变化反映了Java EE从Oracle公司转移到开源社区的进程。
javax.servlet与jakarta.servlet的关系
-
历史沿革:
javax.servlet
是Servlet API在Java EE初期的命名空间。当Java EE变成Jakarta EE时,根据新的命名规则,所有原有的javax
命名空间都需要迁移到jakarta
,这其中也包括了Servlet API。因此,javax.servlet
和jakarta.servlet
实际上是同一API的不同版本。 -
API兼容性:在大多数情况下,
jakarta.servlet
在功能上与javax.servlet
保持兼容,除了命名空间的变化。在从javax.servlet
迁移到jakarta.servlet
的过程中,同时也引入了一些新增特性和优化。 -
迁移方式:开发者在迁移现有应用时,需要将所有涉及到
javax.servlet
的导入语句替换为jakarta.servlet
,同时更新相关的库依赖。
使用Tomcat部署Jakarta Servlet 示例
接下来,我们将通过一个简单的示例来展示如何开发和部署一个使用Jakarta Servlet的Web应用。假设我们创建一个简单的Hello World应用。
1. 创建项目
使用Maven创建一个新的动态Web项目,命名为HelloJakartaServlet
,其结构如下:
HelloJakartaServlet
│
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── HelloServlet.java
│ └── webapp
│ └── WEB-INF
│ └── web.xml
2. 编写pom.xml
在pom.xml
中添加Servlet API的依赖(以Jakarta EE 9为例):
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>HelloJakartaServlet</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
3. 创建HelloServlet.java
在src/main/java/com/example/HelloServlet.java
中实现Servlet代码:
package com.example;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<h1>Hello, Jakarta Servlet!</h1>");
}
}
4. 配置web.xml
在src/main/webapp/WEB-INF/web.xml
中进行Servlet配置:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
5. 部署到Tomcat
- 使用
mvn clean package
命令打包项目,生成WAR文件。 - 将生成的WAR文件放入Tomcat的
webapps
目录中。 - 启动Tomcat,并访问
http://localhost:8080/HelloJakartaServlet/hello
。
如果一切顺利,浏览器将显示“Hello, Jakarta Servlet!”的页面。
总结
javax.servlet
和jakarta.servlet
是Servlet技术发展的两个重要阶段,了解它们之间的关系和迁移方式对Java Web开发者而言至关重要。在实际项目中,及时跟进API的更新和变更,有助于保持项目的现代性与兼容性。通过上述示例,我们展示了如何使用Jakarta Servlet搭建一个简单的Web应用,并部署到Tomcat服务器上。