Spring MVC - 使用jquery加载函数时找不到页面

时间:2014-11-14 17:59:03

标签: jquery spring-mvc

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)的相同示例,那么它工作正常。配置有问题吗?

1 个答案:

答案 0 :(得分:0)

您可能需要将网页从.html重命名为.jsp(即header.jspfooter.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.htmlfooter.html这就是为什么我们添加了另外两种方法。

理想情况下,您不希望为每个被调用的页面(过多的开销)向servlet发出三个请求。相反,使原始JSP页面(即form.jsp)包含所有其他两个页面(通过<@ include ...@>语法),以避免必须为每个新页面编写新方法。

你也可以添加一个模式(就像JSP页面本身的视图解析器一样)但是,你再次在每页进行多次调用(在本例中为3),这是不理想的。