java开发第一篇,ssm框架+maven

java web开发:
对java web而言,服务器上需要有一个web容器,静态页面在容器外面就处理掉了,但动态程序需要由web容器来实例化servlet对象,servlet本质上是用java实现的接口及其实现类。对于tomcat等web容器,web.xml中的listener,filter,servlet标签指定了加载的类。web请求的流程为:tomcat(或其他容器)读取web.xml配置文件,然后会首先实例化一个ServletContext的类,并通过context-param标签赋予其键值对参数。然后通过listener标签加载监听类,负责一些监听事项,比如通过代码控制请求的线程数目等。然后是filter标签,实例化过滤器,可以在请求对象被servlet处理前处理请求对象,响应对象被servlet处理后处理响应对象。这些完成之后,才进行servlet的实例化。最后按照servlet标签实例化servlet对象(比如用springMVC时,就换成spring的servlet类),servlet实例化一次,服务器程序关掉时才会释放,是处理request对象,返回response对象的核心代码。


一、spring部分:
1、maven,maven是项目自动管理软件,能够自动地根据xml的配置获取、更新项目依赖的jar包。
2、spring,spring提供了listener,在listener中初始化,首先初始化一个IOC容器管理器:ContextLoader,它将创建一个IOC容器和一个配置文件(xml)解析器,通过解析文件将bean装载进来。
3、mybatis,单独使用时需要制定一个通用的配置文件(xml),实例化sqlsession时解析这个文件,包括settings,environments,mappers等,settings是一些通用配置,比如自增主键,environments指定数据库连接,mappers是查询语句映射。
4、mybatis-spring整合了spring与mybatis,使用时与单独的mybatis有所不同:
单独使用mybatis时,用SqlSessionFactoryBuilder来获取SqlSessionFactory,进而获得可以执行sql语句的SqlSession对象,这个过程使用了配置文件(xml)来完成建立jdbc的连接等工作。用spring整合之后,用SqlSessionFactoryBean来替SqlSessionFactoryBuilder去建立SqlSessionFactory,SqlSessionFactoryBean有configLocation和mapperLocations两个属性,分别放置主配置文件和sql映射配置文件。然后可以有3种方式来生成SqlSession:
(1)先来机械地描述一种方式:大致而言,dao层的接口(不需要实现)与同名的mapper.xml搭配注入到MapperFactoryBean中,spring会在程序运行时自动创建mapper(所以dao层不需要接口的实现类),然后在service层的bean中注入这个mapper,即可使用,这个mapper封装了sqlsession的初始化、open、close过程,对程序员透明。当dao层接口众多时(对应mapper也众多),可以用MapperScanConfigurer来自动扫描,不需要显式地描述MapperFactoryBean了,spring会自动生成,使用自动装配即可在service中加以使用。
遇到的坑:
首先说明,用自动装配的方式注入,那么new关键字是在spring的ioc容器初始化完成之后执行的,因此,new关键字内部的Autowired是失效的(扫描过程在ioc初始化完成前完成了,当然spring的扫描范围要描述在xml文件中,保险起见扫描全部)。因此在spring中尽量放弃使用new,由此带来了测试问题,测试需要单元测试,这是因为main函数是静态函数,不能拿到非静态的成员变量,而且又不能使用new,在测试时,不启动servlet,没有服务器运行,所以没有加载web.xml(会在这里配置所需要的其他配置文件,比如spring的配置文件),所以要手动加载spring配置文件@ContextConfiguration(locations = {"classpath*:spring-mybatis.xml"}),并引入相关类。其他还有些小坑,例如mapper.xml路径,resultMap与resultType等等。

二、springMVC部分:
再凝练一下http请求,web容器,即tomcat(另如iis等)是一个在运行的程序,它就是server;servlet狭义上指接口,广义上是实现了该接口的所有类,servlet接口提供了http请求的方法,如doGet,doPost等(service是搞什么的呢?)。当第一个请求发送过来时,tomcat程序会实例化servlet的实现类,处理这些请求并返回结果给服务器。注意,它不是独立的应用程序,没有main方法,是由其他程序调用的(web容器)。

springMVC,DispacherServlet就是springMVC实现servlet接口的类,在web.xml加载之初,首先用ContextLoaderListener来加载通用beans(ContextLoaderListener的参数是由contextConfigLocation指定的),因此,使用spring时,务必指定listener为spring提供的listener:ContextLoaderListener,此类会完成相应的spring初始化工作。DispacherServlet则初始化与web相关的beans。这两部分对应的分别就是spring和springMVC的配置文件。spring配置文件中,除了与mybatis,数据库相关的配置以外,重要的是对于代码的扫描,这就是@注释起作用的原因(是不是很类似于angular的注释!)。对于mybatis的配置,重要的是MapperScannerConfigurer对于dao层的扫描。springMVC的配置相对简单容易理解。完成后即可使用SMM框架了。

三、mybatis

model->mapper->dao->service->serviceImp->test等