SpringMVC 常用applicationContext.xmlweb.xmlservlet-mvc.xml简单配置

采得百花成蜜后,为谁辛苦为谁甜。这篇文章主要讲述SpringMVC 常用applicationContext.xmlweb.xmlservlet-mvc.xml简单配置相关的知识,希望能为你提供帮助。
在进行学习配置文件之前,为了加深对框架的认识,简单的做了SSM框架的简单实验。然后画出listAll查询方法的整个过程的思维导图。

SpringMVC 常用applicationContext.xmlweb.xmlservlet-mvc.xml简单配置

文章图片
整个过程中的web.xml、SpringMVC.xml、applicationContext.xml配置文件起到关键作用,同时也是为了加深理解,在此做下记录,请看下面! github源码链接:https://github.com/Jian0110/ssm 一、SpringMVC的web.xml配置关于SpringMVC 的web.xml详细介绍,我之前已经做过了介绍并记录,请看Spring MVC的web.xml配置详解
1.思维导图:
SpringMVC 常用applicationContext.xmlweb.xmlservlet-mvc.xml简单配置

文章图片

2.详细描述:(1)servlet配置(即SpringMVC核心分发器Dispatcher):
  • dispatcher配置与servlet-mvc.xml配置 若没有< init-param> 初始化servlet-mvc.xml,那么就会自动寻找servletname-servlet.xml并加载!
< servlet> < servlet-name> mvc-dispatcher< /servlet-name> < servlet-class> org.springframework.web.servlet.DispatcherServlet< /servlet-class> < !-- spring mvc的配置文件:springMVC.xml --> < init-param> < param-name> contextConfigLocation< /param-name> < param-value> classpath:springMVC.xml< /param-value> < /init-param> < load-on-startup> 1< /load-on-startup> < /servlet>

 
  • dispatcherer 拦截路径配置:
< servlet-mapping> < servlet-name> mvc-dispatcher< /servlet-name> < url-pattern> /< /url-pattern> < /servlet-mapping>

 
(2)applicationContext.xml的自动装配:
ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext.xml的配置信息。
< context-param> < param-name> contextConfigLocation< /param-name> < param-value> classpath:applicationContext.xml< /param-value> < /context-param> < listener> < listener-class> org.springframework.web.context.ContextLoaderListener< /listener-class> < /listener>

 
二、SpringMVC的servlet-mvc.xml配置servlet-mvc.xml配置文件主要是用来扫描@Controller注解并注入,还有视图解析转向等。
1.思维导图
SpringMVC 常用applicationContext.xmlweb.xmlservlet-mvc.xml简单配置

文章图片

2.详细描述:(1)annotation-configcomponent-scan
  • servlte-mvc.xml扫描注入bean的时候只需要找到@Controller注解,同时注入bean,其他的bean的注入是依靠applicationContext.xml进行的。
  • 关于扫描包component-scan的详细介绍可以看SpringMVC扫描包使用
< !-- 1. 扫描Controller,并将其生命周期纳入Spring管理(这里只扫描@Controller) --> < !--< context:annotation-config/> --> < context:component-scan base-package="com.test.controller"> < context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> < /context:component-scan>

 
  • annotation-config:对已被注册到Spring容器里的Bean进行操作(比如注入到某个类的内部),主要的作用是为了能够识别相应的注解(@Autowired、@Required、@Resource、@ PostConstruct、@ PreDestroy等)。   
  • component-scan:不仅具有annotation-config的功能,还可以扫描指定包下的类,将拥有注解的它们注册到Spring容器中中。
