【问题标题】:spring mvc can't access .html filesspring mvc 无法访问 .html 文件
【发布时间】:2017-02-14 10:37:11
【问题描述】:

我搜索了整个网站,但没有任何建议有效! 我正在尝试制作一个 spring-mvc 和 angularJS 应用程序;这是我的项目结构:

angularState
-src/main/java/it.controller.DefaultController.java
-src/main/webapp
--index.jsp
--WEB-INF
---dispatcher-servlet.xml
---web.xml
---static
----default.html

所以在我的 web.xml 中我有:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/dispatcher-servlet.xml
    </param-value>
</context-param>

在dispatcher-servlet.xml中:

<context:component-scan base-package="it.controller"></context:component-scan>
<mvc:annotation-driven />
<context:annotation-config />
<mvc:resources location="/WEB-INF/static/" mapping="/static/**" />

在 index.jsp 中:

<% response.sendRedirect("default"); %>

然后在控制器中:

@Controller
@RequestMapping("/default")
public class DefaultController {
public String showDefault(){
    return "/static/default.html";
}
}

我一直用jsp,一切都很好;现在我已经尝试了该网站的每一个问题: 我试过了 -mvc:default-servlet-handler -InternalResourceViewResolver,前缀为“/WEB-INF/static”,后缀为“.html”,甚至后缀为void -InternalResourceViewResolver void 和控制器方法返回“/WEB-INF/static/default.html” 没有! 没有显示default.html。为什么那个 .html 文件这么复杂!

【问题讨论】:

  • 您的视图解析是如何配置的?提供这部分上下文 xml
  • 尝试一件事,将 &lt;url-pattern&gt;/&lt;/url-pattern&gt; 更改为 &lt;url-pattern&gt;/app/*&lt;/url-pattern&gt; 并在 URL 中附加应用程序。如果有帮助,请告诉我。
  • 您是否尝试过更改您的@RequestMapping?喜欢@RequestMapping(value="/default")
  • @Andremoniy 根本没有配置,因为 .html 文件不需要通过 servlet,它们是静态资源,所以我使用了 我尝试使用: 但什么也没有。迈克:试过但没有(这是同一件事)新用户:同样的错误:没有找到映射......

标签: java angularjs spring-mvc


【解决方案1】:

这是因为通常 *.jsp 样式的 uri 模式由 servlet 容器处理,在您的情况下,*.html 不由容器处理,而是将路径委托给不知道如何呈现的 Spring MVC这些扩展 作为快速修复,您可以尝试 conf/web.xml 中的以下代码

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

或者

内容协商视图解析器也可以用来代替 InternalResourceViewResolver(我猜你可能正在使用这个),它根据“mediaTypes”属性中声明的文件扩展名返回合适的视图) 示例

 <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
          <property name="order" value="1" />
          <property name="mediaTypes">
            <map>
               <entry key="json" value="application/json" />
                <entry key="html" value="text/html"/>
            </map>
          </property>

【讨论】:

  • 你的第一个解决方案给了我“在名为'dispatcher'的 DispatcherServlet 中找不到带有 URI [/angularState/default] 的 HTTP 请求的映射”你的第二个解决方案给了我 mediaTypes 设置器上的错误,所以我使用以下方法对其进行了调整:stackoverflow.com/questions/37304055/… 然后它给了我与第一次尝试相同的错误。
  • 您的错误表明 DispatcherServlet 正在尝试处理对 .html 页面的请求。下面需要更改 dispatcher/* /.controllers。尝试调用具有不同扩展名的控制器,如 .controllers 并更新 servlet 映射
【解决方案2】:

对于任何会谷歌的人,这里是答案。 问题很简单:我错的只是控制器方法;原来的控制器方法是:

@Controller
@RequestMapping("/default")
public class DefaultController {
    public String showDefault(){
        return "/static/default.html";
    }
}

正确的版本必须是:

@Controller
@RequestMapping("/default")
public class DefaultController {
@RequestMapping(method=RequestMethod.GET)
    public String showDefault(){
        return "/static/default.html";
    }
}

因为每个页面都必须有 GET 访问权限,尤其是主页! 由于该方法上缺少@RequestMapping,我尝试的每个配置都会在.html 文件上给我错误。正如我所说,.html 文件只需要

<mvc:resources location="/WEB-INF/static/" mapping="/static/**" />

进行配置,因为它们是静态资源,不需要 servlet 的帮助。希望这会对某人有所帮助,感谢所有尝试过的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多