Jersey - servlet 上下文路径和/或 servlet 路径包含百分比编码的字符

2023-12-22

我正在使用 Jersey 和 Tomcat,每当我单击链接时都会收到以下消息:

HTTP Status 500 - The servlet context path and/or the servlet path contain
characters that are percent encoded

type: Exception report

message: The servlet context path and/or the servlet path contain characters
         that are percent encoded

description: The server encountered an internal error that prevented it from
             fulfilling this request.

exception:
    javax.ws.rs.ProcessingException: The servlet context path and/or the servlet path
    contain characters that are percent encoded
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:317)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

note: The full stack trace of the root cause is available in the Apache Tomcat/7.0.56
      logs.

REST服务的路径是:

http://localhost:8070/simple-service-webapp/rest/hello

当我在 URL 栏中输入此内容时,它会起作用,但是当我单击某个链接时,URL 会变成这样:

http://localhost:8070/simple%2Dservice%2Dwebapp/rest/hello

不知何故,Jersey 默认情况下不处理百分比编码的 URL。

有人可以帮我让它工作而不删除 URL 中的破折号吗?我的搜索没有提供有效的解决方案。

Listings

HelloResource.java

package com.example;

import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;

@Path("hello")
public class HelloResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHelloPlainText(@Context UriInfo uriInfo) {

        String name = uriInfo.getQueryParameters().getFirst("name");

        if (name == null) {
            name = "unknown user";
        }

        return "Hello " + name + "!";
    }

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHelloHtml(@Context UriInfo uriInfo) {

        String text = sayHelloPlainText(uriInfo);

        String result = "<html>" + "<head>" + "<title>Hello Jersey</title>" + "</head>"
                      + "<body>" + "<h1>" + text + "</h1>" + "</body>" + "</html>";

        return result;
    }

    @GET
    @Produces(MediaType.TEXT_XML)
    public String sayHelloXml(@Context UriInfo uriInfo) {

        String text = sayHelloPlainText(uriInfo);

        String result = "<?xml version=\"1.0\"?>" + "<hello>Hello " + text + "!" + "</hello>";

        return result;
    }
}

索引.jsp

<!DOCTYPE html>

<html>

<head>
    <meta charset="UTF-8">

    <title>RESTful Web Application</title>
</head>

<body>
    <h2>My RESTful Web Application!</h2>

    <ul>
        <li><a href="rest/hello">Hello from Jersey</a></li>
        <li><a href="rest/hello?name=Johannes">Hello using parameters</a></li>
    </ul>
</body>

</html>

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>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.example</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

pom.xml

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>simple-service-webapp</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>simple-service-webapp</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <jersey.version>2.16</jersey.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>simple-service-webapp</finalName>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>

                <inherited>true</inherited>

                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-maven-plugin</artifactId>
                <version>1.0.2.Final</version>

                <configuration>
                    <id>WildFlyServer</id>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>

                <configuration>
                    <server>TomcatServer</server>

                    <url>http://localhost:8070/manager/text</url>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我遇到了这个问题。将您的工件 ID 更改为“SimpleWebApp”(请注意,我去掉了“-”),它就可以工作了。对于我想做的事情,不值得找出这行不通的确切原因。我不认为这是球衣,而是关于tomcat的东西。

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \
                -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
                -DgroupId=com.example -DartifactId=SimpleWebapp -Dpackage=com.example \
                -DarchetypeVersion=2.22.1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jersey - servlet 上下文路径和/或 servlet 路径包含百分比编码的字符 的相关文章

