【SQL开源代码栏目提醒】:以下是网学会员为您推荐的SQL开源代码-JavaEE主流开源框架 - 考试类,希望本篇文章对您学习有所帮助。
附录 A 企业关注的技能 第一部分 Struts2 框架1. 说明 Struts2 框架的工作原理。
参考答案(1) 客户端向服务器端提交请求,容器初始化 HttpServletRequest 请求对象。
(2) 请求对象被一系列的 Servlet 过滤器过滤,Struts2 中的过滤器有三种。
(3) FilterDispatcher 过滤器调用 ActionMapper,决定该请求是否需要调用某个 Action。
(4) 如果请求需要调用某个 Action,ActionMapper 将通知 FilterDispatcher 过滤器把请求 的处理交给 ActionProxy 来处理。
(5) ActionProxy 通过 Configuration Manager 解析框架的配置文件 struts.xml,找到需要调 用的 Action 类。
(6) ActionProxy 创建一个 ActionInvocation 实例。
(7) ActionInvocation 实例使用命令模式回调 Action 中的 execute 方法,Action 调用业务 逻辑类完成业务逻辑处理。
在调用 Action 的前后,将调用该 Action 涉及的相关拦截 。
器(Interceptor)(8) Action 执行毕业, ActionInvocation 根据 struts.xml 中的配置找到对应的返回结果(称 。
为 Result)2. Struts2 和 Struts1 有什么区别参考答案Struts1 最初是 Apache Jakarta 项目的一部分,后来作为一个
开源的 MVC 框架存在。
Struts1曾经被很多 Web 应用采用,作为构建 MVC 的基础框架使用。
Struts1 最大的特点是提供了JSP 标记库以及页面导航。
Struts2 是从 WebWork 框架上发展起来的,与 Struts1 没有直接关系。
WebWork 是一个很优秀的 MVC 框架,然而,由于是一个新的框架,在一段时间内并没有被广泛使用。
后来,Struts 和 WebWork 社区决定将二者合并,推出 Struts2 框架。
Struts2比起 Struts1,新增了很多优点,例如,Struts2 的 Action 与 Servlet API 解耦,能够进行单元测试,Struts2 的试图可以支持多种形式,如 JSP、Velocity 等。
3. Struts2 中的哪三层控制器分别有什么作用?参考答案(1) 过滤器:过滤器是 Strut2 控制器的最前端的控制器,请求对象首先被过滤器过滤。
(2) 拦截器:拦截器(Interceptor)是 Struts2 中第二个层次的控制器,能够在 Action 执 行先后运行一些 Action 类需要的通用功能。
(3) Action: 需要程序员自行开发。
Action 是 Struts2 的第三层次的控制器, Action 是 Struts2 应用中使用数量最好的控制器,负责调用业务逻辑,执行业务操作,根据执行结果 返回结果视图,实现页面导航,被称为业务控制器。
4. 如何设置一个包的默认拦截器引用参考答案为一个包指定默认拦截器引用,可以在 struts.xml 中进行如下配置:其中 default-interceptor-ref 的 name 值可以是拦截器的名字,也可以是拦截器栈的名字。
5. 如何编写并配置自定义的拦截器?参考答案 自定义拦截器的步骤如下:(1) 创建类实现 Interceptor 接口。
(2) 覆盖 Interceptor 接口中的方法,重点实现 interceptor 方法,定义拦截功能。
(3) 在标签中使用元素定义拦截器,为拦截器类指定一个名字。
(4) 在需要使用该拦截器的 Action 中使用标签引用拦截器的名字即可使 用。
6. 拦截器栈和拦截器有什么区别和联系?参考答案拦截器栈是若干个拦截器的集合。
如果某些拦截器总是按照一定的顺序一起工作,那么就可以把这些拦截器组成一个拦截器栈,通过引用拦截器栈,就可以使用到栈中所有的拦截器。
7. Action 接口有什么作用?参考答案Action 接 口 中 定 义 了 五 个 常 量 和 一 个 方 法 。
五 个 常 量 都 是 字 符 串 类 型 , 分 别 是ERRORINPUTLOGINNONE 以及 SUCCESS方法的声明形式是 public String execute( )。
自定义的 Action 类可以实现这个接口,使用其中的常量作为 execute 方法的返回值,实现execute 方法实现业务控制逻辑。
8. Action 类中进行业务控制的方法有什么编码规范参考答案 即返回值为 String权限为 public,Action 类中进行业务控制的方法必须遵守一定的编码规范,没有形式参数。
方法的名字默认为 execute,可以被自动调用,如果不是 execute,则需要进行配置或指定才能使用。
9. 什么是动态方法调用(DMI)参考答案如果 Action 类中的方法名不是 execute,可以在 JSP 中调用 Action 时指定需要的调用的方法名,这种方式称作 DMI,即动态方法调用。
在 JSP 中调用 Action 的方法为:action”Action的 name方法名字”如 action“Accountsave“指定调用名字是 Account 的 Action 的 save 方法。
10. 如果 Struts2 应用中的一个表单,需要同时有两个提交按钮进行不同处理,如何解决?参考答案 可以使用提交按钮的 method 属性指定 Action 中的方法名字,就可以调用到相应的方法。
例如:… 使上述
代码中的表单将提交到名字为 Customer 的 Action 上,用 method”login”将调用 Action中 的 login 方法,使用 method”register”将调用 Action 中的 register 方法。
11. 如果一个 Action 类中需要处理请求范围属性,使用什么方法实现可以与 Servlet API 脱 耦?参考答案如果要与 Servlet API 脱耦,同时又要处理请求属性,那么可以使用 Struts2 API 中的ActionContext 类实现。
该类中的 put 方法可以向请求范围存属性,该类中的 get 方法可以从请求范围返回属性。
12. ActionContext 类中的哪个方法可以用来处理会话范围的属性?参考答案 ActionContext 中的 getSession 方法可以返回一个与会话对象相关的 Map 对象,通过使用该 Map 对象的 put 方法,可以往会话中存入属性,通过使用 Map 对象的 get 方法可以从会话中返回属性。
13. ActionContext 类中的哪个方法可以用来处理上下文范围内的属性参考答案 ActionContext 中的 getApplication 方法可以返回一个与上下文对象相关的 Map 对象,通过使用该 Map 对象的 put 方法可以往上下文中保存属性,通过使用 Map 对象的 get方法可以从上下文中返回属性。
14. 如果一个 Action 类中需要获得 Servlet API 中的对象进行处理,如何解决?参考答案 那么可以使用 ServletActionContext 类实现。
如果 Action 类中需要获得 Servlet API 中的对象,该类中定义了以下四个方法。
(1) public static PageContext getPageContext: 获得 PageContext 对象。
2 public static HttpServletRequest getRequest: 获得 HttpServletRequest 对象。
(3) public static HttpServletResponse getResponse : 获得 HttpServletResponse 对象。
(4) public static ServletContext getServletContext: 获得 ServletContext 对象。
15 .Struts2 框架有哪两种封装请求参数的方式?参考答案Struts2 中封装请求参数的方式有两种,即 Field-Driven 和 Model-Driven。
其中 Field-Driven是域驱动,在 Action 类中定义与请求参数对应的属性,并为之提供 getters 和 setters,Struts2框架将自动把请求参数封装到这些属性中。
Model-Driven 是模型驱动,Action 类需要实现ModelDriven 接口,声明一个与表单对应的 JavaBean 属性,覆盖其中的 getModel 方法,返回 JavaBean 实例,Struts2 框架将自动把请求参数封装到 JavaBean 实例中。
16. 什么是 OGNL有什么作用。
参考答案OGNL 是 Object Graphic Navigation Lanager 的缩写,即对象图导航语言,是一种功能强大的EL。
OGNL 往往结合 Struts2 的标记使用,就像 EL 总是结合 JSTL 使用一样。
17.OGNL 中的有哪三种作用?参考答案(1) 访问非根对象:OGNL 上下文的跟对象是值栈,可以直接访问;当访问其他非跟对 象是,需要使用,如session.cust可以获得会话范文的 cust 属性。
(2) 用于过滤集合:如 list.this.age20,取出年龄大于 20 的集合元素。
(3) 用来构造 Map:如“cust0”:cust0 “cust1”:cust1可以构建一个 Map 对象,包含两 对键值记录。
18.OGNL 中的有什么作用?参考答案号用来计算 OGNL 表达式的值。
19.OGNL 中的可以在哪些场合使用?参考答案(1) 国际化资源文件中使用:在国际化资源文件中,使用引用 OGNL 表达式。
(2) Struts2 的配置文件中使用:使用引用 OGNL 表达式。
20.struts.properties 文件有什么作用?参考答案struts.properties 文件可以用来定义 Struts2 框架的属性,能够修改 default.properties 文件中的默认属性值。
21.如果一个 Struts2 应用中有多个模块,每个模块都有一个配置文件,如何处理?参考答案实际开发过程中,往往是多模块同时开发。
可以对每个模块定义一个配置文件,最终在struts.xml 的根元素下使用包含即可,如下所示:22.ActionSupport 类有什么作用?参考答案ActionSupport 类定义了一系列与输入校验有关的方法,如果 Action 需要对输入进行校验,那么 Action 必须继承 ActionSupport 类。
23.Struts2 中有哪三种校验信息?分别有什么含义?参考答案Struts2 中有以下三种校验信息:(1) Action 错误:指的是 Action 级别的错误,不和某个域的输入直接相关。
(2) Field 错误:指的是域级别的错误,和某个输入域有关的校验错误。
(3) Action 消息:不是错误信息,而是一些友好的提示信息。
24.如果校验失败,Struts2 将导航在什么视图上?参考答案 Struts2 框架将导航到当前 Action 中的名字是 input 的结果视图上,如果校验失败, 如果 Action中没有名字为 input 的结果视图,则查找名字为 input 的全局结果,如果依然没有,则发生错误。
25.如何使用校验器校验 Struts2 应用的输入信息?参考答案(1) Action 类继承 ActionSupport 类,但是不需要覆盖 validate 方法。
(2) 在 Action 类所在包中定义 XXX-validation.xml 文件,其中 XXX 是 Action 的类名。
(3) 在 XML 文件中配置校验器的信息,一般需要制定需要校验的域名字、校验器的名 字、校验器中的属性值等,如下所示:true其中 custname 是要进行校验的域名字,type”requiredstring”指定的是验证器的名字,使用指定校验器的参数名和对应的值,指定校验错误时的显示信息。
26.Struts2 中标签有什么作用?请使用
代码说明。
参考答案用来输出值栈中的值,
代码如下:上述
代码将输出会话范围内名字为 customer 属性的 custname 值。
27.如何在 strust.xml 中配置异常处理界面?参考答案在 struts.xml 中可以使用配置异常处理页面,如下所示: /index.jsp /register.jsp /register.jsp通过上面的配置,当发生了 RegisterException 却没有被处理时,将自动跳转到 regfail 结果视图进行处理,即 register.jsp 页面。
28.全局异常映射与局部异常映射有什么区别?参考答案全局异常映射在中指定,而全局异常映射在中指定。
Struts2 框架总是现在局部范围查找有没有符合需要的配置,如果没有找到才到全局范围查找。
第二部分 Hibernate 框架 1. Hibernate 框架主要解决什么问题参考答案 Hibernate 框架式一个 ORM 框架,即对象关系映射框架。
能够将 Java 类与关系数据表 进行映射,同时提供面向对象的数据查询机制,能够最大程度缩短程序员在
SQL 和 JDBC 上的编程时间,从大量的数据持久层编程工作中解脱出来。
2. Hibernate 属性文件包括哪些内容?参考答案 数据库访问的相关信息需要在 Hibernate 属性文件中配置,如数据库驱动类、连接串、 用户名、密码、连接池初始化大小等。
也可以使用名字为 hibernate.cfg.xml 的 xml 文件 配置属性。
3. Hibernate 应用中的映射文件(hbm.xml)主要包括哪些内容?参考答案 映射文件中所有元素都存在于根元素 hibernate-mapping 下,其中使用最多的元素是 class。
class 元素下最常用的子元素有 id、property、component、subclass、joined-subclass、 union-subclass 等。
4. Hibernate 中持久化对象有哪三种状态?每种状态有什么特征?参考答案 :当通过 new 操作符实例化一个对象,而这个对象没 (1) 瞬时状态(transient state) 有被 Session 对象操作,也就是该对象没有与一个 Session 对象关联时,那么这 个对象就称为瞬时状态对象。
瞬时状态的对象不能被持久化到数据库中,也不 会被赋予持久化标识(Identifier) 。
(2) 持久状态(persistent state):如果一个对象与某一个 Session 对象关联,例如被 Session 对象刚加载的、刚保存的、刚更新的,那么该对象就称为持久状态对象。
持久状态的对象与数据库中一条记录对应,并拥有持久化标识(Identifier) 。
当 持久状态对象有改变时, 当前事务提交后,Hibernate 会自动检测到对象的变化, 并持久化到数据库中。
(3) 脱管状态(detached state):当与持久化状态对象关联的 Session 关闭后,该对象 。
脱管状态的对象引用依然有效,可以继续使 就变成脱管状态(detached state) 用。
当脱管状态的对象再次与某个 Session 关联后,脱管状态对象将转变为持久 化对象,脱管期间进行的修改将被持久化到数据库中。
5. HQL 语言
SQL 语言有什么区别? 参考答案 主要有以下三点区别: (1) HQL 语言中出现的是类名、属性名;
SQL 语言中出现的是表名、字段名。
(2) HQL 语言严格区分大小写
SQL 语言不区分大小写。
(3) HQL 语言理解继承、多态等面向对象的概念。
6. 一对多/多对一关联有哪俩种实现方式? 参考答案 一对多/多对一关联主要有以下俩种实现方式: (1) 基于主外键的一对多/多对一关联:这种关联指的是从表通过外键参考主键的主 键,从而实现关联。
(2) 基于连接表的一对多/多对一关联:这种关联指的是两个表之间不直接关系,而是 把各自的主键存放到关联表中,维护二者的关联关系。
7. 什么是 Hibernate 中的 TPS 参考答案 TPSTable Per Subclass是 Hibernate 中一个实现继承映射的策略,即每个子类对应一张 表,TPS 使用元素配置子映射关系。
8. 什么是 Hibernate 中的 TPH 参考答案 TPH(Table Per Class Hierarchy)是 Hibernate 中一种实现继承映射策略,即每个子类对应的是表的一个分层结构。
TPH 策略中, 使用来配置子类指定子类的区分字段值,同时配置子类扩展的属性。
9.什么是延迟加载?如何设置是否使用延迟加载? 参考答案 延迟加载的意思是,当查询某个实例是,默认情况下不查询其关联的实例。
使用属性 lazy 可以设置是否使用延时加载,lazy”true”表示使用延时加载,lazy”false”表示不使用延 时加载。
第三部分 Spring 框架 1. 什么是 IoCIoC 有什么作用? 参考答案 IoC 即控制反转,也被称为 DI,即依赖注入。
IoC 的意识是,将对象的创建以及装配过 程提交容器实现,而不再使用
代码进行。
使用 IoC 创建并装配对象,能够使用应用可以不管将来具体实现,完全在一个抽象层次进行描述和技术架构,使得应用的可扩展性提高。
2. 什么是 AOPAOP 有什么作用?参考答案AOPAspect Oriented Program编程能够通过的功能与业务模块分离,是 OOP 编程的延续和补充。
在企业应用中,很多模块可能需要实现相同功能,如多个模块都需要日志功能、权限校验功能、事务管理功能等,这些相同的功能就被称为“切面“。
使用 AOP编程可以单独对“切面”编程,然后将这些切面动态织入到功能模块中。
3. Spring 框架整合 JDBC 时,主要使用哪个类简化 JDBC 操作?参考答案使用 JdbcTemplate 类简化 JDBC 操作。
4. Spring 框架整合 Hibernate 是,主要使用哪个类简化 Hibernate 操作?参考答案使用 HibernateTemplate 类简化 Hibernate 操作。
5. Spring 框架整合 Struts2 框架时主要需要哪些步骤?参考答案(1) web.xml 中添加 listener 以及 context-param 的配置;(2) struts.properties 中指定 struts.objectFactory 的常量值为 spring;(3) struts.xml 文件中 Action 的 class 属性可以进行简化;(4) applicationContext.xml 中将 Action 进行 IoC 装配;(5) 完善 Action 类,声明 Action 需要关联的属性并提供 setter 方法。