当前位置: 首页 > 知识库问答 >
问题:

将多个servlet添加到一个web.xml中

胡嘉歆
2023-03-14

我想合并/添加一个新泽西项目B(已经运行良好)到一个新泽西项目a,这将充当一个过滤器/安全层。因此,作为一个基本步骤,我在项目a的构建路径上向项目B添加了依赖项,并在构建路径中向部署程序集添加了相同的依赖项。我从这篇文章中了解到,我可以通过将servlet放在同一个web.xml中,并使用 以不同的方式映射它们来实现这一点。当我试图访问项目B的资源时,我没有任何运气。

<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>org.abc.def.ba, org.pqr.xyz</param-value>
    </init-param>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>org.abc.def.ba.CustomApplication</param-value>
    </init-param> 
    <load-on-startup>1</load-on-startup>
</servlet>

 <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>

<!-- The Servlet of Project B -->
<servlet>
    <servlet-name>Jersey Web Application 2</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-     class>

<init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value> org.pqr.xyz.MyApplication</param-value>
    </init-param> 

    <!-- Register resources and providers under my.package. -->
   <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value> org.pqr.xyz</param-value>
    </init-param>

    <!-- Register my custom provider (not needed if it's in my.package) AND LoggingFilter. -->
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value> org.pqr.xyz.mapper.ObjectMapperProvider</param-value>
    </init-param>

     <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value> org.pqr.xyzr</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
        <param-value>com.porterhead.rest.filter.ResourceFilterFactory</param-value>
    </init-param>
    <init-param>
        <param-name>readOnly</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey Web Application 2</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

因此,当我尝试访问http://localhost:8080/ba/webapi/myresource时,它工作得很好。但是当我尝试http://localhost:8080/ba/rest/newresource时,我会得到404错误。我知道我错过了什么。我很感激你在这方面的指导。

共有1个答案

常温文
2023-03-14

如果您使用的是Servlet3.0,那么您可以使用@ApplicationPath注释为不同的资源使用不同的应用程序路径。如果您不想使用注释,可以使用web.xml实现如下所示

<web-app>
<servlet>
    <servlet-name>org.foo.rest.MyApplication</servlet-name>
</servlet>
...
<servlet-mapping>
    <servlet-name>org.foo.rest.MyApplication</servlet-name>
    <url-pattern>/resources</url-pattern>
</servlet-mapping>
...

有关详细信息,请参阅Jersey文档中的部署选项。

 类似资料:
  • 在一个web.xml中有多个jersey servlet是可能的吗?我尝试以这种方式执行RESTfull版本控制:

  • Im正在尝试返回目录中的文件列表。有谁能帮忙吗?

  • 我正在尝试在web.xml中映射多个servlet。在我的index.html中,我有一个操作“desktype.do”的表单,当我运行程序时,它成功了。我是这样开始的: …效果很好。它成功地编译,并且在按下我在index.html中设置的按钮后,它就会按照需要运行。在添加了额外的servlet映射之后: 我收到错误“模块尚未部署。详细信息请参阅服务器日志。构建失败(总时间;0秒)”我不确定该怎么

  • 问题内容: 简单版本: 如果我这样做: 我得到的输出。但是我想。使用隐式numpy循环而不是自己遍历它,是否可能以某种方式实现? 我实际上需要做什么的版本: 我有一个结构化的数组,其中包含一个索引,一个值和一些布尔值。我想根据布尔值对那些索引处的值求和。显然,这可以通过一个简单的循环来完成,但是似乎可以通过聪明的numpy索引来实现(如上所述)。 例如,我有一个包含5个元素的数组,要从数组中填充值

  • 我有两件事情要做:在鼠标悬停时突出显示JPanel,在鼠标拖动时移动一个蓝色方块。问题是,这需要我将MouseListeners添加到不同的组件中。当我这样做时,我只能使用一个功能——另一个被阻止了。我该怎么做才能让两个功能都工作? 注意:有时候JFrame不会显示任何东西——你只需要一直运行它,直到它显示为止(通常需要2-3次尝试)。如果它做了任何其他奇怪的事情,就继续运行它,直到它工作。如果之

  • 问题内容: 假设我有很多字符串变量(例如100): 我想将这些String变量添加到ArrayList中,我现在正在做的是 我很好奇,有没有办法使用循环?例如。 问题答案: 使用数组: 这个想法非常流行,以至于有内置的方法可以做到这一点。例如: 会将您的数组元素添加到现有列表中。如果只需要一个仅包含数组元素的列表,则可以一行执行: