一, 用自己的话简要阐述 struts2 的执行流程.
Struts 2 框架本身大致可以分为 3 个部分: 核心控制器 FilterDispatcher, 业务控制器 Action 和用户实现的企业业务逻辑组件.
核心控制器 FilterDispatcher 是 Struts 2 框架的基础, 包含了框架内部的控制流程和处理机制.
业务控制器 Action 和业务逻辑组件是需要用户来自己实现的. 用户在开发 Action 和业务逻辑组件的同时, 还需要编写相关的配置文件, 供核心控制器 FilterDispatcher 来使用.
Struts 2 的工作流程相对于 Struts 1 要简单, 与 webWork 框架基本相同, 所以说 Struts 2 是 WebWork 的升级版本. 基本简要流程如下:
1, 客户端浏览器发出 HTTP 请求.
2, 根据 Web.xml 配置, 该请求被 FilterDispatcher 接收.
3, 根据 struts.xml 配置, 找到需要调用的 Action 类和方法, 并通过 IoC 方式, 将值注入给 Aciton.
4,Action 调用业务逻辑组件处理业务逻辑, 这一步包含表单验证.
5,Action 执行完毕, 根据 struts.xml 中的配置找到对应的返回结果 result, 并跳转到相应页
二, 谈谈 struts2 的工作原理:
一个请求在 Struts2 框架中的处理大概分为以下几个步骤
1 客户端初始化一个指向 Servlet 容器 (例如 Tomcat) 的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做 ActionContextCleanUp 的可选过滤器, 这个过滤器对于 Struts2 和其他框架的集成很有帮助, 例如: SiteMesh Plugin)
3 接着 FilterDispatcher 被调用, FilterDispatcher 询问 ActionMapper 来决定这个请是否需要调用某个 Action
4 如果 ActionMapper 决定需要调用某个 Action,FilterDispatcher 把请求的处理交给 ActionProxy
5 ActionProxy 通过 Configuration Manager 询问框架的配置文件, 找到需要调用的 Action 类
6 ActionProxy 创建一个 ActionInvocation 的实例.
7 ActionInvocation 实例使用命名模式来调用, 在调用 Action 的过程前后, 涉及到相关拦截器 (Intercepter) 的调用.
8 一旦 Action 执行完毕, ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果.
返回结果通常是 (但不总是, 也可 能是另外的一个 Action 链) 一个需要被表示的 JSP 或者 FreeMarker 的模版. 在表示的过程中可以使用 Struts2 框架中继承的标签.
在这个过程中需要涉及到 ActionMapper
在上述过程中所有的对象 (Action,Results,Interceptors, 等) 都是通过 ObjectFactory 来创建的.
五, Hibernate 工作原理:
读取并解析配置文件
读取并解析映射信息, 创建 SessionFactory
打开 Sesssion
创建事务 Transation
持久化操作
提交事务
关闭 Session
关闭 SesstionFactory
六, Hibernate 有什么好处:
对 JDBC 访问数据库的代码做了封装, 大大简化了数据访问层繁琐的重复性代码.
Hibernate 是一个基于 JDBC 的主流持久化框架, 是一个优秀的 ORM 实现. 他很大程度的简化 DAO 层的编码工作
hibernate 使用 Java 反射机制, 而不是字节码增强程序来实现透明性.
hibernate 的性能非常好, 因为它是个轻量级框架. 映射的灵活性很出色. 它支持各种关系数据库, 从一对一到多对多的各种复杂关系.
七, Hibernate 是如何延迟加载的:
1. Hibernate2 延迟加载实现: a)实体对象 b)集合(Collection)
2. Hibernate3 提供了属性的延迟加载功能
当 Hibernate 在查询数据的时候, 数据并没有存在与内存中, 当程序真正对数据的操作时, 对象才存在与内存中, 就实现了延迟加载, 他节省了服务器的内存开销, 从而提高了服务器的性能.
3.Hibernate 中怎样实现类之间的关系?(如: 一对多, 多对多的关系)
类与类之间的关系主要体现在表与表之间的关系进行操作, 它们都市对对象进行操作, 我们程序中把所有的表与类都映射在一起, 它们通过配置文件中的 many-to-one,one-to-many,many-to-many,
八, Hibernate 的查询方式:
- Sql,Criteria,object comptosition
- Hql:
属性查询
参数查询, 命名参数查询
关联查询
分页查询
统计函数
九, 说下 Hibernate 的缓存机制
1. 内部缓存存在 Hibernate 中又叫一级缓存, 属于应用事物级缓存
2. 二级缓存:
a) 应用及缓存
b) 分布式缓存
条件: 数据不会被第三方修改, 数据大小在可接受范围, 数据更新频率低, 同一数据被系统频繁使用, 非 关键数据
c) 第三方缓存的实现
十, 如何优化 Hibernate:
a)应用及缓存
b)分布式缓存
条件: 数据不会被第三方修改, 数据大小在可接受范围, 数据更新频率低, 同一数据被系统频繁使用, 非关键数据
c) 第三方缓存的实现
十二, spring 工作原理:
1.spring mvc 请所有的请求都提交给 DispatcherServlet, 它会委托应用系统的其他模块负责负责对请求进行真正的处理工作.
2.DispatcherServlet 查询一个或多个 HandlerMapping, 找到处理请求的 Controller.
3.DispatcherServlet 请请求提交到目标 Controller
4.Controller 进行业务逻辑处理后, 会返回一个 ModelAndView
5.Dispathcher 查询一个或多个 ViewResolver 视图解析器, 找到 ModelAndView 对象指定的视图对象
6. 视图对象负责渲染返回给客户端.
十三, 为什么要用 spring:
AOP 让开发人员可以创建非行为性的关注点, 称为横切关注点, 并将它们插入到应用程序代码中. 使用 AOP 后, 公共服务
(比 如日志, 持久性, 事务等)就可以分解成方面并应用到域对象上, 同时不会增加域对象的对象模型的复杂性.
IoC 允许创建一个可以构造对象的应用环境, 然后向这些对象传递它们的协作对象. 正如单词 倒置 所表明的, IoC 就像反
过来的 JNDI. 没有使用一堆抽象工厂, 服务定位器, 单元素 (singleton) 和直接构造(straight construction), 每一个对象都是用其协作对象构造的. 因此是由容器管理协作对象(collaborator).
Spring 即使一个 AOP 框架, 也是一 IoC 容器. Spring 最好的地方是它有助于您替换对象. 有了 Spring, 只要用 JavaBean 属性和配置文件加入依赖性(协作对象).
然后可以很容易地在需要时替换具有类似接口的协作对象.
十四, 请你谈谈 SSH 整合:
- SSH:
- Struts(表示层)+Spring(业务层)+Hibernate(持久层)
- Struts:
Struts 是一个表示层框架, 主要作用是界面展示, 接收请求, 分发请求.
在 MVC 框架中, Struts 属于 VC 层次, 负责界面表现, 负责 MVC 关系的分发.(View: 沿用 JSP)
Hibernate:
Hibernate 是一个持久层框架, 它只负责与关系数据库的操作.
Spring:
Spring 是一个业务层框架, 是一个整合的框架, 能够很好地黏合表示层与持久层.
十五, 介绍一下 Spring 的事务管理:
事务就是对一系列的数据库操作 (比如插入多条数据) 进行统一的提交或回滚操作, 如果插入成功, 那么一起成功, 如果中间有一条出现异常, 那么回滚之前的所有操作.
这样可以防止出现脏数据, 防止数据库数据出现问题.
开发中为了避免这种情况一般都会进行事务管理. Spring 中也有自己的事务管理机制, 一般是使用 TransactionMananger 进行管理, 可以通过 Spring 的注入来完成此功能.
spring 提供的事务管理可以分为两类: 编程式的和声明式的. 编程式的, 比较灵活, 但是代码量大, 存在重复的代码比较多; 声明式的比编程式的更灵活.
编程式主要使用 transactionTemplate. 省略了部分的提交, 回滚, 一系列的事务对象定义, 需注入事务管理对象.
十六, Spring 里面如何配置数据库驱动?
使用 "org.springframework.jdbc.datasource.DriverManagerDataSource" 数据源来配置数据库驱动. 示例如下:
- <bean id="dataSource">
- <property name="driverClassName">
- <value>
- org.hsqldb.jdbcDriver
- </value>
- </property>
- <property name="url">
- <value>
- jdbc:hsqldb:db/appfuse
- </value>
- </property>
- <property name="username">
- <value>
- sa
- </value>
- </property>
- <property name="password">
- <value>
- </value>
- </property>
- </bean>
- <listener>
- <listener-class>
- org.springframework.Web.context.ContextLoaderListener
- <context-param>
- <param-name>
- contextConfigLocation
- </param-name>
- <param-value>
- /Web-INF/xyz.xml
- </param-value>
- </context-param>
- </listener-class>
- </listener>
- <servlet>
- <servlet-name>
- context
- </servlet-name>
- <servlet-class>
- org.springframework.Web.context.ContextLoaderServlet
- </servlet-class>
- <load-on-startup>
- 1
- </load-on-startup>
- </servlet>
- <property name="mappingResources">
- <list>
- <value>
- org/appfuse/model/User.hbm.xml
- </value>
- </list>
- </property>
来源: http://www.bubuko.com/infodetail-3097941.html