web.xml配置

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

bean配置:

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

    <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/hello">helloController</prop>
            </props>
        </property>
    </bean>
    

    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

    <bean id="helloController" class="com.soo.sailing.ui.item.HelloTestController"></bean>

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

 Controller

public class HelloTestController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mav = new ModelAndView("index");
        mav.addObject("UserName","Spring MVC");
        return mav;
    }
}

请求/hello时出错。

06:24:54.968 [http-nio-8282-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/hello", parameters={}
06:24:54.968 [http-nio-8282-exec-6] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped to com.soo.sailing.ui.item.HelloTestController@355669ff
06:24:54.968 [http-nio-8282-exec-6] DEBUG org.springframework.web.servlet.view.InternalResourceView - View name 'index', model {UserName=Spring MVC}
06:24:54.969 [http-nio-8282-exec-6] DEBUG org.springframework.web.servlet.view.InternalResourceView - Forwarding to [/WEB-INF/index.jsp]
06:24:54.969 [http-nio-8282-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - "FORWARD" dispatch for GET "/WEB-INF/index.jsp", parameters={}
06:24:54.969 [http-nio-8282-exec-6] WARN org.springframework.web.servlet.PageNotFound - No mapping for GET /WEB-INF/index.jsp
06:24:54.969 [http-nio-8282-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - Exiting from "FORWARD" dispatch, status 404
06:24:54.969 [http-nio-8282-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 404 NOT_FOUND

本意是请求/hello,DispatcherServlet请请求map到HelloTestController, HelloTestController返回index View,index view对应WEB-INF目录下的index.jsp。 不过springmvc并不是直接display index.jsp而是做了一个forward请求到 /WEB-INF/index.jsp. 这个forward请求被DispatcherServlet捕获(因为它捕获/*的url-pattern)并交由HandlerMapping处理。由于没有定义对应的mapping,所以就抛出PageNotFound - No maping for GET /WEB-INF/index.jsp的错和404状态。

 

1)当修改url-pattern从/*改为/时,在forward/WEB-INF/index.jsp请求时就能直接display index.jsp

2)如果不修改url-pattern, 而是在serlvet配置bean文件中添加<mvc:default-servlet-handler/>就会交由web容器来处理,也可以成功。

 

发表评论