gpt4 book ai didi

java - 使用 Jersey 2.6 返回 jsp

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:29 26 4
gpt4 key购买 nike

我正在尝试使用 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());
}
}

主页资源类

@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 的情况下等等......似乎没有任何效果

这里是我调用的 url:

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

最佳答案

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

我在 Weblogic(12.2.1)现在正在处理 Jersey(2.21.x)/JSP我看到的问题是出于某种原因jersey.config.server.mvc.templateBasePath来自 web.xml不会进入内部配置。事实上很多<init-param>属性做不到。

或者,所有必需的属性都可以直接添加到 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>

关于java - 使用 Jersey 2.6 返回 jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22125268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com