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

Struts常见面试题

阅读更多

1.什么是MVC?

  MVCModel,View,Controller的缩写,MVCApplication开发的设计模式,

也就是大家所知道的Model2.MVC的设计模式中,它包括三类对象:(1)模型(Model)对象:是应用程序的主体部分。

2)视图(View)对象:是应用程序中负责生成用户界面的部分。(3)控制器(Control)对象:是根据用户的输入,

控制用户界面数据显示及更新Model对象状态的部分。即要求在Application开发中你把商业逻辑,界面显示,数据分离。

 

 

2.MVC有哪些优缺点?

   优点:

 

1)视图控制模型分离, 提高代码重用性。

 

2)提高开发效率。

 

3)便于后期维护, 降低维护成本。

 

4)方便多开发人员间的分工。

 

  缺点:

 

1)清晰的构架以代码的复杂性为代价, 对小项目优可能反而降低开发效率。

 

2)运行效率相对较低

 

3)目前没有比较好的rich 客户端的解决方案

 

4) 控制层和表现层有时会过于紧密,导致没有真正分离和重用

 

 

 

3. 请简述struts1的工作流程

   

    工作机制:
Struts的工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
当ActionServlet接收到一个客户请求时,将执行如下流程.
-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;
-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;

 

4. ActionActionForm是单例的吗?Action是线程安全的吗?

  

   Action是单例的,不是线程安全的

   每当有一次用户的请求,ActionFrom就会被创建一次

 

5struts1struts2的区别和对比?

 

 

Action :

Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。

Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去 实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2Action对象。

 

线程模式:

Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。

Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

 

Servlet 依赖:

Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest HttpServletResponse 被传递给execute方法。

Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的requestresponse。但是,其他的元素减少或者消除了直接访问HttpServetRequest HttpServletResponse的必要性。

 

可测性:

测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。

Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

 

捕获输入:

Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经 常创建多余的类捕获输入。动态BeanDynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存 在的JavaBean(仍然会导致有冗余的javabean)。

Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己()属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglibPOJO输入对象的引用。

 

表达式语言:

Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。

Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).

 

