2012-08-10 38 views
1

我在Tomcat上遇到了Spring MVC的这个问题,我认为这个问题与post中的问题相同,但他们没有发布解决方案。tomcat 7上的Spring MVC为没有路径的请求提供HTTP 405

的web.xml

<!-- Spring MVC app --> 
    <servlet> 
    <servlet-name>client</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/client/client-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>client</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 

客户servlet.xml中

<!-- Enables the Spring MVC @Controller programming model --> 
    <mvc:annotation-driven /> 

    <context:component-scan base-package="com.company.client.controllers" /> 

    <!-- Enable an interceptor to set up the Trace objects for all Controller invocations --> 
    <mvc:interceptors> 
    <bean class="com.company.client.interceptor.TraceInterceptor"/> 
    </mvc:interceptors> 

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving 
    up static resources in the ${webappRoot}/resources directory --> 
    <mvc:resources mapping="/resources/**" location="/WEB-INF/client/resources/" /> 

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources 
    in the /WEB-INF/client/views directory --> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
    <property name="prefix" value="/WEB-INF/client/views/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

我用一个标准ContextLoaderInitializer。

我的控制器使用@RequestMapping(value = {"", "/*"}, method = RequestMethod.GET)

@RequestMapping(value = {"", "/*"}, method = RequestMethod.GET) 
    public String home(Model model) { 
    retrieveOffers(model); 
    logger.warning("Loading home page"); 
    return "main"; 
    } 

当我访问mydomain.com或mydomain.com/ - 我得到Tomcat的405 GET不支持错误。 如果我把任何东西放在尾随路径中,它就会加载页面。 (例如mydomain.com/a)

有趣的是,我总是看到“加载主页”日志语句,并且从我的日志中请求之间没有区别。就好像Tomcat在控制器完成和视图渲染之间截获响应。有什么想法吗?

回答

2

web.xml中有一个声明说我的团队中有人添加了。它在控制器之后拦截响应并将其重定向到一个没有实现doget的servlet。希望稍后可以节省一些人。使用以下命令确保默认的servlet容器不会覆盖spring。

<!-- Disables Servlet Container welcome file handling. Needed for compatibility with Servlet 3.0 and Tomcat 7.0 --> 
    <welcome-file-list> 
    <welcome-file></welcome-file> 
    </welcome-file-list> 
0

它看起来像是Spring无法正确解析视图。当你的控制器方法返回一个简单的字符串时,它会查找一个根据你的调度器servlet配置中的值添加前后值的相关视图。

是否配置了InternalResourceViewResolver?像下面这样:

<bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/WEB-INF/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 

然后在你的控制器结束,春天会找你的WEB-INF文件夹中的文件main.jsp中(它需要字符串“主”,并添加前缀和后缀) 。

这一切是否正确?你可否提供弹簧配置?

+0

感谢您的帮助 - 我添加了spring配置,基本上我已经准确地发布了您所发布的内容,除了我特意将viewClass设置为JstlView(我认为是默认设置)。奇怪的是与路径和返回相同的字符串'主'视图得到解决。 – 2012-08-10 16:58:46

相关问题