Spring mvc 带tiles 2的Spring mvc 3给出了400个错误请求

Spring mvc 带tiles 2的Spring mvc 3给出了400个错误请求,spring-mvc,bad-request,apache-tiles,Spring Mvc,Bad Request,Apache Tiles,我正在尝试将ApacheTiles添加到一个简单的SpringMVCwebapp中,但我似乎无法让它工作(没有Tiles它也能工作)。我发出的任何请求都会返回400个错误的请求,日志中不会显示任何内容(甚至设置为DEBUG),因此我不确定从何处开始消除bug。据我所知,控制器映射方法从未被调用,因为在那里有日志记录,它没有出现在日志中(加上在此之前,我会从spring获得很多关于在实际调用之前解析到控制器的映射的调试信息-现在没有出现) 我的配置文件如下(全部在/WEB-INF/下): web.

我正在尝试将ApacheTiles添加到一个简单的SpringMVCwebapp中,但我似乎无法让它工作(没有Tiles它也能工作)。我发出的任何请求都会返回400个错误的请求,日志中不会显示任何内容(甚至设置为DEBUG),因此我不确定从何处开始消除bug。据我所知,控制器映射方法从未被调用,因为在那里有日志记录,它没有出现在日志中(加上在此之前,我会从spring获得很多关于在实际调用之前解析到控制器的映射的调试信息-现在没有出现)

我的配置文件如下(全部在/WEB-INF/下): web.xml:

使用maven embedded tomcat插件部署它,并转到localhost:8080/myapp/product/1,只会给出HTTP400代码,而没有任何其他错误指示。DB中有一个产品具有该id,从控制器到下一步的所有功能都可以正常工作,因为我在添加磁贴之前已经尝试过了

很抱歉代码丢失,但我现在有一段时间无法让它工作,我不知道还有什么可以尝试,也不知道从哪里开始调试


有没有办法强制记录400个错误请求返回时的问题?

servlet配置中缺少对myapp-servlet.xml的引用


myapp
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
WEB-INF/spring/myapp-servlet.xml
1.
myapp
/

不幸的是,这并不能解决问题。我很确定它会加载它,因为设置错误路径会导致FileNotFound错误。另外,我的印象是,如果不提供,它会自动在WEB-INF中查找servletname-servlet.xml,我认为以前就是这样,因为加载容器时没有抛出错误。启动日志还包含关于映射控制器方法的消息,这假定它找到了servlet.xml文件,我在其中定义了控制器扫描。
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <display-name>myapp</display-name>    

    <!-- Enable escaping of form submission contents -->
    <context-param>
        <param-name>defaultHtmlEscape</param-name>
        <param-value>true</param-value>
    </context-param>        
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
    </context-param>

    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter>
        <filter-name>HttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>HttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Handles Spring requests -->
    <servlet>
        <servlet-name>myapp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>myapp</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>
</web-app>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd                 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

    <!-- The controllers are autodetected POJOs labeled with the @Controller 
        annotation. -->
    <context:component-scan base-package="com.myapp.controller"
        use-default-filters="false">
        <context:include-filter expression="org.springframework.stereotype.Controller"
            type="annotation" />
    </context:component-scan>

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving 
        up static resources -->
    <mvc:resources location="/resources/" mapping="/resources/**" />

    <!-- Allows for mapping the DispatcherServlet to "/" by forwarding static 
        resource requests to the container's default Servlet -->
    <mvc:default-servlet-handler />

    <mvc:annotation-driven />

    <bean id="tilesConfigurer"
        class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles.xml</value>
            </list>
        </property>
    </bean>    
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.tiles2.TilesView" />
    </bean>
</beans>
<tiles-definitions>    
    <definition name="product_detail" template="/WEB-INF/layout/detail.jsp">
        <put-attribute name="header" value="/WEB-INF/view/header.jsp" />
        <put-attribute name="banner" value="" />
        <put-attribute name="body" value="/WEB-INF/view/product.jsp" />
        <put-attribute name="footer" value="/WEB-INF/view/footer.jsp" />
    </definition>
</tiles-definitions>
@Controller
@RequestMapping("/product")
public class ProductController {

    protected Logger logger = Logger.getLogger(getClass());

    @Autowired
    private ProductService productService;

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public ModelAndView getProduct(@PathVariable Long id) {
        logger.info("GET product " + id);
        Product product = productService.find(id);
        ModelAndView mv = new ModelAndView("product_detail", "product", product);
        return mv;
    }
}