绑定值到页面(view:

Struts 1使用标准JSP机制把对象绑定到页面中来访问。

Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

 

类型转换:

Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。

Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。

 

校验:

Struts 1支持在ActionFormvalidate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。

Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性

 

Action执行的控制:

Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。

 

6.简述Struts Form Bean的表单验证流程
   

    1、当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionForm Bean中。
    2、接下来Struts框架会调用ActionForm Bean的validate()方法进行表单验证。
    3、如果validate()方法返回的ActionErrors 对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。
    4、如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过<html:errors>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。
对于以上流程的步骤4 。如果ActionForm的validate()方法返回一个包含一个或多个ActionError的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute方法。

 

 

7. Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?如果是,说明原因


不是

声明局部变量,或者扩展RequestProcessor,让每次都创建一个Action,或者在spring中用scope="prototype"来管理

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    spring、Struts2、hibernate常见面试题

    Spring、Struts2、Hibernate面试题详解 本文将详细解释 Spring、Struts2、Hibernate 面试题中的知识点,涵盖了 MVC 模式、Struts1.2 和 Struts2.0 的区别、单例模式、Servlet 依赖、可测试性、项目中使用 SSH 的...

    JAVA struts2 框架 面试题

    JAVA Struts2 框架面试题解析 本文将详细解析 JAVA Struts2 框架相关知识点,涵盖异常处理、Servlet 生命周期、集合框架、HashMap 和 Hashtable 的区别、final、finally 和 finalize 的区别、sleep 和 wait 的区别...

    Struts2+hibernate+spring的常见面试题

    在面试中,了解Struts2的核心组件及其与Struts1的区别是至关重要的。熟悉这些知识点可以帮助开发者在实际项目中更有效地利用Struts2框架,提高开发效率和应用的质量。同时,理解Web项目开发的角色划分和流程规范,也...

    struts面试题详解

    在深入探讨Struts面试题之前,我们首先理解Struts1的基本架构和工作原理。 **1. Struts1框架的核心组件:** - **ActionServlet**:这是Struts1的核心控制器,它是一个实现了Servlet接口的类。当用户发起HTTP请求时...

    struts基础面试笔试题及其答案

    Struts 是一个开源的Java Web框架,由Apache软件基金会维护,主要用于构建企业级...以上是关于Struts基础的一些常见面试题和答案,深入理解和掌握这些概念对于Java Web开发者来说非常重要,尤其是在处理企业级应用时。

    Struts+Hibernate+Spring常见面试题

    【面试题总结】 1. 了解Struts的工作流程和优缺点,理解Action的线程安全性问题。 2. 理解MVC模式,知道Struts如何实现MVC,以及MVC的组成部分。 3. 熟悉Spring的AOP和IOC概念,理解它们在Spring中的应用。 4. 掌握...

    struts1.chm

    struts1 学习整理 有基础的才下 有struts常见面试题

    Spring,hibernate,struts常见的面试笔试题汇总

    面试中可能会问到Struts的生命周期,ActionForm、ActionServlet、ActionMapping和ActionForward等概念,以及如何处理表单数据和验证。 面试时可能会综合考察这三个框架的整合使用,如Spring与Hibernate的集成,以...

    java面试题,J2EE面试题 笔试题

    6、java常见面试题 7、java程序员面试宝典 8、java面试题及答案 9、java面试题编程篇 10、Oracle面试题 11、Oracle企业面试题集锦 12、Spring面试题 13、SSH面试题 14、Strut+Spring+Hibernate面试题 15、张孝祥整理...

    大量的Struts面试题集合

    以上是关于Struts面试题的一些常见知识点,理解和掌握这些内容将有助于Java程序员在面试中展示自己对Struts框架的深入理解。同时,不断实践和探索Struts的高级特性和最佳实践也是提升技能的关键。

    Struts+Hibernate+Spring面试题合集及答案常见题目经典精选汇总大全.docx

    这些面试题涵盖了Hibernate、Struts和Spring的主要概念、工作原理和最佳实践,深入理解和掌握这些知识点对于Java开发者来说至关重要。在实际面试中,除了基础理论知识,面试官还会关注开发者在项目中如何应用这些...

    struts hibernate spring 面试题大全

    - **面试题示例:**解释Struts的工作流程;什么是ActionForm?如何处理表单验证? 2. **Hibernate框架** Hibernate是一个对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库,简化了数据库操作的复杂...

    struts2面试题(个人四处搜集,吐血推荐)

    主键生成策略在Hibernate的映射文件中描述,常见的策略有`increment`, `native`, `identity`。 对于Hibernate的注解映射,`@Id`用于标识主键属性,`@Column`用于映射普通属性,`@Table`用于标记实体类所对应的...

    spring+struts+Hibernate面试题

    以上涵盖了 Spring、Struts 和 Hibernate 的一些常见面试题及解答,希望对准备相关技术面试的读者有所帮助。对于这些技术的理解不仅限于理论知识,更重要的是能够在实际项目中运用并解决具体问题。

    java之SSH常见面试题

    【SSH常见面试题详解】 SSH 是 Java Web 开发中三个著名框架 Struts、Hibernate 和 Spring 的简称。这些框架分别负责模型-视图-控制器(MVC)架构的不同部分,为开发人员提供了一种高效且可扩展的方式来构建企业级...

    struts spring hibernate面试题

    ### Struts、Spring、Hibernate 面试题详解 #### 1. Action 是否线程安全?如果不是,如何保证 Action 的线程安全? - **答案**:通常情况下,Struts 的 Action 不是线程安全的。因为同一个 Action 实例可能会被多...

    SSH框架部分常见面试题.pdf

    SSH框架部分常见面试题.pdf 本文将对 SSH 框架部分常见面试题进行详细的解释和分析,以帮助读者更好地理解 SSH 框架的各个方面。 MVC 框架 MVC 是一种设计模式,分为 Model、View、Controller 三个部分。Model ...

    Spring 常见面试题

    6. **集成其他框架**:Spring 能够很好地与其他流行框架如 Hibernate、JPA 和 Struts 等进行集成,形成一个统一的开发平台。 7. **低侵入性设计**:Spring 采用非侵入式设计,几乎不会影响现有代码,便于维护和升级...

Global site tag (gtag.js) - Google Analytics