嵌入式 Jetty 找不到带注释的 Servlet

2023-12-05

短的: 我有一个提供 war 工件的项目,其中包含带有注释的 servlet,但没有 web.xml。如果我尝试在 jetty 中使用 war,我总是只能得到 war 内容的目录列表,而不是 servlet 执行。

任何想法?

很长的故事: 我的 servlet 看起来像这样

package swa;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet( asyncSupported = false, urlPatterns={"/*"})
public class ServletX extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // Set response content type
        response.setContentType("text/html");

        // Actual logic goes here.
        PrintWriter out = response.getWriter();
        out.println("<h1>Hi there..</h1>");
    }

}

所以我想没什么特别的。当我使用mvn jetty:run一切安好。确保这一点后,该项目将被打包到战争档案中。

该战争档案在另一个必须在代码中设置码头的项目中使用。这是它的完成方式:

        String jettyPort = properties.getProperty("jetty.port", "8080");
        Server server = new Server();

        ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory());
        httpConnector.setPort(Integer.parseInt(jettyPort));
        httpConnector.setAcceptQueueSize(2);
        httpConnector.setHost("0.0.0.0");
        httpConnector.setIdleTimeout(30000);
        server.setConnectors(new Connector[] { httpConnector });

        WebAppContext wacHandler = new WebAppContext();
        wacHandler.setContextPath("/admin");
        wacHandler.setWar("swa-0.0.1-SNAPSHOT.war");
        wacHandler.setConfigurationDiscovered(true);

        server.setHandler(wacHandler);

        server.start();

执行该项目时,日志告诉我发现了战争。但如果我打开网址http://localhost:8080/admin我只看到战争内容列表(而不是“嗨,那里”)。

有人能指出我的失败吗?


更新日期 - 2021 年 8 月

从 Jetty 10.0.0 开始,此过程已发生变化(包括 Jetty 11.0.0)

的存在jetty-annotations-<ver>.jar类路径上的 足以启用 servlet 和 websocket 层的注释和字节码扫描。

The WebAppContext.setConfiguration(...)不应再使用该方法。

旧的示例项目已存档并替换为

https://github.com/jetty-project/embedded-servlet-server

有一些例子...

Servlet API Version Jetty Version New Branch
3.1 Jetty 9.4.x embedded-servlet-server : jetty-9.4.x
4.0 Jetty 10.x embedded-servlet-server : jetty-10.0.x
5.0 Jetty 11.x embedded-servlet-server : jetty-11.0.x

原始答案 - 2014 年 9 月

您需要适当地定义 WebAppContext 配置(并以正确的顺序)。

    wacHandler.setConfigurations(new Configuration[]
    { 
        new AnnotationConfiguration(), 
        new WebInfConfiguration(), 
        new WebXmlConfiguration(), 
        new MetaInfConfiguration(), 
        new FragmentConfiguration(),
        new EnvConfiguration(), 
        new PlusConfiguration(), 
        new JettyWebXmlConfiguration() 
    });

不要忘记添加jetty-annotations.jar.

这是来自EmbedMe.java例如嵌入式码头与 Servlet 3.1 一起使用,位于

https://github.com/jetty-project/embedded-servlet-3.1/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式 Jetty 找不到带注释的 Servlet 的相关文章

