当前位置: 首页 > wzjs >正文

网站建设公司哪家好该如何选择网页设计成品网站

网站建设公司哪家好该如何选择,网页设计成品网站,2008建设网站,推广业务平台Servlet简单示例 文章说明 Servlet 虽然是一门旧技术了,但是它的基础性和广泛性仍然不可忽视;我在实践中发现不少同学经常会被它的一些特性给困惑住;时常出现404等错误,这里我写下这篇文章,介绍Servlet的不同版本的特…

Servlet简单示例

文章说明

Servlet 虽然是一门旧技术了,但是它的基础性和广泛性仍然不可忽视;我在实践中发现不少同学经常会被它的一些特性给困惑住;时常出现404等错误,这里我写下这篇文章,介绍Servlet的不同版本的特性,以及相关的注意事项;配套有具体的使用示例;附注:代码方面由GPT生成,具体的对话记录在底部附带仓库中有记录

项目介绍

本项目展示了不同版本Tomcat下的Servlet开发示例,包含了以下版本的实现:

  • Tomcat 8.5.x (Servlet 3.1)
  • Tomcat 9.0.x (Servlet 4.0)
  • Tomcat 10.x (Jakarta EE 9)

项目结构

├── 8.5版本示例代码/    # Tomcat 8.5.x 示例
├── 9.0版本示例代码/    # Tomcat 9.0.x 示例
├── 10.0版本示例代码/   # Tomcat 10.x 示例
└── tomcat安装包/       # 各版本Tomcat安装包

版本特性说明

Tomcat 8.5.x

  • 使用Servlet 3.1 API
  • 支持JDK 7及以上版本
  • 使用javax.servlet包名
  • web.xml使用3.1版本规范

Tomcat 9.0.x

  • 使用Servlet 4.0 API
  • 支持JDK 8及以上版本
  • 使用javax.servlet包名
  • web.xml使用4.0版本规范
  • 支持HTTP/2

Tomcat 10.x

  • 使用Jakarta EE 9 API
  • 要求JDK 11及以上版本
  • 包名从javax.servlet变更为jakarta.servlet
  • web.xml使用Jakarta EE规范

示例内容

每个版本的示例都包含:

  1. 注解方式配置的Servlet (@WebServlet)
  2. web.xml方式配置的Servlet
  3. 完整的Maven项目配置

如何运行

环境要求

  • JDK版本要求:
    • 8.5版本:JDK 7+
    • 9.0版本:JDK 8+
    • 10.x版本:JDK 11+
  • Maven 3.6+

构建步骤

  1. 进入对应版本目录
  2. 执行Maven构建
mvn clean package
  1. 将生成的war包复制到对应版本Tomcat的webapps目录
  2. 启动Tomcat
  3. 访问示例页面:http://localhost:8080/[war包名称]/

注意事项

  1. 不同版本的API包名和依赖不同,需注意区分
  2. 确保使用正确版本的JDK
  3. 中文编码问题处理:
    • 设置URIEncoding=“UTF-8”
    • 配置响应编码
    • 设置文件编码为UTF-8
    • 在上述操作都设置了之后,控制台仍有可能报中文乱码,这是因为Windows下控制台的默认编码是GBK,肯定是会乱码的,不过这个不影响项目运行

参考资料

  • Apache Tomcat官方文档
  • Servlet规范
  • Jakarta EE

源码下载

Servlet简单示例

演示截图

1.8.5版本1
在这里插入图片描述

2.8.5版本2
在这里插入图片描述

3.8.5版本3
在这里插入图片描述

4.9.0版本1
在这里插入图片描述

5.9.0版本2
在这里插入图片描述

6.9.0版本3
在这里插入图片描述

7.10.x版本1
在这里插入图片描述

8.10.x版本2
在这里插入图片描述

9.10.x版本3
在这里插入图片描述

对话记录

提问1

帮我书写一下servlet的简单使用示例吧,分别采用@webServlet注解和web.xml 指定,同时书写不同版本的tomcat的示例代码,先写8.5版本的吧,并为我介绍一下tomcat是什么时候切换的api以及对应的版本

回答1

