如何返回静态内容

如何返回静态内容

本文介绍了Spring-Jersey:如何返回静态内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题:


  1. 如何公开我的 css / images / js / 和其他静态文件?

  2. 如何在我的索引视图中返回控制器(不是String方法)中的JSP页面?

  1. How do I expose my css/, images/, js/ and other static files?
  2. How do I return a JSP page in my controller (not a String method) for my index view?

问题:


  1. 在努力解决问题#1时,其他项目使用过滤器 jersey.config.servlet .filter.staticContentRegex (如此处所示)我无法通过项目设置找到正常工作的依赖项。

  2. 在努力解决问题#2时我试图介绍依赖项使用可查看。问题 - 传递依赖关系会对使用适当的Spring和Spring类的Web应用程序产生负面影响。泽西(雪球变成了一个模糊错误的兔子洞)

  1. In efforts to solve question #1 other projects use a filter jersey.config.servlet.filter.staticContentRegex (as seen here Stackoverflow Question) I haven't been able to find dependencies that work correctly/at all with my project setup.
  2. In efforts to solve question #2 I attempted to introduce dependencies to use Viewable. Problem - transitive dependencies adversely affect the webapp from using the appropriate classes for Spring & Jersey (snowballs into a rabbit hole of nebulous errors)






完成项目>

依赖关系>

<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.15</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.15</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>

Web.xml >

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>Jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.component.ResourceRegister</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

控制器>

@Path("/")
@Component
public class SpringController {

@GET
@Produces(MediaType.TEXT_HTML)
public ?? getIndex() {

    //How do I return my index page??
    return ??
 }
}


推荐答案

jersey.config.servlet.filter.staticContentRegex 属性应该有效,但是您需要为要提供的所有类型的文件指定所有可能的模式。更简单的方法是使用属性 jersey.config.servlet.filter.forwardOn404 ,如。对两种选择都是肯定的,你需要将Jersey配置为过滤器,而不是servlet。所以你的web.xml可能看起来像

The jersey.config.servlet.filter.staticContentRegex property should work, but you need to specify all the possible patterns for all the types of files you want to serve. The easier way is to just use the property jersey.config.servlet.filter.forwardOn404, as pointed out in this answer. And yes with both choices, you need configure Jersey as a filter, rather than a servlet. So your web.xml might look like

<filter>
    <filter-name>Jersey</filter-name>
    <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.component.ResourceRegister</param-value>
    </init-param>
    <!-- pass to next filter if Jersey/App returns 404 -->
    <init-param>
        <param-name>jersey.config.servlet.filter.forwardOn404</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <url-pattern>/*</url-pattern>
    <filter-name>Jersey</filter-name>
</filter-mapping>



首先需要的是jsp mvc依赖

First thing you need is the jsp mvc dependency

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-mvc-jsp</artifactId>
    <version>2.25</version>
</dependency>

然后你需要注册这个功能

Then you need to register the feature

public ResourceRegister () {
    ...
    register(JspMvcFeature.class);
}

然后,您需要为所有jsp页面指定模板基本路径。例如,我使用 / WEB-INF / jsp

Then you need to specify the template base path for all your jsp pages. For example I used /WEB-INF/jsp

public ResourceRegister () {
    ...
    property(JspMvcFeature.TEMPLATE_BASE_PATH, "/WEB-INF/jsp");
}

因此,对于这种情况,所有jsp文件都应位于 / WEB-INF / jsp 目录。

So for this case, all the jsp files should be located in /WEB-INF/jsp directory.

jsp和控制器示例

index.jsp

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
        <title>JSP Page</title>
        <link href="css/styles.css" rel="stylesheet">
    </head>
    <body>
        <h1>${it.hello} ${it.world}</h1>
    </body>
</html>

控制器

@Path("/")
public class HomeController {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public Viewable index() {
        Map<String, String> model = new HashMap<>();
        model.put("hello", "Hello");
        model.put("world", "World");
        return new Viewable("/index", model);
    }
}

public ResourceRegister () {
    ...
    register(HomeController.class);
}

这里 / index 可查看中指向 index.jsp (我们不需要 .jsp 扩展名)。泽西岛知道如何从我们上面设置的房产中找到该文件。

Here the /index in the Viewable points the index.jsp (we don't need the .jsp extension). Jersey knows how to find the file from the property we set above.

另请参阅:




  • Complete example from Jersey project
  • MVC Templates documentation

这篇关于Spring-Jersey:如何返回静态内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-30 19:08