2016-11-25 107 views
0

我的项目结构如下无法映射静态资源正确

| SRC

| - 主

| --- web应用

| ----静态

| ----- CSS

| --- HTML HTML

| ----- js

我想通过我的控制器返回一个HTML资源,直接在根目录下的链接没有问题,但对于其他链接,我面临问题。

这里是我的控制器

@Controller 
public class HtmlServer { 


    @RequestMapping({"/", "/index", "/index.html", "/index.jsp", "/home","/home.html","/home.jsp"}) 
    public ModelAndView index() { 
     return new ModelAndView("html/index.html"); 
    } 


    @RequestMapping(method = RequestMethod.GET, value = "/support/{id}/{accessToken}") 
    public ModelAndView start(@PathVariable Long id, @PathVariable String accessToken) { 
     return new ModelAndView("html/index.html"); 
    } 

} 

这里是我的WebMvcConfigurerAdapter扩展类

@Component 
@ConfigurationProperties 
@Configuration 
@EnableWebMvc 
public class ApplicationConfig extends WebMvcConfigurerAdapter { 

@Bean 
    public InternalResourceViewResolver internalResourceViewResolver(){ 
     InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver(); 
     internalResourceViewResolver.setPrefix("static/"); 
     return internalResourceViewResolver; 
    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/js/**").addResourceLocations("static/js/") 
       .setCachePeriod(0); 
     registry.addResourceHandler("/css/**").addResourceLocations("static/css/") 
       .setCachePeriod(0); 
     registry.addResourceHandler("/support/**").addResourceLocations("/static/") 
       .setCachePeriod(0); 

    } 

} 

当我打开/或/index.html控制器返回给定值,作为回报,我正在服务的正确的资源。

但是,当我尝试使用/支持/ 1/xsdda我映射到/support/1/static/html/index.html有人可以解释内部并逻辑上指出我的错误。

谢谢!解析器的

+0

我暂时通过使用重定向解决了这个问题:/static/html/index.html但这不是我正在寻找的,我希望HTML页面呈现给定的URL。我确定必须有一些可配置的类正在执行此操作。只是无法弄清楚哪一个。 – user1615664

回答

1

创建内部WebApp文件夹WEB-INF,把你的HTML文件夹里面解析器的

  • 集前缀/ WEB-INF/HTML/
  • 集后缀为.html
  • 通话通过返回 “指数”

Servlet 2.4规范说这对WEB-INF(第70页):

应用程序层次结构中存在一个名为 WEB-INF的特殊目录。该目录包含所有与 应用程序相关的东西,它们不在应用程序的文档根目录中。 WEB-INF节点不是 应用程序的公共文档树的一部分。包含在WEB-INF目录中的文件可以通过容器直接传送给客户端 。然而, WEB-INF目录的内容是可见的使用getResourcegetResourceAsStream方法呼吁ServletContext到servlet代码,并且可以 使用RequestDispatcher呼叫被暴露。

+0

我知道这一点。但是这并不能解决我的问题,它仍然会被映射到/WEBINF/HTML/static/1/asfaf.html。 这不是我正在寻找的。 – user1615664

+0

我不知道为什么我不知道如何,但它的工作原理与我想要的完全一样。请在您的评论中分享您提及的确切文件的链接。谢谢! – user1615664

+0

http://download.oracle.com/otn-pub/jcp/servlet-2.4-fr-spec-oth-JSpec/servlet-2_4-fr-spec.pdf?AuthParam=1480319492_f198679269b3123ce049c5f752ebe525 – Zildyan