Spring-Jersey:如何返回静态内容?
题 :
- 如何公开我的
css/
,images/
,js/
和其他静态文件? - 如何为我的索引视图返回控制器(而不是String方法)中的JSP页面?
问题 :
- 在努力解决问题#1时,其他项目使用filter
jersey.config.servlet.filter.staticContentRegex
(如此处所示) Stackoverflow问题我无法在项目设置中找到正常工作的依赖项。 - 在努力解决问题#2时,我试图引入依赖关系来使用
Viewable
。 问题 – 传递依赖关系会对使用适当的Spring和Jersey类别(将雪球变成模糊错误的兔子洞)对webapp产生负面影响
完成项目 > Github项目
依赖关系 > 完整的POM文件
org.glassfish.jersey.containers jersey-container-servlet 2.15 org.glassfish.jersey.ext jersey-spring3 2.15 org.springframework spring-web 3.2.3.RELEASE commons-logging commons-logging 1.1 javax.servlet servlet-api
Web.xml > Web.xml
org.springframework.web.context.ContextLoaderListener contextConfigLocation classpath:applicationContext.xml Jersey org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application com.component.ResourceRegister 1 Jersey /*
Controller > SpringController.java
@Path("/") @Component public class SpringController { @GET @Produces(MediaType.TEXT_HTML) public ?? getIndex() { //How do I return my index page?? return ?? } }
“我如何公开我的css /,images /,js /和其他静态文件?”
jersey.config.servlet.filter.staticContentRegex
属性应该可以使用,但是您需要为要提供的所有类型的文件指定所有可能的模式。 更简单的方法是使用属性jersey.config.servlet.filter.forwardOn404
,如本答案所述 。 对两种选择都是肯定的,你需要将Jersey配置为filter,而不是servlet。 所以你的web.xml可能看起来像
Jersey org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application com.component.ResourceRegister jersey.config.servlet.filter.forwardOn404 true /* Jersey
“如何为我的索引视图返回控制器中的JSP页面(不是String方法)?”
你需要的第一件事是jsp mvc依赖
org.glassfish.jersey.ext jersey-mvc-jsp 2.25
然后,您需要注册该function
public ResourceRegister () { ... register(JspMvcFeature.class); }
然后,您需要为所有jsp页面指定模板基本路径。 例如,我使用/WEB-INF/jsp
public ResourceRegister () { ... property(JspMvcFeature.TEMPLATE_BASE_PATH, "/WEB-INF/jsp"); }
因此,对于这种情况,所有jsp文件都应位于/WEB-INF/jsp
目录中。
示例jsp和控制器
index.jsp
JSP Page ${it.hello} ${it.world}
调节器
@Path("/") public class HomeController { @GET @Produces(MediaType.TEXT_HTML) public Viewable index() { Map model = new HashMap<>(); model.put("hello", "Hello"); model.put("world", "World"); return new Viewable("/index", model); } } public ResourceRegister () { ... register(HomeController.class); }
这里, Viewable
的/index
指向index.jsp
(我们不需要.jsp
扩展名)。 Jersey知道如何从我们上面设置的属性中找到该文件。
也可以看看:
- Jersey项目的完整示例
- MVC模板文档