随机推荐

  • 当 Node 后端 (MongoDB) 中的状态发生变化时通知 Angular 前端

    当 MongoDB 中的状态发生变化时 我希望实时更新 Angular 前端 我的选择是什么 除了例如 还有其他方法吗 使用socket io 场景 用户创建提醒 设置电子邮件到达其邮箱的日期 现在 为了添加和删除提醒 我可以在前端模拟实时
  • Android EditText 空间验证

    我的 Android 应用程序中有一个 Edittext 我不想允许用户输入第一个空格字符 但是输入其他字符后用户也可以输入空格 I used
  • 告诉 Ctags 不要解析评论中的内容

    当我生成 ctags 文件时 它似乎也在解析注释中的内容 例如 使用 Vim 的插件 Tagbar 我可以在函数列表中看到不存在的函数 例如 is in just 这里发生的情况是 ctags 正在进入评论并发现以下内容 This func
  • 如何使用 CSS 使某个区域不可点击?

    假设我有包含一些链接和图像的包装 div 有什么方法可以仅使用 CSS 立即停用它吗 审查答案后 我放弃了只用 CSS 就能实现的想法 jQuery blockUI 插件就像魅力一样 有一个 CSS 规则 pointer events no
  • Laravel:如何从查询结果中获取模型?

    假设我有一个查询 除其他外 返回用户 ID 该查询是使用DB table 而不是使用模型 因此 我得到了一个集合 其中包含每个检索到的行的数组 如下所示 user id calculated data 1 123 2 111 3 222 假
  • 防止 lxml 在 ` 中转义 & 符号 ` 写入文件时

    我需要向现有 XML 元素添加一个属性 该属性必须包含 实体内的字符 例如 x0d 将修改后的 XML 写入文件时 变成 amp 从而摧毁该实体 import lxml etree as et e et Element a e set at
  • 基于公共密钥分析数据的简单方法

    处理映射到特定键的所有记录并输出该数据的多个记录的最简单方法是什么 例如 综合示例 假设我的密钥是日期 值是带有测量温度的当天时间戳 我想将一天内的温度分为高 平均 低 同样 低于 高于平均值 1 个标准偏差 输出将是具有新分类的原始温度
  • 在 Android 中创建和处理应用程序超时

    我想知道处理应用程序超时的最佳方法是什么 例如 PayPal 我希望用户选择 1 5 或 15 分钟的超时时间 这样当他们打开应用程序时 他们必须再次登录 我的 onResume 方法 Override public void onResu
  • 按 15 分钟间隔对数据集进行分组

    我正在尝试为我们的内部公司系统建立平均会话量 问题是范围大约向后三个月 我想按 15 分钟间隔对这整组大数据进行分组 因此输出将如下所示 interval sess avg 12 00 12 15 300 12 15 12 30 350 e
  • FromBody 值获取 null

    这是 Asp Net Webform 应用程序这是我的 Apicontroller 中的 POST 方法 public void Post FromBody string value 我正在使用 fiddler 后期处理 我就是这么实验的
  • 更改 FloatingActionButton 的背景?

    我试图在 XML 中将 FAB 的背景设置为不同的颜色 我知道我可以在代码中做到这一点 但这也需要我进行大量不方便的重构
  • ListView 显示项目但不显示组

    我正在创建一个简单的模式对话框 其中包含列表视图 当我将项目添加为组的一部分时 项目将显示 但组标题不会显示 我一直在尝试在构造函数中使用一些虚拟对象 这是代码 Initialize and create columns public Co
  • SLICK 3.0 - 多个查询相互依赖 - db.run(action)

    我是 Slick 3 的新手 到目前为止我已经了解 db run 是异步调用 一旦 Future 返回 map 或 flatMap 就会运行 下面我的代码中的问题是所有子查询都不起作用 嵌套db run 从概念上讲 我没有得到什么 执行下面
  • 如何处理未跟踪的文件并提高 git status 性能

    我目前在 Mac 上 在 Git 2 35 1 中 当我克隆我的存储库时 枚举未跟踪的文件花了 7 秒 当我这样做时time git status 大约花了2秒 而且 当我签出到其他分支时 大约需要 15 秒 当我签出回我的主存储库时 大约
  • SQL Server bacpac 在最新更新中本地导入失败(在线索引操作只能在 SQL Server 企业版中执行)

    我有一个 SQL Azure 数据库并在 SQL Server Management Studio 中连接到它 我导出数据层应用程序 然后导入数据层应用程序 bacpac文件以将其放入我的 localdb 中 或者我使用任务 部署数据库 不
  • 有没有办法根据不同列中的离散变量制作 matplotlib 散点图标记或颜色?

    我正在使用 matplotlib 从 DF 中制作散点图 为了为每个数据集获取不同的颜色 我对 plt scatter 进行了两次单独的调用 plt scatter zzz HFmV zzz LFmV label dut groups 0
  • 无缝音频循环到任意位置

    我最喜欢 MOD 格式的事情之一是能够循环回到歌曲中的任何给定点 这使其非常适合具有 前奏 和 主循环 的歌曲 当然MP3做不到这一点 到目前为止 我已经做了这样的事情
  • 如何用Python绘制时间序列热图? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想绘制一个图表 其中 x 轴作为时间轴 y 轴作为其值 颜色将指示其频率 频率越高 颜色越深 我认为您正在寻找二维直方图 impor
  • 在oracle11g中创建参数化视图

    我有一个带有嵌套和左连接的大查询 我需要从中创建一个视图 以免从应用程序中运行它 问题是我需要日期范围和其他一些字段作为输入参数 因为每个请求的前端都会有所不同 我刚刚查了一下 看到一些帖子提到使用 SYS CONTEXT 进行参数化视图
  • Jersey - servlet 上下文路径和/或 servlet 路径包含百分比编码的字符

    我正在使用 Jersey 和 Tomcat 每当我单击链接时都会收到以下消息 HTTP Status 500 The servlet context path and or the servlet path contain characte