当前位置 : 主页 > 编程语言 > java >

春天 – DispatcherServlet,Resolver和Controllers如何交互?

来源:互联网 收集:自由互联 发布时间:2021-06-25
好,我遇到了相当常见的错误: 警告:在DispatcherServlet中没有使用URI [/WEB-INF/jsp/index.jsp]的HTTP请求的映射,名称为“app” 我正在查看现有答案,我没有看到组件如何相互影响的真正好解释
好,我遇到了相当常见的错误:

警告:在DispatcherServlet中没有使用URI [/WEB-INF/jsp/index.jsp]的HTTP请求的映射,名称为“app”

我正在查看现有答案,我没有看到组件如何相互影响的真正好解释.看到我根据现有的答案无法解决我的问题,我希望有人可以详细的说明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

Eclipse部署装配意味着它部署如下:

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

我有一个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>

我有一个IndexController具有索引的RequestMapping:

@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,解决方案的目的以及它们如何进入控制器.

基本上发生的是,由于您将Spring的DispatcherServlet映射到/ *,因此每个请求都调用(这是可以的),但是即使请求被分派到JSP页面(/ WEB-INF / jsp / index.jsp),而不是容器默认的servlet被调用.

我所知道的修复如下:

将其映射到默认的servlet路径/代替:

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

您上面看到的一个问题是,您的webapp根目录下的资源将不幸得到DispatcherServlet的处理,DispatcherServlet将不知道该怎么做,修复程序是register a default-servlet-handler this way:

<mvc:default-servlet-handler />
网友评论