提问者:小点点

Spring mvc无法访问. html文件


我搜索了整个网站,没有任何建议奏效!我正在尝试制作一个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>

在调度器-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/静态”,后缀为“.html”,甚至后缀为void-InternalResourceViewResolver void和控制器方法返回“/WEB-INF/静态/default.html”没有!没有显示default.html。为什么那个.html文件如此复杂!


共2个答案

匿名用户

这是因为通常*. jsp样式uri模式由servlet容器处理,在您的情况下*.html不由容器处理,而是将路径委托给SpringMVC它不知道如何呈现这些扩展作为快速修复,您可以尝试下面的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>

匿名用户

问题很简单:我错的只是控制器方法;最初的控制器方法是:

@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访问权限,最重要的是主页!由于方法上缺少@Request estMaps,我尝试的每个配置都会给我错误的. html文件。正如我所说,.html文件只需要

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

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

相关问题