随机推荐

  • VS2013 上的目标 Windows Phone 8 项目

    当我在 VS2013 中创建新项目时 自动选择 Windows Phone 8 1 如何仅在 Visual Studio 2013 中更改 Windows Phone 8 的目标 请选择 Windows Phone Silverlight
  • MySQL为什么cursor.execute(sql, multi=True)不起作用但2cursor.execute(sql)起作用?

    这段代码的工作原理 sql TRUNCATE TABLE product groups cursor execute sql sql INSERT INTO product groups origin type name brand con
  • htaccess 帮助共存 Codeigniter 和 Wordpress 安装

    我的目的是拥有一个 codeigniter 应用程序 并在同一域下拥有一个博客 两者的管理员应该是分开的 目录结构是这样的 httpdocs htaccess httpdocs application lt CI installation
  • 将我的 jQuery 单击事件与现有对象的 onclick 属性混合

    我正在使用 jQuery 但处理从 JSF 页面生成的标记 许多元素都具有 JSF 代码提供的 onclick 属性 这不是我的领域 Example div submit div 我正在尝试使用 jQuery 添加一些客户端验证 我需要这样
  • AES 解密时,最终块未正确填充

    首先 我会告诉大家我的主要目标是什么 我将在客户端使用 AES 加密一些内容 然后使用 RSA 公钥加密重要的 AES 规范 并将 AES 加密数据和 RSA 加密 AES 规范发送到服务器 因此 在服务器上 我将使用 RSA 私钥解密 A
  • MySQL 用户定义的纬度经度语法函数

    我创建了一个 MySQL 函数来确定一组纬度和经度坐标是否在另一组纬度和经度坐标的特定范围内 但是 该函数给了我一个语法错误 因此我无法测试它是否正常工作 任何有助于找出导致错误的原因的帮助将不胜感激 该函数及其描述如下 它的工作原理是将起
  • RxAndroidBle 多种特性通知和读/写

    我在设置多个特征的通知时遇到问题 我已经查看了文档 许多示例仅涵盖了非常精细的情况 我的用例如下 1 扫描设备 2 用户选择要连接的设备 连接持续到应用程序关闭 3 订阅多种特性的通知 4 一次读 写单个特征 在某些情况下一次读 写多个特征
  • 我无法让程序正确读取输入文件中的值(二维数组)

    我的程序错误地读取了该值 当我尝试从此文件中获取值时 存在同样的问题 14 14 8 0 4 16 2 0 1 7 7 4 7 0 23 0 44 290 350 16 16 10 0 5 17 2 2 1 8 8 5 4 0 27 0 5
  • 解析 Amazon MWS Scratchpad 响应

    我正在尝试解析来自亚马逊的 xml 文件 但发现困难 我正在使用 simplexml load string xml simplexml load string 这里是我的 xml 但当我这样做时 echo xml gt GetMatchi
  • 将 CALayer 子层压平为一层

    在我的应用程序中 我有一个根层 以及许多作为 rootLayer 的子层的图像 我想将 rootLayer 的所有子层展平为一个没有任何子层的层 图像 我认为我应该通过在核心图形上下文中绘制所有子图层来做到这一点 但我不知道该怎么做 我希望
  • Linux 如何通过错误号获取错误描述

    在 Linux 中 特别是我有 Ubuntu 14 如果某个程序因错误而终止 我可以通过以下方式获取数字错误代码 多变的 failing app echo 然而数字本身并不能告诉我太多信息 如何获取错误名称和描述 有一个错误列表 man e
  • ”' aria-label='使用 Pandas Dataframe 的半正弦距离计算器“无法将系列转换为 ”'> 使用 Pandas Dataframe 的半正弦距离计算器“无法将系列转换为

    我尝试在 Panda Dataframe 上使用半正矢计算 from math import radians cos sin asin sqrt def haversine lon1 lat1 lon2 lat2 convert decim
  • 如何制作 jQuery 倒计时

    我想要一个 jQuery 倒计时 页面下载完成后开始计数 数到 0 后重定向到一个 url 我怎样才能做到这一点 我想我应该稍微分解一下并提供一些既可以倒计时又可以重定向的东西 毕竟 明天您可能想要倒计时并操作 DOM 因此 我提出了以下
  • BottomNavigationView 与导航图再次加载片段

    我在用BottomNavigationView with nav graph下面是我的代码 InMainActivity class navController Navigation findNavController this R id
  • 当 'type = "norm" 时如何计算 ggplot stat_ellipse() 的面积?

    类似这个问题 当 type norm 时 有什么方法可以计算这个椭圆的面积吗 默认为type t type norm 显示不同的椭圆 因为它假设多元正态分布而不是多元 t 分布 这是代码和情节 使用与其他帖子类似的代码 library gg
  • 页面加载后jquery加载div

    实际上我正在寻找的加载是首先加载页面 然后加载包含大量数据的 div 所以 我想首先加载主页 然后使用 jQuery 函数加载正文 div 内容 但有一些延迟 实现这个的简单方法是什么 div div navigation div div
  • 如何使用 Lombok 访问 getter 和 setter 方法? [复制]

    这个问题在这里已经有答案了 我已经在我的项目中添加了 Lombok maven 存储库 并成功使用了 Lombok 注释 我尝试从另一个类访问 setter 和 getter 方法 但无法访问这些方法 我正在使用 spring Boot 版
  • SQL Server - 有没有办法批量解决排序规则冲突

    我们遇到的情况是 开发和生产 SQL Server 之间的数据库 表和某些列的排序规则不同 这对开发造成了严重破坏 事情会在开发上工作 然后由于升级时的排序规则冲突而中断 数据和结构将从产品复制到开发 这又会因为冲突等而破坏开发上的查询 我
  • 执行Python程序

    我已经在网上搜索答案很长一段时间了 但这让我非常头疼 我使用的是 Ubuntu 12 04 我想从终端执行 Python 脚本而不使用完整路径 因此 我通过将以下内容添加到 bashrc 中 将 home kyril python scri
  • 嵌入式 Jetty 找不到带注释的 Servlet

    短的 我有一个提供 war 工件的项目 其中包含带有注释的 servlet 但没有 web xml 如果我尝试在 jetty 中使用 war 我总是只能得到 war 内容的目录列表 而不是 servlet 执行 任何想法 很长的故事 我的