Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 码头11号不';t检测servlet_Java_Maven_Servlets_Jetty_Jetty 9 - Fatal编程技术网

Java 码头11号不';t检测servlet

Java 码头11号不';t检测servlet,java,maven,servlets,jetty,jetty-9,Java,Maven,Servlets,Jetty,Jetty 9,我有一个使用Jetty部署本地服务器的示例项目 我使用mvnpackage exec:java命令来运行本地服务器,它工作正常。它加载HTML文件以及servlet中的内容。以下是相关文件: pom.xml 4.0.0 快乐编码 应用程序引擎hello world 1. 11 11 UTF-8 9.4.35.v20201120 io.happycoding.ServerMain 你的项目在这里 javax.servlet javax.servlet-api 4.0.1 org.eclipse.

我有一个使用Jetty部署本地服务器的示例项目

我使用
mvnpackage exec:java
命令来运行本地服务器,它工作正常。它加载HTML文件以及servlet中的内容。以下是相关文件:

pom.xml


4.0.0
快乐编码
应用程序引擎hello world
1.
11
11
UTF-8
9.4.35.v20201120
io.happycoding.ServerMain
你的项目在这里
javax.servlet
javax.servlet-api
4.0.1
org.eclipse.jetty
jetty服务器
${jetty.version}
org.eclipse.jetty
码头注释
${jetty.version}
org.apache.maven.plugins
maven资源插件
2.7
复制web资源
编译
复制资源
${project.build.directory}/classes/META-INF/resources
./src/main/webapp
org.apache.maven.plugins
maven阴影插件
3.2.4
包裹
阴凉处
假的
${exec.mainClass}
com.google.cloud.tools
appengine maven插件
2.2.0
${googleCloudProjectId}
1.
ServerMain.java

package io.happycoding;
导入java.net.URL;
导入org.eclipse.jetty.annotations.AnnotationConfiguration;
导入org.eclipse.jetty.server.Handler;
导入org.eclipse.jetty.server.handler.DefaultHandler;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.servlet.DefaultServlet;
导入org.eclipse.jetty.webapp.Configuration;
导入org.eclipse.jetty.webapp.WebAppContext;
导入org.eclipse.jetty.webapp.WebInfConfiguration;
/**
*启动服务器,包括处理静态文件的DefaultServlet,
*以及使用@WebServlet注释的任何servlet类。
*/
公共类ServerMain{
公共静态void main(字符串[]args)引发异常{
//创建侦听端口8080的服务器。
服务器=新服务器(8080);
WebAppContext WebAppContext=新的WebAppContext();
setHandler(webAppContext);
//从jar文件内部加载静态内容。
URL webAppDir=
ServerMain.class.getClassLoader().getResource(“META-INF/resources”);
webAppContext.setResourceBase(webAppDir.toURI().toString());
//启用注释,以便服务器看到用@WebServlet注释的类。
webAppContext.setConfigurations(新配置[]{
新建AnnotationConfiguration(),
新的WebInfConfiguration(),
});
//在classes目录(dev server)和
//jar文件(实时服务器)
webAppContext.setAttribute(
“org.eclipse.jetty.server.webapp.ContainerCludeJarPattern”,
“*/target/classes/|.\\\.jar”);
//处理静态资源,例如html文件。
webAppContext.addServlet(DefaultServlet.class,“/”);

//启动服务器!Jetty 11基于Jakarta Servlet 5.0,它是Jakarta EE 9的一部分

雅加达EE 9经历了名称空间和打包的“大爆炸”(他们的名字,不是我的),不再有
javax.servlet.
它现在是
Jakarta.servlet.

Jetty 11中没有任何东西可以查找
javax.servlet.*

一些快速的历史

  • Oracle拥有JavaEE
  • Oracle生产了JavaEE7
  • Oracle决定不再创建/管理EE
  • Oracle将所有EE赋给Eclipse基金会。
  • Oracle没有授予Eclipse基金会在这个新的EE现实中使用“java”或“javax”的权限。
  • Eclipse基金会因法律原因将其改名为“雅加达EE”。
  • Eclipse基金会发布“雅加达EE 8”,它本质上只是“java EE 7”,由于法律原因而更名(没有包名称空间更改) Eclipse基金会将所有包装从“代码> javax .<代码> > <代码>雅加达。< /代码>因法律原因。
(请注意,我浏览了这些步骤之间发生的许多其他事情)

javax.servlet.*
死了,万岁
jakarta.servlet.*

Jetty维护以下版本(当前)

  • Jetty 9.4.x-Servlet3.1/JavaEE7(javax.Servlet)
  • Jetty10.x-Servlet4.0/JakartaEE8(javax.Servlet)
  • Jetty 11.x-Servlet 5.0/Jakarta EE 9(Jakarta.Servlet)
Jetty的发行版中永远不会有向后兼容特性,允许
javax.servlet
jakarta.servlet
共存。(我们已经尝试过了,servlet规范的复杂性使得HttpSession、RequestDispatcher、动态servlet/过滤器注册等无法实现)

我们所能期望的最好的(有几个项目已经开始这样做了,全阿尔法质量ATM)是一种工具,它可以自动更新JAR和/或新包装的来源,然后在基于雅加达的服务器上运行。

我在这里做一个猜测(因为您没有任何错误),但这可能是因为Jetty 11在servlet版本5.0中使用了JakartaEE名称空间,而您仍然在使用
javax
servlet吗?在
javax
类的依赖项中有
javax.servlet api
,但可能Jetty正在寻找
jakarta.servlet.http.HttpServlet
s