这是我的 Web.xml
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
我的 servlet-context.xml
<context:component-scan base-package="com.springexample.controller.impl" />
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
最后是 Handler 类。这是在 com.springexample.controller.impl
@Controller
public class IndexControllerImpl implements IndexController {
@RequestMapping("/")
public String index() {
return "index";
}
}
但是要转到 localhost:8080/projectname/
它返回一个 404 错误。
Jul 27, 2013 8:18:31 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/WEB-INF/views/index.jsp] in DispatcherServlet with name 'dispatcherServlet'
Jul 27, 2013 8:18:37 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/index] in DispatcherServlet with name '
这是我的项目结构
最佳答案
按照您在问题中的方式配置 web.xml,特别是:
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
对您的 Web 应用程序发出的所有请求都将被定向到 DispatcherServlet
。这包括 /tasklist/
、/tasklist/some-thing.html
、/tasklist/WEB-INF/views/index.jsp
等请求.
因此,当你的 Controller 返回一个指向 .jsp
的 View 时,DispatcherServlet
会跳入并开始寻找可以服务此请求的 Controller ,它没有找到任何 Controller ,因此 404
。
最简单的解决方法是让你的 servlet url 映射如下:
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
请注意缺少的 *
。这告诉容器任何没有 path info
的请求(最后没有 .xxx 的 url)都应该发送到 DispatcherServlet
。使用此配置,当接收到 xxx.jsp
请求时,不会咨询 DispatcherServlet
,并且您的 servlet 容器的默认 servlet 将为请求提供服务并按预期呈现 jsp。
希望这会有所帮助,我意识到您之前的评论指出问题已解决,但解决方案不能只是将 method=RequestMethod.GET
添加到 RequestMethod
.
关于java - 没有为带有 URI Spring MVC 的 HTTP 请求找到映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897790/