1.Struts2框架由Struts和WebWork 框架发展而来。
2.Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求。
3.构建Struts2应用的最基础的几个类库是_struts2-core、commons-logging、xwork-core、freamarker以及ognl。
4.Struts2中的控制器类是一个普通的POJO Class
5.如果要在JSP页面中使用Struts2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为<%taglib uri="/struts-tags" prefix="s"%>。
6.在Struts2表单标签库中,表单标签为<s:form>。
7. ActionSupport类实现了Action接口和ValidationAware等接口。
8.通过控制器类中的Validate()方法来输出校验错误信息。
9 Struts2的Action访问Web元素或称为ServletAPI(HttpSession、HttpRequest、ServletContext)的三种方式为RequestAware、SessionAware、ApplicationAware。
10在OGNL中,运算符“?”表示获取集合中所有满足选择逻辑的对象;运算符“^”表示获取集合中第一个满足选择逻辑的对象;运算符“$”表示获取集合中最后一个满足选择逻辑的对象。
11 OGNL表达式提供了一种访问静态成员的方式,但要在struts2应用中将struts.ognl.allowStaticMethodAccess设置为true。
12 在Struts2中利用基于验证框架的输入校验,编写校验配置文件的命名规则是ActionClassName-validation.xml。
13 在Struts2中整合Hibernate时,需要用到4个主要的HibernatAPI,它们分别是:Configuration、SessionFactory、Session、Transaction。
14 在Hibernate关系映射配置文件中,对双向1-N的关系进行配置时,在两端都需要增加对关联属性的访问,,N的一端增加引用到关联实体的属性,1的一端增加集合属性。
15 在Spring实际开发中, 依赖注入使用最广泛方式是:set方法注入。
16 在OGNL中的运算符“#”主要有三种用途,它们分别是:访问OGNL上下文和Action上下文、用于过滤和投影(projecting)集合、构造Map。
17 在OGNL中,person.relatives.{? #this.gender==’male’}表示取出person的所有性别为male的relatives集合。
18 在Struts2中的国际化有三种范围的资源文件,它们分别是:标签属性key的使用、用<s:text/>调用国际化资源、用getText()调用国际化资源。
19 Struts2的输入校验器的配置风格有两种,它们是:采用手工编写代码实现、基于XML配置方式实现。
20 在制定上传文件的JSP页面时,需要设置表单enctype属性为multipart。
21 在Hibernate配置文件中,解决中文字乱码的需要配置的两个属性是:(<%@ pagelanguage="java" import="java.util.*".pageEncoding="UTF-8".contentType="text/html;charset=UTF-8"%>、(<?xmlversion="1.0" encoding="UTF-8" ?>)。
22 HQL与SQL类似,也支持用like进行模糊查找,有两个可用的通配符:“%”和“_”,“%”代表任意多个字符,“_”代表一个字符。
23 Struts2整合Spring时,需要在struts2的配置文件中设置常量struts.objectFactory值为spring。
二、选择题
1. 以下属于struts2的控制器组件是:a
A.Action B.ActionForm C.ActionServlet D.dispatchAction
2. 以下属于struts2的体系结构的是:(多选)ab
A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action
3. 以下属于struts2配置文件中的配置元素是:(多选)ab
A.<package> B.<action>C.<form-beans> D.<action-mappings>
4. 关于struts1和struts2对比的说法正确的是:a
A.struts1要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类
B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的
C.struts1和struts2中都使用ActionForm对象封装用户的请求数据
D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值
5. 以下关于ValueStack说法正确的是:(多选)acd
A.每个Action对象实例拥有一个ValueStack对象
B.每个Action对象实例拥有多个ValueStack对象
C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中
D.ValueStack会在请求开始时被创建,请求结束时消亡
6. 关于struts2配置文件说法正确的是:c
A.必须在WEB-INF/classes目录下 B.名字必须为struts.xml
C.配置Action时,必须配置包信息 D.使用<forward>元素配置转发
7. 在struts2配置中用()元素来配置常量:
A.<const> B.<constants> C.<constant> D.<constant-mapping>
8. 关于struts2包的说法正确的是:
A.struts2框架使用包来管理常量
B.struts2框架定义包时必须指定name属性
C.struts2框架中配置包时,必须继承自struts-default包,否则会报错
D.struts2框架中使用包来管理Action
9. struts2中获取Servlet API的方法正确的是:(多选)
A.使用ActionContext对象以解耦合的方法访问Servlet API
B.使用ServletActionContext对象以解耦合的方式访问ServletAPI
C.使用ActionContext对象以耦合的方式访问ServletAPI
D.使用ServletActionContext对象以耦合的方式访问Servlet API
10. struts2动态调用的格式为:
A.ActionName?methodName.action
B.ActionName!methodName.action
C.ActionName*methodName.action
D.ActionName@mathodName.action
11. 如果要实现struts2的数据校验功能
A.普通Action类可以实现
B.继承自Action接口可以实现
C.继承自ActionSupport类可以实现
D.继承自ActionValidate类可以实现
12. 如果要实现自定义处理结果,需继承那个类
A.Dispathcer
B.StrutsResultSupport
C.Support
D.Action
13. 实现动态返回结果,在配置<result>元素时使用()指定视图资源
A.${属性名} B.@{属性名} C.${'属性名'} D.${"属性名"}
14. 用于实现国际化的struts2标签是:
A.<s:text> B.<s:message> C.<s:textfield> D.<s:resource>
15. struts2默认的处理结果类型是:
A.dispatcher B.redirect C.chain D.forward
16. 自定义转换器继承的抽象类是:
A.Converter B.TypeConverter C.StrutsTypeConverter D.converts
17. 自定义转换器的注册方式有:
A.只有全局注册方式 B.只有局部注册方式
C.只有全局和局部注册方式 D.以上说法都不对
18. 自定义拦截器类的方式有:(多选)
A.实现Interceptor接口 B.实现AbstractInterceptor接口
C.继承Interceptor类 D.继承AbstractInterceptor类
19. 在struts.xml文件中,使用()元素定义拦截器
A.<interceptor-ref> B.<interceptor> C.<intercep> D.<default-interceptor-ref>
20. 在OGNL中?操作符的作用是:
A.取出符合选择逻辑的第一个元素
B.取出符合选择逻辑的最后一个元素
C.取出符合选择逻辑的所有元素
D.以上说法都不对
21. 以下属于struts2标签的是:(多选)
A.Ajax标签 B.数据访问标签 C.logic标签 D.bean标签
22. 以下哪个标签是struts2中的用于循环迭代:
A.<s:property> B.<s:iterator> C.<s:logic> D.<s:foreach>
23. Struts2主要核心功能是由( )实现
a) 过滤器
b) 拦截器
c) 类型转换器
d) 配置文件
24. Struts中的ActionServlet属于MVC模式( )
a) 视图
b) 模型
c) 控制器
d) 业务层
25. Struts2框架由( )和( )框架发展而来的【选择二项】
a) Hibernate
b) Struts
c) Spring
d) WebWork
26. Struts2以(B)为核心,采用()的机制处理用户请求
a) Struts
b) WebWork
c) 拦截器
d) jar包
27. struts2中,不属于Action接口中定义的字符串常量的是( )
a) SUCCESS
b) FAILURE
c) ERROR
d) INPUT
28. struts2在控制器类中一般需要添加相应属性的( )和( )【选择二项】
a) setter方法
b) as方法
c) getter方法
d) is方法
29. struts2控制器需要在( )配置文件中进行配置
a) web.xml
b) struts.xml
c) application.porperties
d) webwork.xml
30. 不属于struts2标签库的是( )
a) <s:textfield>
b) <s:textarea>
c) <s:submit>
d) <select>
31. 在JSP页面中可以通过Struts2提供的( )标签来输出国际化信息
a) <s:input>
b) <s:messages>
c) <s:submit>
d) <s:text>
32. 资源文件的后缀名为( )
a) txt
b) doc
c) property
d) properties
33. struts2自定义类型转换器必须实现的接口是( )
a) Convert
b) TypeConverter
c) StrutsTypeConverter
d) StrutsConvert
34. struts2关于注册全局类型转换器的说法正确的是( )【选择二项】
a) 必须提供xwork-conversion.properties文件
b) 注册文件的格式为:复合类型=对应类型转换器
c) 注册文件的格式为:对应类型转换器=复合类型
d) 以上说法都不正确
35. struts2自定义拦截器中的“return invocation.invoke”代码表示( )【选择二项】
a) 不执行目标Action的方法,直接返回
b) 执行目标Action的方法,直接返回逻辑视图名称
c) 在自定义拦截器中,该代码是必需的
d) 在自定义拦截器中,该代码是可选的
36. struts2中,以下配置文件上传拦截器只允许上传bmp图片文件的代码,正确的是()
a) <param name=”allowedTypes”>image/bmp</param>
b) <paramname=”allowedTypes”>*.bmp</param>
c) <paramname=”allowedTypes”>bmp</param>
d) <paramname=”allowedTypes”>image/*.bmp</param>
37. 以下关于OGNL的说法正确的是( )【选择二项】
a) ActionContext是OGNL的上下文环境
b) StackContext是OGNL的上下文环境
c) ValueStack是OGNL的根
d) ActionContext是OGNL的根
38. 假设在Session中存在名为uid属性,通过OGNL访问该属性,正确的代码是( )
a) #uid
b) #session.uid
c) uid
d) ${session.uid}
39. 关于“#session.persions.{?#this.age>20}”OGNL代码所表示的意义说法正确的是( )
a) 从persons集合中取出第一个年龄>20的Person对象
b) 从persons集合中取出所有年龄>20的Person对象子集
c) 从persons集合中取出最后一个年龄>20的Person对象
d) 该代码不符合OGNL的语法
40. 假设在某JSP页面中存在”<s:property>”代码,则以下说法正确的是( )
a) 编译JSP页面时会出现错误
b) 编译JSP页面时不会出现错误,但页面不会显示任何内容
c) 该代码用于输出位于ValueStack(值栈)栈顶的对象
d) 以上说法都不正确
41. struts2默认的处理结果类型是( )
a) dispatcher
b) redirect
c) chain
d) 以上说法都不正确
42. 下列选项中,关于Struts2配置文件说法正确的是( )
a) 必须置于WEB-INF/classes目录下
b) 必须为Struts.xml
c) 配置Action时必须配置包信息
d) 使用<forward>元素配置转发
43. 下列选项中,关于Struts2的Action说法正确的是( )【选择二项】
a) struts2会为每一个请求创建一个对应的Action实例
b) struts2在请求处理过程中,只有一个Action实例
c) struts2通过属性来封装用户请求参数
d) 在struts2中定义的属性都用于封装用户请求参数
44. struts2中动态方法调用的格式为( )
a) ActionName_methodName.do
b) ActionName!methodName.do
c) ActionName_methodName.action
d) ActionName!methodName.action
45.不属于Action接口中定义的字符串常量的是___________。B
A.SUCCESS B.FAILURE C.ERROR D.INPUT
46.在控制器类中一般需要添加相应属性的___________和___________。AC
A.setter方法 B.as方法 C.getter方法 D.is方法
47.控制器需要在___________配置文件中进行配置。B
A.web.xml B.struts.xml C.struts2.xml D.webwork.xml
48.不属于Struts 2表单标签库的是___________。D
A.<s: textfield > B.<s: textarea > C.<s: submit > D.<select>
49.在JSP页面中可以通过Struts 2提供的___________标签来输出国际化信息。D
A.<s: input > B.<s: texts > C.<s: submit > D.<s:text>
50.资源文件的后缀名为___________。D
A.txt B.doc C.property D.Properties
1.一般情况下,以下哪个选项不是关系数据模型与对象模型之间匹配关系:(D )
(A)表对应类
(B)记录对应对象
(C)表的字段对应类的属性
(D)表之间的参考关系对应类之间的依赖关系
2.以下关于SessionFactory的说法哪些正确?( C )
(A)对于每个数据库事务,应该创建一个SessionFactory对象
(B)一个SessionFactory对象对应多个数据库存储源。
(C)SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个。
(D)SessionFactory的load()方法用于加载持久化对象
3.Customer类中有一个Set类型的orders属性,用来存放Order订单对象,在Customer.hbm.xml文件中,用哪个元素映射orders属性?( A )
(A)<set>
(B)<one-to-many>
(C)<many-to-one>
(D)<property>
4.<set>元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(D )
(A)none
(B)save
(C)delete
(D)save-update
5.以下哪个不属于Session的方法?(D )
(A)save()
(B)delete()
(C)update()
(D)open()
6.以下程序的打印结果是什么?( C )
tx = session.beginTransaction();
Customerc1=(Customer)session.load(Customer.class,new Long(1));
Customerc2=(Customer)session.load(Customer.class,new Long(1));
System.out.println(c1==c2);
tx.commit();
session.close();
(A)运行出错,抛出异常
(B)打印false
(C)打印true
(D)运行通过,但什么都不显示
7.以下哪个选项不是持久化层的对象状态? ( B )
(A)临时状态
(B)独立状态
(C)游离状态
(D)持久化状态
8.对于以下程序,Customer对象在第几行变为游离状态? (D )
Customer customer=new Customer(); //line1
customer.setName(\"Tom\"); //line2
Sessionsession1=sessionFactory.openSession(); //line3
Transaction tx1 =session1.beginTransaction(); //line4
session1.save(customer); //line4
tx1.commit(); //line5
session1.close(); //line6
(A)line1
(B)line3
(D)line6
9.以下哪一种检索策略利用了外连结查询? ( C )
(A)立即检索
(B)延迟检索
(C)迫切左外连结检索
(D)迫切右外连结检索
10.关于HQL与SQL,以下哪些说法正确?(B )
(A)HQL与SQL没什么差别
(B)HQL面向对象,而SQL操纵关系数据库
(C)在HQL与SQL中,都包含select,insert,update,delete语句
(D)HQL仅用于查询和删除数据,不支持insert,update语句
11.事务隔离级别是由谁实现的?(C )
(A)Java应用程序
(B)Hibernate
(C)数据库系统
(D)JDBC驱动程序
12.使用映射文件映射联合主键时,以下哪个选项不是持久化类必须满足的条件(D )
(A)实现java.io.Serializable接口;
(B)覆盖hashCode()方法;
(C)覆盖equals()方法;
(D)覆盖links()方法。
13.下面关于hibernate核心接口说明错误的是?( B )
(A)Configuration 接口:配置Hibernate,根据其启动hibernate,创建SessionFactory 对象;
(B)SessionFactory 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享同一个session,是轻量级、一级缓存
(C)Query 和Criteria 接口:执行数据库的查询。
(D)Transaction 接口:管理事务;
14.以下程序代码对Customer的name属性修改了几次: ( B )
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,newLong(1));
customer.setName(\"Jack\");
customer.setName(\"Mike\");
tx.commit();
执行以上程序,Hibernate需要向数据库提交几条update语句? ( A)
(A)0
(B)1
(C)2
(D)3
15.在Struts应用的视图中包含哪些组件? ( A )
(A)JSP
(B)Servlet
(C)ActionServlet
(D)Action
Spring考试试题
1)下面关于Spring的说话正确的是(B C)(选择两项) A)Spring是一个重量级的框架 B)Spring是一个轻量级的框架 C)Spring是一个IOC和AOP容器 D)Spring是一个入侵式的框架
2)下面关于IOC的理解,正确的是(A B)(选择两项) A)控制反转
B)对象被动的接受依赖类 C)对象主动的去找依赖类 D)一定要用接口
3)下面关于AOP的理解,正确的是(B C)(选择两项) A)面向纵向的开发 B)面向横向的开发 C)AOP关注是面 D)AOP关注的是点
4)Spring的组成一共有(D)块组成。
A)1 B)3 C)5 D)7
5)Spring各模块之间关系(B C)(选择两项)
A)Spring各模块之间是紧密联系的,相互依赖的 B)Spring各模块之间可以单独存在 C)Spring的核心模块是必须的,其他模块是基于核心模块 D)Spring的核心模块不是必须的,可以不要
6)Spring核心模块的作用(B)
A)做AOP的 B)做IOC的,用来管理Bean的 C)是用来支持Hibernete D)是用来支持Struts的
7)对Hibernate的支持主要用到Spring的那个模块(B)(选择两项)
A)Spring核心模块 B)Spring ORM模块 C)Spring MVC模块 D)Spring Web模块
8)对Struts的支持主要用到Spring的那个模块(AD)(选择两项)
A)Spring核心模块 B)Spring ORM模块 C)Spring MVC模块 D)Spring Web模块
9)Spring的通知类型有(A B C D)(多项选择)
A)Before通知 B)After return通知 C)Throws通知 D)Around通知
10)下面关于切入点的说法正确的是(A C D)(多项选择)
A)是AOP中一系列连连接点的集合 B)在做AOP时定义切入点是必须的 C)在做AOP时定义切入点不是必须的 D)可以用正则表达式来定义切入点
11)Spring包装Hibernate之后的Hibernate的DAO应该继承那个类(C)
A)HibernateDAO B)SessionFactory C)HibernateDAOSuport D)Session
12)下面对Spring包装Struts1.2的说法正确的是(B C)(选择两项)
A)Spring包装Struts的ActionServlet B)Spring包装Struts的Action C)主要是利用Spring的依赖注入 D)主要利用Spring的面向方面的编程
13)Spring包装Struts时那些Spring模块是必须的(A D)(选择两项)
A)Spring核心模块 B)Spring AOP模块 C)Spring MVC模块 D)Spring WEB模块
14)Spring中Before通知的目标对象要实现的接口是(A)
A)MethodBeforeAdvice B)ThrowsAdvice C)AfterReturningAdvice D)MethodInterceptor
15)Spring中around通知的目标对象要实现的接口是(D)
A)MethodBeforeAdvice B)ThrowsAdvice C)AfterReturningAdvice D)MethodInterceptor
16)Spring中Before通知的目标对象要实现的接口中before方法中的三个常用的参数依次是(A)
A)方法,方法的参数,目标对象 B)方法的参数,方法,目标对象 C)目标对象,方法,方法的参数 D)方法的参数,目标对象,方法
17)Spring中around通知的目标对象要实现的接口中invoke中方法的参数是(C)
A)方法 B)目标对象 C)方法执行参数 D)Exception
18)下面是Spring依赖注入方式的是(A B )(选择两项) A)set方法注入 B)构造方法的注入 C)get方法的注入 D)接口的注入
19)下面关于在Spring中配置Bean的id属性的说法正确的是(B D)(选择两项)
A)id属性是必须,没有id属性就会报错 B)id属性不是必须的,可以没有 C)id属性的值可以重复 D)id属性的值不可以重复
20)下面关于在Spring中配置Bean的name属性的说法正确的是(B D)(选择两项)
A)name属性是必须,没有name属性就会报错 B)name属性不是必须的,可以没有 C)name属性的值可以重复 D)name属性的值不可以重复
21)下面是IOC自动装载方法的是(A B)(选择两项)
A) byName B)byType C)constructor D)byMethod
三、简答题
1 简述什么是MVC?
MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
2简要回答Struts2、Spring及Hibernate整合过程。
建立web项目
2.在web.xml 配置 struts2,和 spring , <!-- 配置Struts2 --> <filter>
<filter-name>struts2</filter-name> <filter-class>
org.apache.struts2.dispatcher.FilterDispatcher(struts的过滤器)
</filter-class> </filter>
<filter-mapping>(加载struts2) <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置Spring --> <listener> <listener-class>
org.springframework.web.context.ContextLoaderListener
2013版Hibernate深入浅出数据库基础知识...Hibernate原理分...
(spring监听器) </listener-class> </listener>
<!-- 查找spring配置文件 -->
<context-param>(程序从此处开始加载.xml 文件,并执行) <param-name>contextConfigLocation</param-name> <param-value>classpath*:*.xml</param-value> </context-param>
3.在src根目录下创建struts.xml文件
<include file="struts-default.xml"/>固定格式,用到此包 4.在src根目录 创建hibernate.cfg.xml文件 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration> <session-factory> <!-- 基本配置 -->
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect </property>
<property name="show_sql">false</property> <property name="format_sql">true</property> <property
name="bytecode.use_reflection_optimizer">true</property> <property name="max_fetch_depth">2</property>
<property name="default_batch_fetch_size">8</property> <property name="jdbc.batch_size">20</property>
</session-factory>
</hibernate-configuration>
系统给的文件 只需要拷贝,都是一些数据库库的基本配置
5.在src根目录 拷贝struts.properties文件
struts.objectFactory = spring 该项是告诉系统 用spring来 控制hibernate和Action
struts.action.extension=action 告诉系统访问时以什么结尾。可以改为: do 例如:login.do,此处为:login.action 6.在src根目录下 创建applicationContext.xml 配置数据源
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value ="oracle.jdbc.driver.OracleDriver"/> <property name="url" value
="jdbc:oracle:thin:@192.168.0.95:1521:ZXDB2"/> <property name="username" value ="test"/> <property name="password" value ="test"/> </bean>
创建sessionFactory 工厂 <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"> <ref local="dataSource"/> </property>
<property name="configLocation"> <value
type="org.springframework.core.io.Resource">classpath:hibernate.cfg.xml</value> </property> </bean>
7.创建 实体类
写一个bean 含有get/set 方法
8.在实体类所在的目录下,写一个 类名.hbm.xml文件,在配置文件中添加属性
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zx.test.model.User" table="LB_USER"> <id name="id" type="java.lang.Long">主键的类型为Long <column name="ID"/>
<generator class="sequence">
<param name="sequence">SEQ_LB_USER</param>指定主键生成方式,必须在pl/sql创建主键生成方式 </generator> </id>
<property name="name" type="java.lang.String">
3简述无连接表的双向1-N关联的Hibernate关系映射配置文件配置过程。
无连接表的双向1-N关联,需要同时修改两个持久化类的配置文件。N的一端需要增加<many-to-one…/>元素来映射关联属性,而1的一端则需要使用<set…/>或<bag…/>元素来映射关联属性。<set…/>或<bag…/>元素里需要增加<key…/>子元素映射外键列,并使用<one-to-many…/>子元素映射关联属性。因为双向的1-N关联映射中,通常不应该允许1的一端控制关联关系,而应该由N的一端来控制关联关系,此时我们可以在<set../>元素中指定inverse=”true”,用于指定1的一端不控制关联关系
4.简述在Struts2、Spring及Hibernate整合项目开发过程中如何解决中文字乱码问题。
1.在struts2里面将所有字符都设成utf-8。
<%@ pagecontentType=”text/html; charset=UTF-8″%>
<%@ page pageEncoding=”UTF-8″%>
2.在struts.properties
struts.devMode=false
struts.enable.DynamicMethodInvocation=true
struts.i18n.reload=true
struts.ui.theme=simple
struts.locale=zh_CN
struts.i18n.encoding=UTF-8
struts.serve.static.browserCache=false
struts.url.includeParams=none
3.在web.xml加个filter
<!– zh-cn encoding–>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.sterning.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value><!--或者你需要的编码格式 -->
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
跟上述方法类似,还可以在action中设定字符编符.
HttpServletResponse response = null;
response = ServletActionContext.getResponse();
request.setCharacterEncoding(”utf-8″);
response.setContentType(”text/html;charset=utf-8″);
5简述在Struts2中校验器的执行顺序。
1、所有非字段校验风格的校验器优先于字段校验风格的校验器;
2、所有非字段校验风格的校验器中,排在前面的会先执行;
3、所有字段校验风格的校验器,排在前面的会先执行。
6简述项目中运用Hibernate的运行过程。
1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息
2、并用这些信息生成一个SessionFactory对象
3、然后从SessionFactory对象生成一个Session对象
4、并用Session对象生成Transaction对象
A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作
B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中
7.举例简述Hibernate利用绑定参数实现查找的编程过程。
Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定:
PrepareStatementpre=connection.prepare(“select * from User where user.name=?”);
pre.setString(1,”zhaoxin”);
ResultSetrs=pre.executeQuery();
在Hibernate中也提供了类似这种的查询参数绑定功能,而且在Hibernate中对这个功能还提供了比传统JDBC操作丰富的多的特性,在Hibernate中共存在4种参数绑定的方式,下面我们将分别介绍:
A、按参数名称绑定:
在HQL语句中定义命名参数要用”:”开头,形式如下:
Queryquery=session.createQuery(“from User user where user.name=:customername anduser:customerage=:age ”);
query.setString(“customername”,name);
query.setInteger(“customerage”,age);
上面代码中用:customername和:customerage分别定义了命名参数customername和customerage,然后用Query接口的setXXX()方法设定名参数值,setXXX()方法包含两个参数,分别是命名参数名称和命名参数实际值。
B、按参数位置邦定:
在HQL查询语句中用”?”来定义参数位置,形式如下:
Queryquery=session.createQuery(“from User user where user.name=? and user.age=? ”);
query.setString(0,name);
query.setInteger(1,age);
同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表邦定参数在HQL语句中出现的位置编号(由0开始编号),第二个参数仍然代表参数实际值。
注:在实际开发中,提倡使用按名称邦定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称邦定名参数的方式中是不需要调整程序代码的。
C、 setParameter()方法:
在Hibernate的HQL查询中可以通过setParameter()方法邦定任意类型的参数,如下代码:
Stringhql=”from User userwhere user.name=:customername ”;
Query query=session.createQuery(hql);
query.setParameter(“customername”,name,Hibernate.STRING);
如上面代码所示,setParameter()方法包含三个参数,分别是命名参数名称,命名参数实际值,以及命名参数映射类型。对于某些参数类型setParameter()方法可以根据参数值的Java类型,猜测出对应的映射类型,因此这时不需要显示写出映射类型,像上面的例子,可以直接这样写:
query.setParameter(“customername”,name);但是对于一些类型就必须写明映射类型,比如java.util.Date类型,因为它会对应Hibernate的多种映射类型,比如Hibernate.DATA或者Hibernate.TIMESTAMP。
D、 setProperties()方法:(setEntity())
在Hibernate中可以使用setProperties()方法,将命名参数与一个对象的属性值绑定在一起,如下程序代码:
Customercustomer=new Customer();
customer.setName(“pansl”);
customer.setAge(80);
Query query=session.createQuery(“from Customer cwhere c.name=:name and c.age=:age ”);
query.setProperties(customer);
setProperties()方法会自动将customer对象实例的属性值匹配到命名参数上,但是要求命名参数名称必须要与实体对象相应的属性同名。
这里还有一个特殊的setEntity()方法,它会把命名参数与一个持久化对象相关联,如下面代码所示:
Customercustomer=(Customer)session.load(Customer.class,”1”);
Query query=session.createQuery(“from Order orderwhere order.customer=:customer ”);
query. setEntity(“customer”,customer);
List list=query.list();
上面的代码会生成类似如下的SQL语句:
Select* from order where customer_ID=’1’;
8.简述Struts2中基于验证框架的输入校验的实现方法。
1、编写校验配置文件:命名规则:action类名-validatin.xml.
2、一个action对应多个逻辑处理方法:指定校验某个特定方法的方式:
action类名-name属性名-validatin.xml.(name属性名:在strtus配置文件中的)
3、配置文件存放位置:放在与Action相同的文件夹内。
4、验证规则:先加载action类名-validatin.xml,然后加载action类名-name属性名-validatin.xml文件。
5、校验器的配置风格:两种:字段校验器,非字段校验器。
1)字段校验器配置格式:
<field name="被校验的字段">
<field-validator type="校验器名">
<!--此处需要为不同校验器指定数量不等的校验规则-->
<param name="参数名">参数值</param>
....................
<!--校验失败后的提示信息,其中key指定国际化信息的key-->
<messagekey="I18Nkey">校验失败后的提示信息</message>
<!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarkertemplate Error-->
</field-vallidator>
<!--如果校验字段满足多个规则,下面可以配置多个校验器-->
</field>
2)非字段校验器配置格式:
<validatortype="校验器名">
<param name="fieldName">需要被校验的字段</param>
<!--此处需要为不同校验器指定数量不等的校验规则-->
<param name="参数名">参数值</param>
<!--校验失败后的提示信息,其中key指定国际化信息的key-->
<message key="I18Nkey">校验失败后的提示信息</message>
<!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarkertemplate Error-->
</validator>
非字段校验:先指定校验器:由谁来校验,来校验谁!
字段校验器:先指定校验的属性:我来校验谁,由谁来校验!