Tomcat:
Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。
Tomcat目录:
tomcat
|---bin:存放启动和关闭tomcat脚本
|---conf:存放不同的配置文件(server.xml和web.xml);
|---doc:存放Tomcat文档;
|---lib/japser/common:存放Tomcat运行需要的库文件(JARS);
|---logs:存放Tomcat执行时的LOG文件;
|---src:存放Tomcat的源代码;
|---webapps:Tomcat的主要Web发布目录(包括应用程序示例);
|---work:存放jsp编译后产生的class文件;
Tomcat配置文件:
我们打开con文件夹可以看到Tomcat的配置文件:
server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;
tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户 指定角色等将通过编辑此文件实现;
catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;
catalina.properties:Tomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;
logging.properties: Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组 件级别以及日志文件的存在位置等;
context.xml:所有host的默认配置信息;
Tomcat的总体结构
Tomcat启动server服务器对外提供Service服务,Container作为Service的核心组件(Container可以连接多个Connector构成Service),有了Service就可以对外提供服务。简单说就是,Service是Container和Connector的结婚证,并已Server服务器为居对外提供服务。
Tomcat容器模型
从上述知,Service对外提供Web应用服务,而Service核心组件Container的灵魂便是Servlet容器。而真正管理Servlet的是Context容器。
Context容器直接管理Servlet在容器中的包装类Wrapper,一个Web应用对应一个Context容器。添加一个Web应用就会创建一个Context容器,并将这个Context容器加入到父容器Host中。
web工程是在servlet容器中是如何启动的
1. Servlet容器的启动过程
Web应用由Tomcat实例添加到Tomcat中,即由Tomcat管理一个新添加的Context容器。前面已经提到一个Web应用对应一个Context容器,也就是Servlet运行时的Servlet容器。
在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。
当Web 应用启动或终止时,会触发ServletContextEvent 事件,该事件由 ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。 contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)方法,对别 在Servlet 容器启动Web 应用时和终止Web 应用时调用。
- Servlet容器启动时,触发servletContextEvent事件,并通知相应的监听器servletContextListener;
- Servlet容器在启动的过程中通过servletContextListener监视servletContext的状态(初始化或者销毁servletContext);即
- servletContextListener中通过contextInitialized初始化方法,根据web.xml对servletContext进行配置,即将Context容器的属性缓存在内存中,供Service服务利用;
contextConfig在Tomcat创建Context容器时被加入到servletContext中,contextConfig负责整个Web应用的配置文件(包括web.xml)的解析工作。
2. web应用的初始化
web的初始化是在contextConfig中实现的,应用的初始化主要是对web.xml进行解析,这个文件描述了Web应用的关键信息,也是整个Web应用的入口。
Tomcat将web.xml文件解析后,将其中的属性设置到Context容器中,这里包括创建Servlet实例,Filter和Listener。将Servlet包装成Context中的包装类Wrapper。
3. 创建Servlet实例
如果Servlet在web.xml中load-on-startup的配置大于0,那么在Context容器启动时就会被实例化。
4. Servlet初始化
通过调用Servlet的init方法,同时把包装了StandarWrapper对象的StandarWrapperFacade作为ServletConfig传给Servlet。
Servlet从web.xml被解析到初始化。ServletConfig 和 ServletContext的区别ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
5. servlet 的运行机制
与Servlet关联的有四个对象servletContext,servletConfig,servletRequest,servletResponse。
Servlet的运行模式是典型的“握手型交互式”运行模式,servletContext提供交互场景模式,而交互场景的初始化由servletConfig来描述的。servletRequest和servletResponse是交互的具体对象。
Spring MVC 流程:
Mybatis架构图:
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情:
- 封装JDBC操作
- 利用反射打通Java类与SQL语句之间的相互转换
MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便,所以方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。
MyBatis的配置
MyBatis框架和其他绝大部分框架一样,需要一个配置文件,其配置文件大致如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="false"/> <!--<setting name="logImpl" value="STDOUT_LOGGING"/> <!– 打印日志信息 –>--> </settings> <typeAliases> <typeAlias type="com.luo.dao.UserDao" alias="User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <!--事务管理类型--> <dataSource type="POOLED"> <property name="username" value="luoxn28"/> <property name="password" value="123456"/> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.1.150/ssh_study"/> </dataSource> </environment> </environments> <mappers> <mapper resource="userMapper.xml"/> </mappers> </configuration>
以上配置中,最重要的是数据库参数的配置,比如用户名密码等,如果配置了数据表对应的mapper文件,则需要将其加入到<mappers>节点下
MyBatis的主要成员
- Configuration MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
- SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
- Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
- StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
- ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
- ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
- TypeHandler 负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
- MappedStatement MappedStatement维护一条<select|update|delete|insert>节点的封装
- SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
- BoundSql 表示动态生成的SQL语句以及相应的参数信息
以上主要成员在一次数据库操作中基本都会涉及,在SQL操作中重点需要关注的是SQL参数什么时候被设置和结果集怎么转换为JavaBean对象的,这两个过程正好对应StatementHandler和ResultSetHandler类中的处理逻辑。
Spring 介绍:
Spring AOP与IOC
一、 IoC(Inversion of control): 控制反转
1、IoC:概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
二、AOP(Aspect-Oriented Programming): 面向方面编程
1、 代理的两种方式:静态代理:
## 针对每个具体类分别编写代理类;
##针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
spring注入方式:
setter
interface
constructor
内部最核心的就是IOC了,动态注入,让一个对象的创建不用在new,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring里用的最经典的一个设计模式就是:模板方法模式、代理模式。 Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring。
三、各种接口方法分类
Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:
1、Bean自身的方法 : 这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法
2、Bean级生命周期接口方法 : 这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法
3、容器级生命周期接口方法 : 这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
4、工厂后处理器接口方法 : 这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器 接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
核心容器:核心容器提供 Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring 上下文:Spring 上下文是一个配置文件,向 Spring框架提供上下文信息。Spring上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。SpringDAO的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM的对象关系工具,其中包括JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和DAO异常层次结构。
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText 和 POI。