我来帮您创建一个Servlet示例,并解释Tomcat版本的API变化。

首先,让我们了解一下Tomcat的主要版本API变化:

  1. Tomcat 8.5.x 使用 Servlet 3.1 API
  2. Tomcat 9.0.x 使用 Servlet 4.0 API
  3. Tomcat 10.0.x 开始使用 Jakarta EE API,包名从 javax.servlet 变更为 jakarta.servlet

让我们先创建Tomcat 8.5版本的示例:

  1. 首先创建一个简单的HTML页面作为入口:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Servlet示例</title>
</head>
<body><h2>Servlet 3.1 示例</h2><hr/><h3>注解方式:</h3><a href="hello">访问HelloServlet(@WebServlet)</a><br/><h3>web.xml方式:</h3><a href="welcome">访问WelcomeServlet(web.xml)</a>
</body>
</html>
  1. 创建使用注解的Servlet:
package com.example.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head><title>Hello Servlet</title></head>");out.println("<body>");out.println("<h2>这是通过@WebServlet注解配置的Servlet</h2>");out.println("<p>当前时间: " + new java.util.Date() + "</p>");out.println("<a href='index.html'>返回首页</a>");out.println("</body></html>");}
}
  1. 创建使用web.xml配置的Servlet:
package com.example.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class WelcomeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head><title>Welcome Servlet</title></head>");out.println("<body>");out.println("<h2>这是通过web.xml配置的Servlet</h2>");out.println("<p>当前时间: " + new java.util.Date() + "</p>");out.println("<a href='index.html'>返回首页</a>");out.println("</body></html>");}
}
  1. 配置web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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>welcomeServlet</servlet-name><servlet-class>com.example.servlet.WelcomeServlet</servlet-class></servlet><servlet-mapping><servlet-name>welcomeServlet</servlet-name><url-pattern>/welcome</url-pattern></servlet-mapping>
</web-app>
  1. 创建Maven的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<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>servlet-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.2</version></plugin></plugins></build>
</project>

这个示例展示了在Tomcat 8.5下使用Servlet 3.1 API的两种配置方式:

  1. 使用@WebServlet注解(推荐方式)
  2. 使用传统的web.xml配置

要运行这个项目:

  1. 使用Maven打包:
mvn clean package
  1. 将生成的war包复制到Tomcat的webapps目录下:
copy target\servlet-demo-1.0-SNAPSHOT.war e:\workspace\Git\simple-example-of-servlet\tomcat安装包\apache-tomcat-8.5.90\webapps\
  1. 启动Tomcat:
e:\workspace\Git\simple-example-of-servlet\tomcat安装包\apache-tomcat-8.5.90\bin\startup.bat

访问:http://localhost:8080/servlet-demo-1.0-SNAPSHOT/ 即可看到示例页面。

这个示例完整展示了Servlet 3.1在Tomcat 8.5中的使用。如果您需要Tomcat 9.0的示例,我也可以为您展示其中的区别。主要区别在于web.xml的版本号和Servlet API的版本。

提问2

继续生成9.0之后的吧

回答2

好的,我来帮您创建Tomcat 9.0和10.0版本的Servlet示例。

首先是Tomcat 9.0版本(使用Servlet 4.0 API)的示例:

  1. 创建Maven项目配置:
<?xml version="1.0" encoding="UTF-8"?>
<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>servlet-demo-9</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.2</version></plugin></plugins></build>
</project>
  1. 创建web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"version="4.0"><servlet><servlet-name>welcomeServlet</servlet-name><servlet-class>com.example.servlet.WelcomeServlet</servlet-class></servlet><servlet-mapping><servlet-name>welcomeServlet</servlet-name><url-pattern>/welcome</url-pattern></servlet-mapping>
</web-app>
  1. 创建Servlet示例:
package com.example.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head><title>Hello Servlet</title></head>");out.println("<body>");out.println("<h2>这是Tomcat 9.0 - Servlet 4.0的示例</h2>");out.println("<p>当前时间: " + new java.util.Date() + "</p>");// 演示HTTP/2推送功能(Servlet 4.0新特性)if (request.getProtocol().equals("HTTP/2.0")) {request.newPushBuilder().path("images/logo.png").push();}out.println("<a href='index.html'>返回首页</a>");out.println("</body></html>");}
}

