1. 什么是SSH?
2. 简述SSH和EJB
3.0的比较
基于SSH的应用,可运行于普通Web容器中,无须EJB容器的支持,且一样具有稳定的性能和极高的可扩展性、可维护性。SSH是轻量级的Java EE应用,保留了经典Java EE应用的架构,面向对象建模的思维方式、优秀的应用分层以及良好的可扩展性、可维护性,但开发和运行的成本更低。
以EJB为核心,以应用服务器为运行环境,开发和运行的成本高。
3. 控制器层的作用是什么?
由系列控制器组成,用于拦截用户请求,并调用业务逻辑组件的业务逻辑方法,处理用户请求,并根据处理结果转发到不同的表现层组件。
4. 表现层的作用是什么?
答:负责收集用户请求,并将显示处理结果。
5. 可使用有哪些技术作为表现层?:JSP、V elocity、FreeMarker、Tapestry、PDF文档视图、或者使用普通的应用程序充当表现层组件,甚至可以是小型智能设备。。
6. 可以使用JSP完成整个系统,为什么还要使用Hibernate技术?为什么要将系统分层?答:不能仅仅考虑系统开发过程,还要考虑维护和扩展;不仅考虑小系统,还要考虑大型系统的协调开发。对于大型系统,采用Java EE架构有很大的优势,便于扩展和维护。Java EE框架,致力于让应用的各组件以松耦合的方式组织在一起。
7. 评估常见的web服务器
?Tomcat:和java结合最好,是Sun官方推荐的JSP服务器。Tomcat是开源的web 服务器,经过长时间的发展,性能、稳定性等方面都很优秀。
?Jetty:另一个优秀的web服务器。Jetty有个更大的优点就是,Jetty可作为一个嵌入式服务器,即:如果在应用中嵌入Jetty的jar文件,应用可在代码中对外提供web 服务。
?Resin:目前最快的JSP、Servlet运行平台,支持EJB。但如果想将该服务器作为商业使用,需要交费。
8. 评估常用的Java EE服务器
除了上面的web服务器外,还有一些专业的Java EE服务器,相对于web服务器而言,Java EE服务器支持更多的Java EE特性,例如分布式事务、EJB容器等。常用的Java EE服务器有如下几个:
?Jboss:开源的,支持EJB3.0技术
?Weblogic和WebSphere:这两个是商用Java EE服务器,价格贵。但在性能等各方面也是相当出色。
对于轻量级Java EE而言,没有必要使用Java EE服务器,使用简单的Web 容器已经完全能胜任。
9. Struts 2.1及其替代技术?
Struts是最早的MVC框架,是Java EE应用中使用最广泛的MVC框架。Struts框架学习简单,应用最方便的MVC框架,很多学习资料,容易掌握。但是,Struts框架太老了,无数设计上的硬伤使得该框架难以胜任更复杂的需求,于是Struts结合WebWork,分娩出了Struts2,Struts2拥有众多优秀的设计,吸收了Struts和WebWork的精华,成为MVC框架中新的王者。
MVC框架领域还有另外两个替代者:JSF和Tapestry
JSF是Sun推荐的Java EE规范,拥有最纯正的血统,Apache也为JSF提供了MyFaces实现,这使得JSF具有很大的吸引力。
Tapestry是Apache组织下的另一个优秀的MVC框架,完全脱离了传统Servlet API,是一种纯粹的、组件式的MVC框架,Tapestry同时提供了控制器和页面模板的解决方案,使用Tapestry无须使用JSP等其它表现层技术。
10. Hibernate3.2及其替代技术
传统的Java应用都是采用JDBC来访问数据库的,但传统的JDBC采用的是一种基于SQL 的操作方式,这种操作方式与Java语言的面向对象特征不太一致,所以Java EE应用需要一种技术,通过这种技术能让java以面向对象的方法操作关系数据库。这种特殊的技术就是ORM(Object Relation Mapping)。
Hibernate是一种开源的、轻量级的ORM框架,他允许将普通的、传统的Java对象(POJO)映射成持久化类,允许应用程序以面向对象的方式来操作POJO,而Hibernate框架则负责将这种操作转换成底层的SQL操作。
?除了使用Hibernate这种ORM框架之外,轻量级Java EE应用通常还可选择iBA TIS 框架作为持久层框架,iBA TIS是Apache组织提供的另一个轻量级持久层框架,
iBA TIS允许将SQL语句映射成对象。
?Oracle的TopLink、Apache的OJB都可作为Hibernate的替代方案,但是使用不够广泛。
11. Spring2.5及其替代技术
Spring框架只是抽象了大量Java EE应用中的常用代码,将他们抽象成一个框架,通过使用Spring可以大幅度地提高开发效率,保证应用具有良好的设计。Spring更像一种中间层容器,向上可以与MVC框架无缝整合,向下可以与各种持久层框架无缝整合,具有强大的生命力。由于Spring框架的特殊地位,所以轻量级的Java EE应用通常都会使用Spring。
实际上,轻量级Java EE这个概念也是由Spring框架衍生出来的,Spring框架暂时没有较好的替代框架。
12.我用JSP和Servlet已经足够了。为什么需要使用框架?
答:应用开发两个重要的关注点:可维护性和复用。全部采用JSP和Servlet的应用,因为分层不够清晰,业务逻辑的实现没有单独分离出来,造成系统后期维护困难。
使用框架的优点:可维护性和复用。
13. 传统Model1和Model2的比较
Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。Model1实现简单,适合于快速开发小规模项目。但是,将控制器逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性可维护的难度。
Model2是基于MVC架构的设计模式。Servlet作为前端控制器,负责接收客户端发送的请求,在Servlet中只包含控制逻辑和简单的前端处理;然后,调用后端的JavaBean来完成实际的逻辑处理;最后,转发到相应的JSP页面处理显示逻辑。
14. MVC思想及其优势
MVC思想将一个应用分成了Model,View,Control三个部分。三个部分以最少的耦合协同工作,从而提高应用的可扩展性和维护性。
15. 简述Struts2与MVC的对应关系
在struts2中,
Model对应业务逻辑组件,它通常用于实现业务逻辑方法以及以及与底层数据库的交互等;
View对应视图组件,通常是指JSP页面,但也适用于其他视图显示技术,如V elocity 或者Excel文档;
Control对应系统核心控制器和业务逻辑控制器,
①系统核心控制器为Struts2框架提供的FilterDispatcher,它根据请求自动调用相应的
Action。
②而业务逻辑控制器是指开发人员自行定义的一系列Action,在Action中负责调用相
应的业务逻辑组件来完成处理。
16. 简述Struts2体系架构
Struts2 框架由3个部分组成:
核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。
?核心控制器:FilterDispatcher
FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个filter运行在web应用,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求?业务控制器
业务控制器组件就是用户实现Action类的实例
?Struts2的模型组件
JavaEE 应用里的模型组件,通常指系统的业务逻辑组件,而隐藏在系统的业务逻辑组件下面的可能还包含Dao、领域对象等组件
?Struts2视图组件
Struts2能使用JSP、FreeMarker、V elocity等作为视图技术
17. 简述Struts2工作流程
Struts 2框架的大致处理流程如下:
(1)浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf等。
(2)Control中的核心控制器FilterDispatcher根据请求调用相应的业务逻辑控制器(Action)。
(3)Struts2的拦截器链自动对请求应用通用功能,如数据校验和文件上传等功能。
(4)回调Action中的execute()方法,并在方法体内调用业务逻辑组件来处理请求(Model)。既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上,因
为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。
(5)execute()方法将调用业务逻辑组件(Model)得到的数据返还并更新视图层(View),可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持JSP,也支持V elocity、FreeMarker等模板技术。
参见2_Struts2框架p16的图
18. Struts2 的配置文件:
action,class,result
19. 服务器端的数据效验有两种方式:1)编码校验2)配置文件校验
1)编码校验:
UserAction继承了ActionSupport类,只要重写validate()方法便可实现编码校验
2)配置文件校验:
在Action类所在的包下建立UserAction-validation.xml校验文件(命名规则:Action类名-validation.xml)
true
6
12
由于Struts2的一个Action类可以对应多个请求,然而validate()校验方法是所有提交到这个Action类的业务逻辑的公共的校验方法。因此开发时涉及到某具体业务时,一般为具体业务单独编码一个校验方法。而让validate()作为这些个业务公共属性的校验。这样做尤为合适。。
若本示例以login()作为Action类中专门处理登录的方法,则其对应的校验方法命名规则为validateLogin()。
Struts2会先调用validateLogin(),再调用validate()[可不写],最后再进入login()进行业务逻辑处理。
20. 简述Action接收数据的两种方式,这两种方式的区别和使用场景。
答:Action接收数据的2种方式是属性驱动、模型驱动。
属性驱动:Struts2通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并为这些属性提供对应的setter和getter方法。
例如:例如,用户请求包含user和pass两个参数,Action类应该提供user和pass两个属性封装用户的请求参数,并提供对应的setter和getter方法。
public class LoginAction
{
private String user;
private String pass;
publicc void setUser(String user)
{
https://www.doczj.com/doc/937665155.html,er=user;
}
public String getUser()
{
return (https://www.doczj.com/doc/937665155.html,er);
}
public void setPass(String pass)
{
this.pass=pass;
}
public String getPass()
{
return (this.pass);
}
public String execute()
{
...
return resultstr
}
}
模型驱动:每一个Action需要提供一个POJO对象,用来封装表单属性。
例如:
POJO的代码,其实就是普通的Java Bean 。
public class User {
private String username;
private String password;
//各属性get与set方法。省略。。。
}
Action代码:
public class RegisterAction extends ActionSupport implements ModelDriven
public String execute() throws Exception {
return ActionSupport.SUCCESS;
}
// 模型驱动必须实现的方法,也是ModelDriven接口中唯一的方法
public User getModel() {
return user;
}
}
属性和模型驱动区别
(1)模型驱动的Action必须实现ModelDriven接口,而且要提供相应的泛型,这里当然就是具体使用的Java Bean了。
(2)实现ModelDriven的getModel方法,其实就是简单的返回泛型的一个对象。
(3)在Action提供一个泛型的私有对象,这里就是定义一个User的user对象,并实例化。
上面的三件事做完之后,Action就会去自动调用User的setter将表单中的name属性的值赋给User中的属性。而Action的后续处理的Jsp页面后者是Servlet就可以使用user 对象了。
属性和模型驱动的使用场景
(1)请你统一整个系统中的Action使用的驱动模型,即要么都是用属性驱动,要么都是用模型驱动。
(2)如果你的DB中的持久层的对象与表单中的属性都是一一对应的话,那么就使用模型驱动吧,毕竟看起来代码要整洁得多。
(3)如果表单的属性不是一一对应的话,那么就应该使用属性驱动,否则,你的系统就必须提供两个Bean,一个对应表单提交的数据,另一个用与持久层。
21. Action的三种实现方式
●实现接口的Action,execute()
●继承基类ActionSupport的Action
●POJO实现的Action:Action类是一个普通的POJO,无需实现如何接口,
无需继承任何基类,无入侵性,通常应包含一个无参的execute方法,Action
处理完用户请求后,可以返回任意的字符串,不利于项目管理,如
“welcome”,”success”等
22. Action访问Servlet API
web应用的控制器而言,还是需要访问Servlet API的HttpServletRequest、HttpSession和ServletContext,
非IOC方式:Struts2提供了ActionContext类,Action可以通过该类来访问Servlet API。
要使用IoC方式,首先要告诉IoC容器(Container)想取得某个对象的意愿,通过实现相应的接口做到这点。例如要访问Session,就要实现SessionA ware接口。
23. Action的动态方法调用
如果JSP页面包含多个请求处理,例如:“登录”和“注册”,但分别提交给不同方法处理,此时一个Action内包含多个请求处理方法的处理:
(1)、为Action配置method属性:一个表单包含多个提交按钮,需要分别提交给不同的控制逻辑,Struts2还提供了一种方法,即将Action类定义成多个逻辑Action。
如果在配置
(2)、动态方法调用(DMI:Dynamic method invocation)是指:表单元素的action不直接等于某个Action的名字,而是以如下形式来指定对应的动作名: