【问题标题】:servlet or filter for JerseyJersey 的 servlet 或过滤器
【发布时间】:2016-10-23 12:14:06
【问题描述】:

我想知道在 web.xml 中将“jersey servlet”声明为 Servlet 或 Filter 有什么区别...

这是我在 web.xml 中将 jersey servlet 称为过滤器的方式:

    <filter>
        <filter-name>jersey-serlvet</filter-name>
        <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>ca.tesias.services</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>jersey-serlvet</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

这是在 web.xml 中称为 Servlet 的 jersey servlet:

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>ca.tesias.services</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

我应该使用什么解决方案!

【问题讨论】:

    标签: rest servlets jersey web.xml


    【解决方案1】:

    如果你想在基本 url 的末尾附加一个路径,你可以使用 servlets。但是,如果您不想在基本 url 的末尾附加路径而只是根据模式匹配调用某些内容,则可以使用 filters

    例子

    假设我们有以下两个资源:

    @javax.ws.rs.Path("path1")
    public class Path1 {
    
    }
    
    @javax.ws.rs.Path("path2")
    public class Path2 {
    
    }
    

    现在如果我们有如下的 servlet 映射:

    <servlet-mapping>
        <servlet-name>servlet_name</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
    

    我们可以使用以下 URL 访问资源:

    http://<hostname>:<web_container_port>/<context_root_of_web_application>/rest/path1
    http://<hostname>:<web_container_port>/<context_root_of_web_application>/rest/path2
    

    另一方面,如果我们有如下过滤器映射:

    <filter-mapping>
        <filter-name>filter_name</filter-name>
        <url-pattern>/path1</url-pattern>
    </filter-mapping> 
    

    我们可以通过访问以下 URL 来访问 path1 根资源:

    http://<hostname>:<web_container_port>/<context_root_of_web_application>/path1
    

    在这种情况下,过滤器 filter_name 将被调用

    但是,如果我们尝试使用以下 URL 访问 path2:

    http://<hostname>:<web_container_port>/<context_root_of_web_application>/path1
    

    在这种情况下不会调用任何过滤器。

    参考:https://www.ibm.com/support/knowledgecenter/en/SSEQTP_9.0.0/com.ibm.websphere.base.doc/ae/twbs_jaxrs_configwebxml_jrsfilters.html

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多