泽西岛的servlet或过滤器

tab*_*bim 5 rest web.xml servlets jersey

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

以下是我在web.xml中将jersey servlet称为Filter的方法:

    <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>
Run Code Online (Sandbox Code Playgroud)

这是在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>
Run Code Online (Sandbox Code Playgroud)

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

小智 0

如果您想在基本 url 末尾附加路径,可以使用servlets。但是,如果您不想在基本 url 末尾附加路径,而只想调用基于模式匹配的内容,则可以使用过滤器

例子

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

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

}

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

}
Run Code Online (Sandbox Code Playgroud)

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

<servlet-mapping>
    <servlet-name>servlet_name</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

我们可以使用以下 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
Run Code Online (Sandbox Code Playgroud)

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

<filter-mapping>
    <filter-name>filter_name</filter-name>
    <url-pattern>/path1</url-pattern>
</filter-mapping> 
Run Code Online (Sandbox Code Playgroud)

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

http://<hostname>:<web_container_port>/<context_root_of_web_application>/path1
Run Code Online (Sandbox Code Playgroud)

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

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

http://<hostname>:<web_container_port>/<context_root_of_web_application>/path1
Run Code Online (Sandbox Code Playgroud)

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

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