接下来是Tomcat 10.0版本(使用Jakarta EE 9 API)的示例:

<?xml version="1.0" encoding="UTF-8"?>
<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>servlet-demo-10</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.2</version></plugin></plugins></build>
</project>
package com.example.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;
import java.io.PrintWriter;@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head><title>Hello Servlet</title></head>");out.println("<body>");out.println("<h2>这是Tomcat 10 - Jakarta EE 9的示例</h2>");out.println("<p>当前时间: " + new java.util.Date() + "</p>");out.println("<p>注意包名从javax.servlet变为jakarta.servlet</p>");out.println("<a href='index.html'>返回首页</a>");out.println("</body></html>");}
}

主要变化说明:

  1. Tomcat 9.0 (Servlet 4.0)的主要变化:

    • web.xml版本升级到4.0
    • 引入了HTTP/2的服务器推送等新特性
    • 依然使用javax.servlet包名
  2. Tomcat 10.0的重大变化:

    • 包名从javax.servlet变更为jakarta.servlet
    • 需要Java 11或更高版本
    • 使用Jakarta EE 9 API
    • web.xml的命名空间也相应变化

要运行这些项目,分别执行:

cd 9.0版本示例代码
mvn clean package
copy target\servlet-demo-9-1.0-SNAPSHOT.war ..\tomcat安装包\apache-tomcat-9.0.104\webapps\cd ..\10.0版本示例代码
mvn clean package
copy target\servlet-demo-10-1.0-SNAPSHOT.war ..\tomcat安装包\apache-tomcat-10.1.40\webapps\

这些示例展示了Servlet API的演进过程,特别是从Tomcat 10开始的重大变化。建议在新项目中使用最新的Jakarta EE API,以获得更好的长期支持。

提问3

9.0和10.0里面都少了东西,9.0的没有WelcomeServlet的实现,以及index.html 页面,10.0的甚至连web.xml和HelloServlet都没有

回答3

好的,我来帮您补充缺失的文件。

  1. 首先补充9.0版本的缺失文件:
package com.example.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class WelcomeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head><title>Welcome Servlet</title></head>");out.println("<body>");out.println("<h2>这是Tomcat 9.0 - 通过web.xml配置的Servlet</h2>");out.println("<p>当前时间: " + new java.util.Date() + "</p>");out.println("<a href='index.html'>返回首页</a>");out.println("</body></html>");}
}
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Servlet 4.0示例</title>
</head>
<body><h2>Servlet 4.0 示例</h2><hr/><h3>注解方式:</h3><a href="hello">访问HelloServlet(@WebServlet)</a><br/><h3>web.xml方式:</h3><a href="welcome">访问WelcomeServlet(web.xml)</a>
</body>
</html>
  1. 补充10.0版本的缺失文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaeehttps://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"><servlet><servlet-name>welcomeServlet</servlet-name><servlet-class>com.example.servlet.WelcomeServlet</servlet-class></servlet><servlet-mapping><servlet-name>welcomeServlet</servlet-name><url-pattern>/welcome</url-pattern></servlet-mapping>
</web-app>
package com.example.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;
import java.io.PrintWriter;@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head><title>Hello Servlet</title></head>");out.println("<body>");out.println("<h2>这是Tomcat 10 - Jakarta EE 9的示例</h2>");out.println("<p>当前时间: " + new java.util.Date() + "</p>");out.println("<p>注意包名从javax.servlet变为jakarta.servlet</p>");out.println("<a href='index.html'>返回首页</a>");out.println("</body></html>");}
}
package com.example.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 java.io.PrintWriter;public class WelcomeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head><title>Welcome Servlet</title></head>");out.println("<body>");out.println("<h2>这是Tomcat 10 - 通过web.xml配置的Servlet</h2>");out.println("<p>当前时间: " + new java.util.Date() + "</p>");out.println("<p>注意包名从javax.servlet变为jakarta.servlet</p>");out.println("<a href='index.html'>返回首页</a>");out.println("</body></html>");}
}
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Jakarta EE 9示例</title>
</head>
<body><h2>Jakarta EE 9 示例</h2><hr/><h3>注解方式:</h3><a href="hello">访问HelloServlet(@WebServlet)</a><br/><h3>web.xml方式:</h3><a href="welcome">访问WelcomeServlet(web.xml)</a>
</body>
</html>

