关于springMVC的小知识
springMVC介绍
- SpringMVC是一个基于MVC模式的WEB/表现层框架,它解决WEB开发中常见的问题:参数接收、文件上传/下载、表单验证、国际化等等;
- SpringMVC作为Spring框架一个非常重要的功能模块,可以与Spring无缝集成,提高开发效率;
- Spring是一个轻量级的Java 开发框架,为了解决企业应用开发的复杂性而创建。
- SpringMVC以Spring框架为核心,为应用程序中的Web层(表现层)提出的一套优秀的解决方案;
关于MVC模式
MVC是程序设计的一种思想
- M:后台JAVA代码Model;包括业务代码、持久化层代码、实体Model/domain等
- V:页面View
- C:核心控制代码Controller
关于核心控制器
- 核心控制器本质就是一个Servlet(由SpringMVC框架提供)
- 核心控制器需要自己配置,交给spring容器管理(配置成IOC容器中的一个bean元素)
- 在SpringMVC中使用的是DispatcherServlet为核心控制器。
- DispatcherServlet核心控制器会拦截匹配的请求,把拦截下来的请求,依据相应的规则分发到目标Controller来处理。
关于web.xml配置文件
springMVC是对servlet的封装(都是用来处理请求的)
springMVC核心的DispatcherServlet最终继承自HttpServlet。
两者的关系类似mybatis和JDBC的关系
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置监听器:当监听器检测到web服务器启动(tomcat启动),就立刻启动spring框架 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 启动spring框架肯定需要核心配置文件;这是spring核心配置文件的地址 -->
<!-- 如果在web.xml中不写<context-param>配置信息,默认的路径是/WEB-INF/applicationontext.xml,
在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 用来声明一个servlet的数据 -->
<servlet>
<!-- 指定servlet的名称 -->
<servlet-name>DispatcherServlet</servlet-name>
<!-- 指定servlet的类名称 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 加载spring-mvc的配置文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-mvc.xml</param-value>
</init-param>
<!-- Web应用启动时立即创建Servlet实例 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 所有对这个路径下资源的请求都会由servlet-name中定义的servlet处理 -->
<servlet-mapping>
<!-- 这个servlet-name的值必须和上面的对应 -->
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--强制指定字符编码,即使request或response设置了字符编码,也会强制使用当前设置的,任何情况下强制使用此编码-->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
关于spring-mvc.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 1.静态资源放行 -->
<mvc:default-servlet-handler />
<!-- 2.扫描包路径:上下文组件扫描 ,Spring容器会去扫描cn.itsource这个包及其子包中所有的类, 如果发现类上有类似@Controller这样注解,就会创建该类的对象,并进行管理 -->
<context:component-scan base-package="cn.itsource.controller"></context:component-scan>
<!-- 3.开启Spring对Mvc的支持:能够使用@RequestMapping -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 4.视图解析器:统一处理【webmvc】 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
关于路径的 /和/*
/*
1.会拦截所有url(包括/login、.jsp、.js、png和.html等),一般只用在过滤器上,
2.会出现访问jsp视图时被Spring的DispatcherServlet拦截,导致找不到请求资源引入的404错误,其他资源也一样,所以在SpringMVC的前端控制器中配置/*,是一个错误的配置方式;
/
1./也是拦截所有,只不过不会拦截*.jsp;
2./不会拦截.js、.css、.png、.html、*.jsp等后缀型url;
3.但是/匹配覆盖了Tomcat的默认控制器,导致静态资源访问失效,静态资源也被拦截,只有.jsp不会被拦截;
4.如果想访问静态资源,必须要开启静态资源访问权限;
注意:Tomcat本身自带有一个默认控制器,匹配方式也是"/",这个默然控制器用于处理静态资源请求。如果我们配置SpringMVC前端控制器为"/",那么Tomcat的默认控制器就不生效,导致静态资源无法访问;