好了,我遇到了一个相当常见的错误:
WARNING: No mapping found for HTTP request with URI [/WEB-INF/jsp/index.jsp] in DispatcherServlet with name 'app'
我正在查看现有的答案,但我还没有看到关于组件如何交互的真正好的解释。既然我不能根据现有的答案解决我的问题,我希望有人能详细解释一下DispatcherServlet
和Resolver
的功能。
在Eclipse中进行开发时,我有以下结构:
/src/com/whiuk/philip/web/controller/IndexController.java
/WebContent
/WebContent/WEB-INF
/WebContent/WEB-INF/web.xml
/WebContent/WEB-INF/app-servlet.xml
/WebContent/WEB-INF/jsp/index.jsp
Eclipse Deployment Assembly意味着它按如下方式进行部署:
/src -> WEB-INF/classes
/WebContent -> /
/ivy.xml[*] -> WEB-INF/lib
我有一个web.xml文件,它定义了一个DispatcherServlet
和一个到所有文件的映射(/*
)
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我有一个扫描软件包并定义InternalResourceViewResolver
的app-servlet.xml文件
<context:component-scan base-package="com.whiuk.philip.web" />
<mvc:annotation-driven />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
我有一个具有索引RequestMapping的IndexController
:
@Controller
public class IndexController {
@RequestMapping(value = "/index", method = RequestMethod.GET)
public ModelAndView index() {
return new ModelAndView();
}
}
日志显示这是注册的:
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping registerHandlerMethod
INFO: Mapped "{[/index],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}"
onto public org.springframework.web.servlet.ModelAndView
com.whiuk.philip.web.controller.IndexController.index()
最后,我有一个index.jsp文件。
有人能解释一下导致顶部显示错误的错误配置是什么吗?如果可能的话,请提供一句话来说明DispatcherServlet、解析器的用途以及它们是如何馈入控制器的。
发布于 2012-12-24 08:26:20
从本质上讲,由于servlet被映射到/*
,所以每次请求都会调用它(这没问题),但不幸的是,即使请求被分派到JSP页面(/WEB-INF/jsp/index.jsp
),也会被调用,而不是调用容器默认的DispatcherServlet。
我所知道的修复方法如下:
将其映射到默认的servlet路径/
:
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
你在上面看到的一个问题是,不幸的是,see应用程序根目录下的资源将被DispatcherServlet处理,它不知道如何处理它,修复方法是register a default-servlet-handler this way
<mvc:default-servlet-handler />
发布于 2012-12-24 08:39:34
我将尝试解释Spring Web MVC应用程序中请求的“流”。
向应用程序发送请求时,会发生以下情况:
preHandle
methodspostHandle
方法再次启动(例如,用于修改模型)ViewResolver
解析为真正的视图。根据ViewResolver的不同,结果可以是jsp页面、tiles view、thymeleaf template或许多其他“视图”。在您的示例中,mvc解析视图名称(例如,‘mvc’)到jsp文件(例如,/WEB-INF/jsp/myPage.jsp
)ViewResolver
拦截器(afterCompletion
方法)如果我不是100%正确,或者我遗漏了什么,请随时纠正我:-)
https://stackoverflow.com/questions/14015642
复制相似问题