SSM基于注解整合
基于注解的方式,没有web.xml
使用的是web3.0
环境搭建:
1. 新建一个maven项目,默认使用的是web3.0,没有web.xml文件
由于没有web.xml文件,所以pom.xml文件会报错.
2. 配置maven插件,忽略错误.
直接在pom.xml文件中 alt + / 就会出现提示:
然后在 maven-war-plugin进行配置:
可以忽略没有web.xml.
此时需要更新 maven-update
设置项目的运行时环境
此时也可以在pom.xml里面手动添加maven编译插件:
需要注意的是:运行时环境得到jdk版本一定要大于编译时的jdk的版本,不然会有问题.
基于注解开发,需要知道的一个知识点:
当你一把项目放到Tomcat容器,启动运行之后,tomcat会去找依赖中找一个核心类:
Tomcat找到这个文件之后,会读取这个文件的内容:
然后Tomcat会通过反射,创建这个对象:
onStartUp方法
这个类的onStartUp方法,会将所有WebApplicationInitializer的子类都加到这个类的set集合.用于交给spring来创建对象,
3. 创建一个JtWebAppInitializer类
继承一个抽象类;
我们还需要一个类来代理spring的核心配置文件,用来进行包扫描,和开启mvc注解:
实现这个接口的类,可以用来充当spring的核心配置文件:
为了方便,可以让自己的类继承这个接口的子类;
需要把配置类加到前端控制器类,相当于把配置文件加到前端控制器DispatherServlet中;
这个类的getServletConfigClasses:
此方法负责加载Controllers, ViewResovlers, HandlerMapping
对于AppServletConfig配置类,还可以增加拦截器,以及可以限定只去扫描@Controller,不去扫描@Service以及@Reporisity
重新理解:
我们写的JtWebAppInitializer的作用就相当于web.xml,这个类其实就是初始化的一个容器,注意并不是DispatherServlet,这个类知识把DispatherServlet进行初始化而已.
看最里面的接口:
这个接口是spring的.
看这个接口的解释:
翻译:这个接口是被用在Servlet3.0+的环境下实现的,目的是以程序的方式来配置的,是跟传统的web.xml(或者结合web.xml)实现的刚好相对的.
这个接口的实现类将会被SpringServletContainerInitializer自动检测到,这些实现类将被任何的Servlet3.0+容器自动创建.
Servlet3.0设计来支持用Spring的SPI来实现servlet容器的基于编码的配置,
这个类将会被加载和初始化,并且它到底方法将会被任何的Servlet3.0-容器在容器启动时实现.
JtWebAppInitializer的getServletConfigClass()和getRootConfigclasses()
==
现在还需要一个AppRootConfig类,这个类是用来做后端的配置的,创建DruidDataSOurce,等连接资源,扫描com.jt的service注解
配置AppRootConfig类:
>>1.配置DruidDataSource:
注意在web项目下,加载属性文件是要加上 classpath 的
>>1.2测试DruidDataSource是否配置好了;
查询出数据就说明DruidDataSource配置好了;
>>2.1配置SqlSessionFactory
2.2测试
>>3.1配置dao接口的包扫描:
>>4.2写service层:由接口
>>4.2去测试service:
这种情况下会报错的;
出现这种错的原因是:AppRootConfig默认是要去扫描com.jt下面所有类的的所有注解,会根据这个注解创建对象.
这时@Controller也要去扫描,但是这是的@Controller是mvc来扫描的,并且需要在tomcat环境下创建,但是现在我们是在Junit下做测试,所以会报错,所以AppRootConfig在扫描时,应该不去扫描@Controller注解:
但是如果只是这样配置的话,@Service这个注解也不会去扫描,所以还得加上@Service注解;
4. 配置Controller
Produces 的配置 是用来解决响应乱码的问题