J2EE复习.docx
《J2EE复习.docx》由会员分享,可在线阅读,更多相关《J2EE复习.docx(18页珍藏版)》请在冰豆网上搜索。
J2EE复习
1、struts工作原理,开发过程
Struts实质上就是在JSPModel2的基础上实现的一个MVC框架。
模型:
JavaBean、EJB组件
控制器:
ActionServlet、Action
视图:
JSP、Struts客户化标签
工作原理:
(1)如果ActionMapping实例不存在,就返回用户请求路径无效信息。
(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
(3)根据配置信息决定是否需要表单验证。
如果需要验证,就调用ActionForm的validate()方法。
(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
(5)ActionServlet根据配置信息决定将请求转发给哪个Action。
如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute方法。
(6)Action的execute方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
(7)ActionForward对象指向的JSP组件生成动态网页,返回给客户
开发过程:
(1)新建一个webproject
(2)添加structs应用jar包支持。
(3)新建一个ActionForm,并自动产生表单提交jsp页面。
(4)新建一个Action
(5)在struts_config.xml中配置Action
(6)在页面中将form提交给action来处理,并将处理结果返回到页面。
2、actionFormBean的作用:
ActionFormBean是Struts框架提供的DTO(数据传输对象),用于在视图层和控制层之间传递HTML表单数据。
功能:
字段采集、数据缓冲、数据校验、类型转换、传输对象。
3、Struts常用标签库,简单说明(一句话)
(1)StrutsHTML标签可以和标准的HTML元素完成相同的功能。
这些标签可以和Struts框架的其他组件紧密联系在一起
(2)StrutsBean标签库中的标签可以访问已经存在的JavaBean以及它们的属性,还可以定义新的Bean,把它存放在page范围内或者用户指定的范围内,供网页内其他元素访问。
(3)StrutsLogic标签库中的标签可以根据特定的逻辑条件来控制输出网页内容,或者循环遍历集合中所有元素。
Ø<%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%>
Ø<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%>
Ø<%@tagliburi="/WEB-INF/struts-logic.tld"prefix="logic"%>
4、简述Hibernate使用前的三个准备和七个步骤
使用Hibernate前要做好以下3个准备:
添加需要的jar包、配置Hibernate配置文件、创建实体类和映射文件
使用Hibernate完成持久化操作需要以下7个步骤:
读取并解析配置文件;读取并解析映射文件,创建SessionFactory;打开session;开启事务(查询操作不需要);执行持久化方法;提交事务;关闭session
5、列举ORM面对的问题:
(1)对象关系映射注重利用元数据将数据在对象与数据库表格之间来回映射,从而确保数据防问代码不直接侵入域对象内
(2)对象关系映射所要解决的问题从根本上说就是如何何处理对象与数据库表格阻抗失配的问题
阻抗失配问题分类:
数据库类型转换、粒度失配、对象的标识、对象的继承与多态、对象关联(一对一,一对多,多对多)
6、Session类当中的get和local方法的区别,save和persist方法的区别
1)、get()方法与load()方法的区别
(1)获取失败时,处理方式不同。
Hibernate没有查找到数据,get()方法返回null,而load()方法抛出ObjectNotFoundException。
因此,在代码编写上存在差别。
(2)load()使用了延迟检索策略,load()方法可以返回实体的代理类实例,而get()永远只返回实体类
(3)load()方法可以充分利用二级缓存和内部缓存的现有数据,而get()方法只在内部缓存中进行查找,如没有发现对应数据将跳过二级缓存,直接调用SQL完成查找
2)persist和save区别
(1)persist把一个瞬态的实例持久化,但是并“不保证”标识符被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时间,且不能保存游离状态的对象
(2)save它要返回标识符,所以它会立即执行Sqlinsert,且可保存任何状态的对象
7、在持久化层中对象分为哪些状态?
简述状态转换之间的关系
临时状态(transient):
刚刚用new语句创建,还没有被持久化,不处于Session缓存中.处于临时状态的Java对象被称为临时对象
持久化状态(persistent):
已经被持久化,加入到Session缓存中.处于持久化状态的Java对象被称为持久化对象
游离状态(detached):
已经被持久化,但不处于Session缓存中.处于游离状态的Java对象被称为游离对象
8、事务处理的两种模式:
ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
JDBCConnection接口(java.sql.Connection)提供了两种事务模式:
自动提交和手工提交。
JDBC事务、JTA(JavaTransactionAPI)事务、容器事务
Spring事务处理模式:
依赖特定事务资源的事务处理和另外一种是依赖容器的参数化事务管理
9、spring的事务管理与EJB2的事务管理有什么关键的不同
测试:
Spring:
pojo
Ejb:
二个接口一个类,一堆配置文件
事务类型
Spring:
jdbcjta hibernate
Ejb:
jta
成本
Spring:
普通容器(tomcatjboss)
Ejb:
weblogicjboss
10、什么是AOP以及使用AOP的好处
(1)相对于最初的面向过程式编程,面向对象编程(OOP)倾向于将对象和概念进行建模并作为编程的主体,面向对象编程主要是通过封装和继承等方式减少在面向过程方式中产生的大量的代码重复。
(2)但是OOP在不断的发展过程中也遇到问题:
在对操作进行日志记录、错误处理等情况中代码重复似乎是不可避免的,而这些层面的问题似乎与OOP也存在不同程度的冲突,因为这些问题似乎不属于OOP的解决范围。
(3)AOP就是类似问题的终极解决方案,它并不是要替代OOP,而是OOP概念的最好的延伸和补充。
(4)AOP核心理念就是将OOP无法解决的问题看做Aspect,即方面,或称之为考量。
每一个考量都代表是某一个在同一个应用程序内重复出现的而且无法用OOP方法进行处理的需求,例如logging以及涉及多个对象的事务处理。
11、关联关系映射多对一,多对多的配置
双向多对一(一对多)
--CarOrder类映射文件-->
column="salesId"
class="_double.many.to.one.pojo.Salesman"
cascade="all"
not-null="false">
多对多关联关系映射
--BasicCar类映射文件-->
table="carorder"
inverse="true"
cascade="all">
12、Spring和struts整合时使用类(有哪些,怎么配置)
Struts类有:
importjavax.servlet.http.HttpServletRequest;HttpServletResponse;
importorg.apache.struts.action.Action;ActionForm;ActionForward;.
ActionMapping;DynaActionForm;ActionMessage;ActionMessages;
Spring类有:
Springapplication.xml配置文件
mysql:
//localhost:
3306/student">
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
org.hibernate.dialect.MySQLDialect
hellocome/Stu.hbm.xml
Web.xml配置文件
contextConfigLocation
/WEB-INF/classes/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
struts
org.apache.struts.action.ActionServlet
config
/WEB-INF/classes/struts-config.xml
struts
*.do
13、HQL查询语言
HQL是一种面向对象的查询语言,其中没有表和字段的概念,只有类,对象和属性的概念
HQL(HibernateQueryLanguage)和SQL查询语言有些相似,但是HQL是面向对象的,它具有以下功能:
支持查询语句中设定各种查询条件;支持投影查询,即只检索出对象的部分属性;支持分页查询;支持连接查询;支持分组查询,允许使用having和groupby关键字;提供内置聚集函数,如sum(),min(),max();能够调用用户定义的SQL函数;支持子查询,即嵌入式查询;支持动态绑定参数。
HQL检索步骤:
创建一个Query对象
Queryquery=session.createQuery(“fromCustomerascwhere”+”c.name=:
customerName”+”andc.age=:
customerAge”);
动态绑定参数
query.setString(“customerName”,”Tom”);
query.setInteger(“customerAge”,21);
执行查询语句,返回查询结果
Listresult=query.list();
14、一个简单的Hibernate映射文件的编写(要完整)
4、问题:
以下代码定义了一个变量,如何输出这个变量的值?
defineid="stringBean"value=“helloWorld“/>
(A)writename=“stringBean"/>
(B)writename=“helloWorld"/>
(C)<%=stringBean%>
(D)<%StringmyBean=
(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);
%><%=myBean%>
答案:
A,D
5、问题:
把静态文本放在ResourceBundle中,而不是直接在JSP文件中包含这些静态文本,有什么优点?
答:
提高可维护性、提高可重用性、支持国际化
6、对于以下代码,HelloAction希望将请求转发给hello.jsp,在HelloAction的execute()方法中如何实现?
(A)return(newActionForward(mapping.getInput()));
(B)return(mapping.findForward("SayHello"));
(C)return(mapping.findForward(“hello.jsp"));
答案:
A,B
7、对于一下这段配置ActionServlet的代码,那些说法是正确的?
Web.xmlStruts的内容
(A)Servlet容器在启动Struts应用时,会初始化这个ActionServlet。
(B)对于所有URL中以".do"结尾的HTTP请求,都由ActionServlet处理
(C)这段代码位于struts-config.xml中
(D)这段代码位于web.xml中
答案:
A、B、D
8、以下哪些说法是正确的?
(A)每个HTTP请求对应一个单独的ActionServlet实例
(B)对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的HelloAction实例。
(C)每个子应用对应一个单独的RequestProcessor实例
(D)每个子应用对应一个单独的web.xml文件
答案:
C
9、下面哪些任务是RequestProcessor完成的?
(A)把Struts配置文件信息加载到内存中
(B)把资源文件信息读入到内存中
(C)如果需要的话,创建ActionForm实例,组装数据,并进行表单验证
(D)找到匹配的Action实例,调用其execute()方法
(E)把请求转发到Action的execute()方法返回的ActionForward代表的组件。
答案:
C,D,E
11、下面不属于持久化的是()
A.把对象转换为字符串的形式通过网络传输,在另一端接收到这个字符串后能把对象还原出来
B.把程序数据从数据库中读出来
C.从XML配置文件中读取程序的配置信息
D.把程序数据保存为文件
spring+hibernate的配置文件中的主要类有那些?
如何配置?
dataSource
sessionFactory:
hibernate.cfg.xml
transactionManager
userDao(extendsHibernateDaoSupport)
sessionFactory
facade
proxy
sessionFactory
transactionManager
facade
在myeclipse中先加入spring环境再加入hibernate环境。
Struts的相关配置
1、登录验证
●actionForm
packagecom.cwnu.struts.form;
importjavax.servlet.http.HttpServletRequest;
importorg.apache.struts.action.ActionErrors;
importorg.apache.struts.action.ActionMapping;
importorg.apache.struts.validator.ValidatorForm;
publicclassLoginFormextendsValidatorForm{
privateStringemail;
privateStringname;
publicActionErrorsvalidate(ActionMappingmapping,
HttpServletRequestrequest){
//TODOAuto-generatedmethodstub
returnsuper.validate(mapping,request);
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
………………………………….
}
●action
publicclassLoginActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse){
LoginFormloginForm=(LoginForm)form;//TODOAuto-generatedmethodstub
request.setAttribute("username",loginForm.