`
wzf7065
  • 浏览: 247449 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

待整理问题

 
阅读更多

1、spring和struts是怎么集成的?
ApplicationContext是Spring的核心,WebApplicationContext继承自ApplicationContext,首先在Web应用中要初始化WebApplicationContext

,即在web.xml中配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- OR USE THE CONTEXTLOADERSERVLET INSTEAD OF THE LISTENER
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
-->

然后对于spring与struts组合的部分,据我所知有三种方法:
1、Spring本身也提供了Struts的相关类,主要使用的有org.springframework.web.struts.ActionSupport,我们只要定义BaseAction继承

AtionSupport,让其他Action继承自BaseAction,就是在BaseAction中调用ActionSupport中getWebApplicationContext()的方法取出

WebApplicationContext,进而取出各种Service。

2、让Spring可以反向控制Struts中的action:
用org.springframework.web.struts.ContextLoaderPlugIn,这是一个Struts的Plug,在Struts启动时加载,对于Action,可以像管理Bean一

样来管理,在struts-config.xml中Action的配置变成类似下面的样子
<action attribute="aForm" name="aForm" path="/aAction" scope="request"

type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="forward" path="forward.jsp" />
</action>
注意type变成了org.springframework.web.struts.DelegatingActionProxy,之后我们需要建立action-servlet.xml(这里只配置action bean

),action-servlet.xml符合Spring的spring-beans.dtd标准,在里面定义类似下面的
<bean name="/aAction" class="com.web.action.Aaction" singleton="false">
<property name="businessService">
<ref bean="businessService"/>
</property>
</bean>

com.web.action.Aaction是Action的实现类,businessService是需要的业务逻辑,Spring会把businessService注入到Action中,在Action中

只要写businessService的get和set方法就可以了,还有一点,action的bean是singleton="false",即每次新建一个实例,这也解决了Struts

中Action的线程同步问题,具体过程是当用户做“/aAction”的HTTP请求(当然应该是“/aAction.do”),Struts会找到这个Action的对应类

org.springframework.web.struts.DelegatingActionProxy,DelegatingActionProxy是个代理类,它会去找action-servlet.xml文件中

“/aAction”对应的真正实现类,然后把它实例化,同时把需要的业务对象注入,然后执行Action的execute方法。

使用了ContextLoaderPlugIn,在struts-config.xml中变成类似这样配置
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml" />
</plug-in>

3、JPetstore例子中并没有使用此方法,而使用了第三种方法。同样只需要动Action。如下:

public abstract class BaseAction extends Action {

private PetStoreFacade petStore;

public void setServlet(ActionServlet actionServlet) {
super.setServlet(actionServlet);
if (actionServlet != null) {
   ServletContext servletContext = actionServlet.getServletContext();
   WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
   this.petStore = (PetStoreFacade) wac.getBean("petStore");
}
}

protected PetStoreFacade getPetStore() {
return petStore;
}

}



2、hibernate和ibatis的区别?
1.出身
hibernate 是当前最流行的o/r mapping框架,它出身于sf.net,现在已经成为jboss的一部分了。
ibatis 是另外一种优秀的o/r mapping框架,目前属于apache的一个子项目了。

2.原理
相对hibernate“o/r”而言,ibatis是一种“sql mapping”的orm实现。hibernate 对数据库结构提供了较为完整的封装,hibernate的o/r mapping实现了pojo 和数据库表之间的映射,以及sql 的自动生成和执行。程序员往往只需定义好了pojo 到数据库表的映射关系,即可通过hibernate 提供的方法完成持久层操作。程序员甚至不需要对sql 的熟练掌握, hibernate/ojb 会根据制定的存储逻辑,自动生成对应的sql 并调用jdbc 接口加以执行。
而ibatis 的着力点,则在于pojo 与sql之间的映射关系。也就是说,ibatis并不会为程序员在运行期自动生成sql 执行。具体的sql 需要程序员编写,然后通过映射配置文件,将sql所需的参数,以及返回的结果字段映射到指定pojo。

3.机制
使用ibatis 提供的orm机制,对业务逻辑实现人员而言,面对的是纯粹的java对象。这一层与通过hibernate 实现orm 而言基本一致,而对于具体的数据操作,hibernate会自动生成sql 语句,而ibatis 则要求开发者编写具体的sql 语句。相对hibernate而言,ibatis 以sql开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
hibernate与ibatis的对比:

4.学习成本
ibatis非常简单易学,hibernate相对较复杂,门槛较高。

5.开源软件
二者都是比较优秀的开源产品

6.二次开发
当系统属于二次开发,无法对数据库结构做到控制和修改,那ibatis的灵活性将比hibernate更适合

7.海量数据
系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的sql语句(或存储过程)才能达到系统性能设计指标。在这种情况下ibatis会有更好的可控性和表现。

8.自动化程度
ibatis需要手写sql语句,也可以生成一部分,hibernate则基本上可以自动生成,偶尔会写一些hql。同样的需求,ibatis的工作量比 hibernate要大很多。类似的,如果涉及到数据库字段的修改,hibernate修改的地方很少,而ibatis要把那些sql mapping的地方一一修改。

9.与数据映射关系
ibatis以数据库字段一一对应映射得到的po和hibernte这种对象化映射得到的po是截然不同的,本质区别在于这种po是扁平化的,不像hibernate映射的po是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。

10.技术支持
hibernate现在已经是主流o/r mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于ibatis

最关键的一句话是ibatis的作者说的:
if you are starting a new project and you're in full control of your object model and database design, hibernate is a good choice of o/r tool.
if you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an o/r mapper might not be capable of handling the situation. that's were an sql mapper comes in handy



3、strut1和strut2的区别?
1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts 2的Action。

2) 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts 1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

3) Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。

4) 可测性方面的对比:测试Struts 1 Action的一个主要问题是execute方法依赖于Servlet API,这使得Action的测试要依赖于Web容器。为了脱离Web容器测试Struts 1的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而可以脱离Web容器测试Struts 1的Action类。Struts 2 Action可以通过初始化、设置属性、调用方法来测试。

5) 封装请求参数的对比:Struts 1使用ActionForm对象封装用户的请求参数,所有的ActionForm必须继承一个基类:ActionForm。普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts 1提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;Struts 2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts 1 ActionForm的模式,Struts 2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts 2基类,是一个POJO,从而降低了代码污染。

6) 表达式语言方面的对比:Struts 1整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts 2可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2下的表达式语言功能更加强大。

7) — 绑定值到视图的对比:Struts 1使用标准JSP机制把对象绑定到视图页面;Struts 2使用“ValueStack”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。

8) 类型转换的对比:Struts 1 ActionForm 属性通常都是String类型。Struts 1使用Commons-Beanutils进行类型转换,每个类一个转换器,转换器是不可配置的;Struts 2使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。

9) 数据校验的对比:Struts 1支持在ActionForm重写validate方法中手动校验,或者通过整合Commons alidator框架来完成数据校验。Struts 2支持通过重写validate方法进行校验,也支持整合XWork校验框架进行校验。

10) Action执行控制的对比:Struts 1支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。Struts 2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。

11) 捕获输入:Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。


4、你所了解的中间件?
Tomcat  webSphere


5、struts2需要继承哪个类?是必需的吗?
我做的时候,我的action是继承ActionSupport的

Struts 2的Action无须实现任何接口或继承任何类型,普通的POJO类就可以用做Action类,但是,我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重载(Override)此类里的String execute()方法,因为ActionSupport已经实现了Action接口,还实现了Validateable接口,提供了数据校验功能。通过继承该ActionSupport类,可以简化Struts 2的Action开发。

Action 跟 Actionsupport 的区别:
当我们在写action的时候,可以实现Action接口,也可以继承Actionsupport这个类.到底这两个有什么区别呢? Action接口有:
public static final java.lang.String SUCCESS = "success";
public static final java.lang.String NONE = "none";
public static final java.lang.String ERROR = "error";
public static final java.lang.String INPUT = "input";
public static final java.lang.String LOGIN = "login";
public abstract java.lang.String execute() throws java.lang.Exception;

而Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法之前执行,如校验失败,会转入input处,必须在配置该Action时配置input属性。 另外,Actionsupport还提供了一个getText(String key)方法还实现国际化,该方法从资源文件上获取国际化信息. 这样在自定义标签时可以定义一个变量为new actionsupport对象实现国际化。

ActionSupport类的作用
struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。

Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。
分享到:
评论

相关推荐

    体系结构(待整理资料)

    在这个"待整理资料"中,我们可以预想其内容可能涉及计算机系统、网络架构、数据库设计、分布式系统等多个方面的知识。 首先,体系结构的基础是计算机系统架构,这通常包括中央处理器(CPU)、内存、输入/输出设备等...

    RS485抗干扰待整理

    通过理解干扰的本质,分析具体问题,可以采取预防措施和解决方案,例如合理布线、选用抗干扰器件、优化接地策略等,以确保RS485通信的稳定性和可靠性。在安防监控和智能建筑等领域,这些问题的解决显得尤为重要,...

    智能控制课件待整理20220330

    智能控制是现代自动化技术与人工智能交叉融合的领域,它涵盖了多种高级控制策略和技术,用于解决复杂、非线性、不确定的系统控制问题。本课件集合主要针对的是2022年3月30日更新的智能控制相关教学资料,旨在帮助...

    TXT文本整理器 整理网络小说格式的工具

    "TXT文本整理器"可能会提供选项来清理这些格式问题,确保所有章节在统一的标准下呈现,提高阅读舒适度。 此外,"绿化.bat"文件通常是为了简化安装过程和减少系统资源占用而设计的绿化版安装脚本。使用这个脚本,...

    java程序设计实例教程--刘志成---课后答案(待整理版)

    此待整理版的课后答案,虽然可能未经正式出版,但无疑对自学Java的读者来说是一份宝贵的资源。 在Java编程中,我们首先会接触到基础的语法元素,如数据类型(包括基本类型如int、double和引用类型如String)、变量...

    软著源代码整理工具,生成软著格式代码文本

    `SourceConvert.exe`是实际的程序主文件,用户只需提供待处理的源代码文件夹路径,工具就会自动处理其中的所有代码文件。 在软件著作权申请过程中,源代码提交的目的是为了证明开发者对软件的独特创新和知识产权。...

    SQL语句格式整理器

    这款工具的操作流程相当直观:首先,用户只需要复制待整理的SQL语句,然后将其粘贴到整理程序中。程序会自动分析语句结构,根据语句类型(如SELECT、INSERT、UPDATE、DELETE等)和嵌套层次,合理地调整括号、关键词...

    软著代码整理小工具。

    这时,“软著代码整理小工具”便应运而生,它专为解决这类问题设计,帮助开发者快速整理和格式化源代码,以满足软著申请的要求。 该工具的核心功能包括两大部分:去除注释和快速整理文档。这两项功能对于源代码的...

    文件整理工具-FolderMaker

    用户只需要指定包含待整理文件的目录,程序会自动扫描并识别文件,然后为每个文件创建一个与其同名的文件夹,并将文件移动进去。这种方式极大地提高了文件分类和检索的效率,尤其适用于那些拥有大量散乱文件的用户。...

    代码整理软件

    3. **运行AStyle**:通过命令行或者集成开发环境(IDE)的插件,调用AStyle并指定待整理的源代码文件或整个目录。 4. **检查结果**:AStyle会生成新的格式化后的代码文件,开发者需要检查是否符合预期,如有问题可以...

    磁盘整理软件 UDefrag

    5. 整理完成:待整理完毕,UDefrag会给出提示,用户可以根据需要选择是否重新启动计算机,以确保所有的更改生效。 **四、注意事项** 1. 碎片整理过程中不要进行其他磁盘读写操作,以免影响整理效果。 2. 整理磁盘...

    软著代码整理工具,可以实现一键提取文件中的代码并且自动删去空行和注释,便于进行软著申请

    6. **使用流程**:用户通常只需要将待处理的代码文件拖放到工具界面,或指定文件路径,然后点击“整理”按钮,即可完成整个处理过程。简单易用的界面设计是提高用户体验的关键。 7. **安全性与隐私保护**:在使用这...

    SQL文自动整理格式工具

    sqllice是一款专为解决SQL代码格式混乱问题而设计的工具,它能够帮助开发人员快速、高效地整理SQL脚本,使其更符合编程规范,提高代码可读性和团队协作效率。无论你是使用Java、Python、C#还是其他语言进行开发,...

    苏州app服务端问题整理.docx

    文档标题和描述中提到的是对苏州地区一款APP服务端存在的问题进行的整理,主要涉及到消费者账户、卷烟图片管理、零售户数据、消息管理、意见反馈、资讯管理、评价功能等多个方面的问题。以下是对这些问题的详细解析...

    JAVA经典算法收集整理

    【JAVA经典算法收集整理】 在计算机科学中,算法是解决问题或执行任务的精确步骤序列,它们对于编程至关重要,特别是对于性能敏感的应用。JAVA作为一种广泛使用的编程语言,拥有丰富的算法实现。以下是一些经典的...

    文本整理器用于整理网上下载的资料

    在网上下载的资料往往出现空格空行待的现象,使用该广本编辑器可以解决类似的问题

    C语言代码自动整理软件

    在使用过程中,用户可以导入待整理的C源代码文件,然后选择合适的格式化选项,最后导出整理后的代码。 总的来说,"C语言代码自动整理软件"是一个实用的工具,对于任何从事C语言编程的人来说,都是提高工作效率和...

    土地开发整理-土地整理施工方案1-6章

    这部分内容会深入分析待开发土地的现状,包括土地类型、权属、土壤质量、地形地貌、基础设施等,为后续的规划设计提供基础数据。此外,还会评估现有土地利用的合理性和潜力,识别存在的问题和挑战。 第三章:规划与...

    stackoverflow上Java相关回答整理翻译.zip

    对问题进行分类,整合多个答案、删除冗余内容、加上自己的验证结果、心得等等对于参与翻译的人,这也是很好的一个学习、理解过程,欢迎大家一起来翻译如何参与翻译如何参与请从下面的“待翻译问题链接”中寻找你感...

    苏教版七年级上册数学[实际问题与一元一次方程(一)(基础)知识点整理及重点题型梳理].doc

    本文主要针对苏教版七年级上册数学的实际问题与一元一次方程(一)(基础)进行知识点整理和重点题型的梳理,旨在帮助学生掌握解决实际问题的基本方法和策略。 1. **列方程解应用题的一般步骤** - **审**:理解...

Global site tag (gtag.js) - Google Analytics