动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

常考Struts2面试题(附答案)

07-28 17:16 458浏览
举报 T字号
  • 大字
  • 中字
  • 小字

对于有一定Java Web基础的人来说,是有必要学习Struts2的,Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,这在java开发项目中会使用到。所以今天来盘点一下常考Struts2面试题都有哪些,当然以下总结的些知识只是时候有用,于以项目有一定的帮助

1、简单介绍一下 Struts2框架是什么?

答:Struts2框架是一个按照MVC设计模式设计的WEB层框架,是在struts 1 和WebWork的技术基础上进行了合并的全新的框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI 完全脱离开。

我们可以把 struts2理解为一个大大的 servlet,而这个 servlet 就是 ActionServlet。struts2 在处理客户端请求时,会先读取web.xml 配置文件,根据前端控制器将符合条件的请求 分给各个不同的 Action 处理。在此之前,会把ActionServlet 会把数据封装成一个 javaBean。 Struts2框架提供了许多的拦截器,在封装数据的过程中,我们可以对数据进行一些操作,例如:数据校验等等。当Action执行完后要返回一个结果视图,这个结果视图可以跟据 struts2 的配置文件中配置,选择转发或者重定向。

2、Struts2中Action配置的注意事项有哪些?

答:需要注意的是(1)name包名称,在struts2的配置文件中,包名不能重复,name并不是真正包名,只是为了管理Action;(2)namespace和 的name属性,决定Action的访问路径 (以/开始 ) ;(3)extends继承哪个包,通常开发中继承struts-default包(struts-default包在 struts-default.xml 中定义 )。

3、拦截器和过滤器有哪些区别?

答:(1)拦截器是基于java的反射机制的,而过滤器是基于函数回调;

2)拦截器不依赖与servlet容器,而过滤器依赖与servlet容器;(3)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用;(4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能;(5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

4、Struts2的封装方式有哪些?

答:一是属性封装:(1)在action中设置成员变量,变量名与表单中的name属性值相同;(2)生成变量的set方法。

二是模型驱动(常用):(1)action实现ModeDriven接口;(2)在action 里创建实体类对象;(3)实现接口的getModel方法并返回所创建的对象。

表达式封装:(1)action中声明实体类;(2)生成实体类的set和get方法;(3)在表单输入项的name属性值里面写表达式

5、简单介绍一下Struts2的值栈是什么?

答:值栈是对应每一个请求对象的数据存储中心。Struts2的一个很重要的特点就是引入了值栈。之前我们通过缓存或者模型驱动在action和页面之间传递数据,数据混乱,并且难以管理,缓存还有时间和数量限制,使用起来非常的困难。值栈的引入解决了这个问题,它可以统一管理页面和action之间的数据,供action、result、interceptor等使用。我们大多数情况下不需要考虑值栈在哪里,里面有什么,只需要去获取自己需要的数据就可以了,大大的降低了开发人员的工作量和逻辑复杂性。

6、SpringMVCStruts2的区别都有什么?

答:(1)Struts2是类级别的拦截,一个类对应一个request上下文,SpringMVC 是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。

2)由上边原因,SpringMVC 的方法之间基本上独立的,独享 request response 数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个 Action 对象对应一个 request上下文。

3)由于Struts2需要针对每个request进行封装,把request,session 等 servlet 生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。

4)拦截器实现机制上,Struts2 有以自己的 interceptor 机制,SpringMVC 用的是独立的 AOP 方式,这样导致Struts2 的配置文件量还是比 SpringMVC 大。

5)SpringMVC 的入口是 servlet,而 Struts2 是 filter(这里要指出,filter 和 servlet 是不同的。),这就导致了二者的机制不同,这里就牵涉到 servlet和filter的区别了。

6)SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody 就可以实现,然后直接返回响应文本即可,而 Struts2 拦截器集成了 Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。

7)SpringMVC 验证支持JSR303,处理起来相对更加灵活方便,而 Struts2 验证比较繁琐,感觉太烦乱。

8)Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比 Struts2高。

9)设计思想上,Struts2 更加符合OOP的编程思想, SpringMVC 就比较谨慎,在servlet上扩展。

10)SpringMVC 开发效率和性能高于Struts2。

11)SpringMVC 可以认为已经100%零配置。

7、Struts2 中有哪些常用结果类型?

答:(1)dispatcher:默认的请求转发的结果类型,Action转发给JSP;

2)chain:Action 转发到另一个Action;(3)redirect:重定向,重定向到一个路径信息,路径信息没有限制(不在一个请求中),Action重定向到JSP;(4)redirectAction :Action重定向到另一个Action;(5)stream:将原始数据作为流传递回浏览器端,该结果类型对下载的内容和图片非常有用;(6)freemarker:呈现 freemarker 模板;(7)plaintext:返回普通文本内容。

8、Struts2中的#和%分别是做什么的?

答:(1)使用#获取 context 里面数据

 

 

 

2)向request域放值(获取context里面数据,写ognl时候,首先添加符号#context 的 key 名称.域对象名称)

3)在页面中使用 ognl 获取

 

4)%在 struts2标签中表单标签在struts2标签里面使用ognl表达式,如果直接在 struts2表单标签里面使用ognl表达式不识别,只有%之后才会识别。

 

9、Struts2动作和拦截器是否是线程安全的?

答:Struts2 Action类是线程安全的,因为对象是为每个处理它的请求实例化的。Struts2拦截器是单例类,并且创建了一个新线程来处理请求,因此它不是线程安全的,我们需要仔细实现它们以避免共享数据的任何问题。

10、Struts2中拦截器有哪些好处?

答:拦截器的一些好处是:拦截器在实现高度分离关注方面起着至关重要的作用。Struts2拦截器是可配置的,我们可以为我们想要的任何动作配置它。我们可以创建自己的自定义拦截器来执行一些常见任务,例如请求参数记录,身份验证等。这有助于我们在一个位置处理常见任务,从而降低维护成本。我们可以创建拦截器堆栈以用于不同的操作。

10道常考Struts2面试题希望大家可以掌握,其实这不仅仅是10道题目包含了许多Struts2知识点在里面,一名格的程序学习知识。当然想要学好Struts2只靠这些面试题是不够的,更重要的是要跟着专业的课程系统的进行学习,这样才能快速掌握Struts2.x开发框架,提升自身的java能力。

0人推荐
共同学习,写下你的评论
0条评论
代码小兵1066
程序员代码小兵1066

6篇文章贡献29791字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消