【问题标题】:returnin jsp with Jersey 2.6使用 Jersey 2.6 返回 jsp
【发布时间】:2014-03-02 08:02:18
【问题描述】:

我正在尝试使用 Jersey 2.6 返回一个 Viewable 类。 我已经阅读了很多示例,但似乎没有任何效果。我只是得到 404 响应,尽管我可以看到请求映射确实有效。这里有详细信息:

web.xml

 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <module-name>helloworld-spring</module-name>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>SpringApplication</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.proj.configuration.JerseyConfiguration</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>jersey.config.server.mvc.templateBasePath.jsp</param-name>
            <param-value>/WEB-INF/jsp</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.mvc.templateBasePath</param-name>
            <param-value>/WEB-INF/jsp</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringApplication</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

JerseyConfiguration 类

public class JerseyConfiguration extends ResourceConfig {

    /**
     * Register JAX-RS application components.
     */
    public JerseyConfiguration () {
        register(HomeResource.class);

        register(JspMvcFeature.class);

        // Logging.
        register(LoggingFilter.class);

        // Tracing support.
        property(ServerProperties.TRACING, TracingConfig.ON_DEMAND.name());
    }
}

HomeResource 类

@Path("jersey-hello")
public class HomeResource {

    @GET
    @Path("/myPage")
    @Produces(MediaType.TEXT_HTML)
    public Viewable getHello() {
        return new Viewable("/myPage.jsp", this);
    }
}

我在 /WEB-INF/jsp 文件夹中有 myPage.jsp

我尝试了许多组合,例如将 myPage 不带 .jsp 等等...似乎没有任何效果

这里是我要调用的网址:

http://localhost:8080/jersey-hello/myPage

【问题讨论】:

  • 我不是专家,也不是菜鸟(我只是想了解球衣并开始阅读一些关于使用它的知识),但我不应该将我的 .jsp/.html 页面与 @987654326 放在一起@ 文件夹?而不是将这些页面保存在同一个文件夹中。
  • 将 jsp 页面称为“jsp/myPage.jsp”或“/jsp/myPage.jsp”有帮助吗?
  • 我已经尝试了所有可能的方法来引用这些名称。我放弃了,现在只使用 jersey 来生成 jsons。

标签: java jersey


【解决方案1】:

一般来说,如果在资源文件中提供了JSP 文件的绝对路径(如HomeResource.getHello 中的"/myPage.jsp"),那么此路径相对于templateBasePathweb.xml 中的templateBasePath 定义的基本路径(在您的情况下,这将与/WEB-INF/jsp/myPage.jsp 中的预期一样)。

我现在在Weblogic(12.2.1) 处理Jersey(2.21.x)/JSP,我看到的问题是由于某种原因来自web.xmljersey.config.server.mvc.templateBasePath 没有进入内部配置。事实上,许多&lt;init-param&gt; 属性都没有成功。

或者,所有必需的属性都可以直接添加到ResourceConfig 派生类中,然后 Jersey 会识别这些属性:

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.mvc.jsp.JspMvcFeature;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("/")
public class MyResourceConfig extends ResourceConfig {
    public MyResourceConfig() {
        packages("foo.bar");
        register(LoggingFilter.class);
        register(JspMvcFeature.class);
        // it may be also jersey.config.server.mvc.templateBasePath
        property("jersey.config.server.mvc.templateBasePath.jsp", "/WEB-INF/jsp");
        // ... more properties as needed ...
    }
}

我最终得到的web.xml 如下:

<web-app version="3.0" ...>
    <filter>
        <filter-name>jersey</filter-name>
        <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>jersey.config.servlet.filter.forwardOn404</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>jersey</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2014-01-11
    • 2013-11-23
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多