2012-07-15 84 views
0

我想添加Apache瓷砖到一个简单的Spring MVC webapp我玩,我似乎无法得到它的工作(它没有瓷砖工作)。我做的任何请求都会返回400个错误的请求,日志中没有任何内容(甚至设置为DEBUG),所以我不确定从何处开始删除。据我可以告诉控制器映射的方法从来没有被调用,因为有记录在那里,它不会出现在日志中(加之前,我会得到大量来自春的调试信息关于解决映射到控制器之前它实际上被称为 - 现在不出现)。弹簧mvc 3与瓷砖2给400请求不好

我的配置文件如下(所有在/ WEB-INF /): web.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> 

MYAPP-servlet.xml中:

<?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.xml

<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> 

该布局只包含一个div,用于包装标签的每个零件。所有视图都包含简单的代码,如标题或div。

且用于控制器 ProductController.java:

@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; 
    } 
} 

与行家嵌入Tomcat插件和去到localhost部署此:8080/MyApp的/产物/ 1只是给HTTP 400代码而没有任何其他指示的东西出错。数据库中有一个产品与该ID以及控制器的所有内容一起工作,因为我在添加瓷砖之前尝试了它。

对不起,代码丢失,但我不能得到这个工作一段时间了,我不知道还有什么要尝试或从哪里开始调试。

有什么方法可以强制记录当400个错误的请求被返回时的问题是什么?

回答

0

您错过了servlet配置中对myapp-servlet.xml的引用。

<!-- Handles Spring requests --> 
<servlet> 
    <servlet-name>myapp</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>WEB-INF/spring/myapp-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>myapp</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
+0

不幸的是,这并没有解决它。我很确定它会加载它,因为设置不良路径会导致FileNotFound错误。另外我还有一个印象:如果你没有提供它,它会在WEB-INF中自动查找servletname-servlet.xml,我认为这是以前的情况,因为在加载容器时没有发生错误。启动日志还包含有关映射控制器方法的消息,它假定它找到了我定义Controller扫描的servlet.xml文件。 – 2012-07-26 17:23:39