(2)annotation-driven注解驱动:
SpringMVC就知道了我们启用注解驱动。然后通过context:component-scan标签的配置,会自动为我们将扫描到的@Component,@Controller,@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求。
< !-- 注解驱动,以使得访问路径与方法的匹配可以通过注解配置 --> < mvc:annotation-driven />

 
(3)default-servlet-handler静态资源:
由于在web.xml中的的< /servlet-mapping> 拦截了所有的url请求,那么如果请求中使用到静态资源的话,则无法加载像js,css,jgp这样格式的资源。< mvc:default-servlet-handler /> 就是解决这个问题的,具体请看这位博主写的,解释很清晰mvc:default-servlet-handler标签的的作用
< !-- 3. 静态页面,如html,css,js,images可以访问 --> < mvc:default-servlet-handler />

 
(4)InternalResourceViewResolver视图解析器:
Controller层视图跳转mav.setViewName("listAll"); 中,只需要输入listAll.jsp文件前缀listAll即可跳转。
< !-- 4. 视图定位到/WEB/INF/jsp 这个目录下 --> < bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> < property name="viewClass" value="https://www.songbingjia.com/android/org.springframework.web.servlet.view.JstlView" /> < property name="prefix" value="https://www.songbingjia.com/WEB-INF/jsp/" /> < property name="suffix" value="https://www.songbingjia.com/android/.jsp" /> < /bean>

 
三、SpringMVC的applicationContext.xml配置 1.思维导图:
SpringMVC 常用applicationContext.xmlweb.xmlservlet-mvc.xml简单配置

文章图片

2.详细描述:(1)component-scan自动扫描:
这里的component-scan不同servlet-mvc.xml中的component-scan,它不光只扫描@Controller,扫描包com.test的所有都会被注入。
< context:component-scan base-package="com.test" />

 
(2)dataSource数据库配置:
在此之前,通常还需要引入db.properties数据库配置文件,才能使用EL表达式。
< bean class="org.springframework.beans.factory.config.PropertiesFactoryBean"> < property name="locations"> < value> classpath*:bd.properties< /value> < /property> < /bean>

 
数据库简单配置如下:
< bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> < !-- 数据库连接基本信息 --> < property name="driverClassName" value="https://www.songbingjia.com/android/${driver}" /> < property name="url" value="https://www.songbingjia.com/android/${url}?useUnicode=true& amp; characterEncoding=utf8& amp;" /> < property name="username" value="https://www.songbingjia.com/android/${username}" /> < property name="password" value="https://www.songbingjia.com/android/${password}" /> < !-- 数据连接池基本信息 --> < property name="maxActive" value="https://www.songbingjia.com/android/${maxActive}" /> < property name="maxIdle" value="https://www.songbingjia.com/android/${maxIdle}" /> < property name="defaultAutoCommit" value="https://www.songbingjia.com/android/false" /> < property name="timeBetweenEvictionRunsMillis" value="https://www.songbingjia.com/android/3600000"/> < property name="minEvictableIdleTimeMillis" value="https://www.songbingjia.com/android/3600000"/> < /bean>

(3)扫描mybatis.xml文件:
< !-- 3. 扫描存放SQL语句的Category.xml --> < bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"> < property name="typeAliasesPackage" value="https://www.songbingjia.com/android/com.test.pojo" /> < property name="dataSource" ref="dataSource"/> < property name="mapperLocations" value="https://www.songbingjia.com/android/classpath:com/test/mapper/*.xml"/> < /bean>

 
(4)配置Mapper接口    :
Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring。  详情请看文章MapperScannerConfigurer自动扫描 将Mapper接口生成代理注入到Spring
< !-- 4. 扫描Mapper,并将其生命周期纳入Spring的管理 (配置Mapper接口)--> < bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> < property name="basePackage" value="https://www.songbingjia.com/android/com.test.mapper"/> < /bean>

【SpringMVC 常用applicationContext.xmlweb.xmlservlet-mvc.xml简单配置】 
MapperScannerConfigurer将会创建MapperFactoryBean,之后自动装配。MapperFactoryBean创建的代理类实现了 XXXMapper接口,并且注入到应用程序中。这个bean就可以直接在应用程序中使用,比如:
public class UserServiceImpl implements UserService {//直接使用userMapper private UserMapper userMapper; public void setUserMapper(UserMapper userMapper) { this.userMapper = userMapper; }public User getUser(String userId) { return this.userMapper.getUser(userId); } }

(5)TransactionManager事务管理:
< bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> < property name="dataSource" ref="dataSource"> < /property> < /bean> < tx:annotation-driven transaction-manager="txManager"/>

 
这样就可以在在Service实现类中增加@Transactional注解即可控制事务。

    推荐阅读