今天下午没事,就搭建一个最基本的springmvc环境,玩一下springmvc,就在环境搭建好部署完成的时候,我访问地址栏怎么也反不回视图,解决了一下午没弄出来,晚上又加班终于搞出来了。
首先看看代码提示什么:
警告: No mapping found for HTTP request with URI [/views/bank/createAndpay.jsp] in DispatcherServlet with name 'spring'
在看一下我的web.xml配置文件:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 配置Spring mvc下的配置文件的位置和名称 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
spring-mvc.xml配置文件:
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
这样配置也没问题呀,为什么就提示找不到对应的URI呢?
原来<url-pattern>
/*和<url-pattern>/
是有区别的,讲解一下:
①:<url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url.
②:<url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等),当去访问Controller下的/login,跳转到login.jsp ,然后进过dispatchservlet的时候,由于是/* ,有会以localhost:8088/login/login.jsp 去请求Controller ,那么如果Controller没有 /login/login.jsp 的Mapping映射,则会报404 错误!
下面是springmvc的请求处理流程图: