我搜索了整个网站,没有任何建议奏效!我正在尝试制作一个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文件如此复杂!
这是因为通常*. 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的帮助。希望这会对某人有所帮助,感谢所有尝试过的人。