Phi*_*use 16 spring jsp spring-mvc
好的,所以我遇到了相当常见的错误:
WARNING: No mapping found for HTTP request with URI [/WEB-INF/jsp/index.jsp] in DispatcherServlet with name 'app'
我正在查看现有的答案,我没有看到组件如何相互作用的真正好的解释.鉴于我无法根据现有答案解决我的问题,我希望有人可以提供有关s DispatcherServlet和Resolvers 功能的详细说明.
在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
Run Code Online (Sandbox Code Playgroud)
Eclipse Deployment Assembly意味着它部署如下:
/src -> WEB-INF/classes
/WebContent -> /
/ivy.xml[*] -> WEB-INF/lib
Run Code Online (Sandbox Code Playgroud)
我有一个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>
Run Code Online (Sandbox Code Playgroud)
我有一个app-servlet.xml文件,它扫描包并定义InternalResourceViewResolver:
<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>
Run Code Online (Sandbox Code Playgroud)
我有一个IndexController索引的RequestMapping:
@Controller
public class IndexController {
@RequestMapping(value = "/index", method = RequestMethod.GET)
public ModelAndView index() {
return new ModelAndView();
}
}
Run Code Online (Sandbox Code Playgroud)
日志显示已注册:
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()
Run Code Online (Sandbox Code Playgroud)
最后我有一个index.jsp文件.
有人可以解释导致错误配置的原因是导致顶部显示的错误,并且如果可能的话,还会提供DispatcherServlet,Resolvers以及它们如何输入控制器的目的.
mic*_*cha 48
我将尝试在Spring Web MVC应用程序中解释请求的"流程".
向您的应用程序发送请求时,会发生以下情况:
preHandle方法处理postHandle方法再次启动(例如,用于修改模型)ViewResolver.根据ViewResolver,结果可以是jsp页面,tile视图,thymeleaf模板或许多其他"Views".在您的情况下,ViewResolver将视图名称(例如'myPage')解析为jsp文件(例如/WEB-INF/jsp/myPage.jsp)afterCompletion方法)如果我不是100%正确或者我错过了某些东西,请随意纠正我:-)
本质上正在发生的事情是,因为你有Spring的DispatcherServlet映射到/*,它往往被称为为每个请求(这是好的),但是当请求被分派到JSP页面(可惜被甚至调用/WEB-INF/jsp/index.jsp),而不是容器默认servlet被调用.
我所知道的修复方法如下:
将其映射到默认的servlet路径/:
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
您将在上面看到的一个问题是,不幸的是,您的webapp根目录下的资源将由DispatcherServlet处理,而DispatcherServlet将不知道如何处理它,修复方法是以这种方式注册default-servlet-handler:
<mvc:default-servlet-handler />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24734 次 |
| 最近记录: |