这样就补充完了所有缺失的文件。主要的区别在于:

  1. Tomcat 9.0版本使用javax.servlet包名,web.xml使用javaee命名空间
  2. Tomcat 10.0版本使用jakarta.servlet包名,web.xml使用jakartaee命名空间

现在两个版本的示例都是完整的了,可以分别部署到对应版本的Tomcat中运行。

提问4

tomcat10是不是不能用jdk8来运行了

回答4

是的,Tomcat 10.x 版本确实不能使用JDK 8了。让我解释一下原因和要求:

  1. Tomcat 10.x 的最低JDK要求:

    • 需要JDK 11或更高版本
    • 这是因为Jakarta EE 9(Tomcat 10使用的规范)要求最低Java版本为JDK 11
  2. 不同版本Tomcat对JDK版本的要求:

    • Tomcat 8.5.x: 支持JDK 7及以上
    • Tomcat 9.0.x: 支持JDK 8及以上
    • Tomcat 10.x: 要求JDK 11及以上

这一点可以从当前项目中的pom.xml配置看出差异:

<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!-- ... 其他配置 ... -->
</properties>

而在Tomcat 10的项目中:

<properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><!-- ... 其他配置 ... -->
</properties>

如果您的项目必须使用JDK 8,建议使用以下版本:

  1. 首选:Tomcat 9.0.x (支持Servlet 4.0)
  2. 备选:Tomcat 8.5.x (支持Servlet 3.1)

如果您尝试使用JDK 8运行Tomcat 10,会遇到启动失败的问题,因为:

  1. Jakarta EE 9的API需要JDK 11的特性支持
  2. 部分内部实现使用了JDK 11的新特性
  3. 类加载机制有所变化

因此,在选择Tomcat版本时,需要考虑项目的JDK版本约束。如果您的项目可以升级到JDK 11或更高版本,建议使用最新的Tomcat 10,以获得更好的特性支持和长期维护。

http://www.dtcms.com/wzjs/637250.html

相关文章:

  • html 网站建设中模板有错误的wordpress
  • 网站架构图图wordpress 分类目录 404
  • 网站备案密码忘wordpress默认密码恢复
  • 旅游公司网站设计自己电脑做网站
  • 合肥做网站的的公司1g内存vps 开电影网站
  • 内江规划建设教育网站wordpress做超链接
  • 中国城投建设集团有限公司网站贵州建设厅网站建筑企业公示栏
  • 网站建设哪家好推荐万维科技什么网站程序适合做seo
  • 安徽网站建设服务本地wordpress 手机浏览器
  • 海南省建设网站首页网站维护北京
  • 怎样才能建网站c# 手机版网站开发
  • 做推广网站的文章术语电信网站备案查询系统
  • 制学网网站开发一个小程序的流程
  • 广州市建设工程交易服务中心网站中国加盟网
  • 做二手的网站有哪些盐城网站建设优化建站
  • s网站优化建设网站的实验目的
  • 钓鱼网站教程网站开发团队排行榜
  • 网站设计与建设课程网站流量与带宽
  • html公司网站模板源码个人购物网站搭建
  • 哪一个平阳网站建设成都网站公司建设
  • 河南省住房和建设厅网站网站建设的目的和目标
  • 安陆市建设局网站烟台制作小程序的公司
  • 焦作网站制作-焦作网站建设-焦作网络公司-维科网络全国工商核名查询系统官网
  • 传统网站有没有建设必要精美wordpress主题
  • 网站推广优化排名seo网站建设 盘网互联
  • 视频播放网站建设网站开发安卓开发
  • 专门做产品测评的网站wordpress 收费主题破解版
  • 什么平台可以推广广州seo培训机构
  • jrs直播网站谁做的科技术语
  • 微信导购网站怎么做视频教学查看一下测绘项目招投标信息