Web.xml中
...
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>SpringDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.spring.springMVC</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringDispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
...
Mvc配置
@Configuration
@ComponentScan(basePackages="com.spring.springMVC")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
}
控制器
@Controller
public class HomeController {
@RequestMapping(value="/")
public ModelAndView test(HttpServletResponse response) throws IOException{
return new ModelAndView("form");
}
}
form.jsp
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Twitter Bootstrap 3 Fluid Layout Example</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(function(){
$("#header").load("header.html");
$("#footer").load("footer.html");
});
</script>
</head>
<body>
<div id="main">
<div id="header"></div>
<!--Remaining section-->
<div id="footer"></div>
</div>
</body>
</html>
标题&amp;页脚htmls位于form.jsp所在的位置。
Web应用程序
资源
JS
CSS
WEB-INF
意见
form.jsp
了header.html
footer.html
我找不到标题和页面的页面footer.html。如果我尝试没有spring mvc(只有jsp,servlet)的相同示例,那么它工作正常。配置有问题吗?
答案 0 :(得分:0)
您可能需要将网页从.html
重命名为.jsp
(即header.jsp
和footer.jsp
) - 将它们保留在现在的位置(WEB-INF\views
})并在控制器中添加这些
@Controller
public class HomeController {
@RequestMapping(value="/")
public ModelAndView getForm(HttpServletResponse response) throws IOException{
return new ModelAndView("form");
}
@RequestMapping(value="/header.html")
public ModelAndView getHeader(HttpServletResponse response) throws IOException{
return new ModelAndView("header");
}
@RequestMapping(value="/footer.html")
public ModelAndView getFooter(HttpServletResponse response) throws IOException{
return new ModelAndView("footer");
}
}
找不到消息的原因是你告诉servlet处理所有请求(url-pattern:'/'
)所以当jQuery请求header.html
页面时,它会被servlet处理并发送到控制器。
控制器知道如何处理URL模式为/
的请求(第一种方法),但它无法知道如何处理header.html
或footer.html
这就是为什么我们添加了另外两种方法。
理想情况下,您不希望为每个被调用的页面(过多的开销)向servlet发出三个请求。相反,使原始JSP页面(即form.jsp)包含所有其他两个页面(通过<@ include ...@>
语法),以避免必须为每个新页面编写新方法。
你也可以添加一个模式(就像JSP页面本身的视图解析器一样)但是,你再次在每页进行多次调用(在本例中为3),这是不理想的。