常考Struts2面试题(附答案)
2023-04-02 17:46:07
对于有一定Java Web基础对于人来说,有必要学习Struts2的,Struts2是基于MVC设计模式的Web应用框架,本质上相当于servlet,这在将用于java开发项目。所以今天我们来盘点一下常考。Struts2面试题都有哪些,当然以下总结的这些知识不只是面试的时候有用,对于以后开发项目也有一定的帮助。
1、简单介绍一下 什么是Struts2框架?
答:Struts2框架是根据MVC设计模式设计的WEB层框架 1 在WebWork技术的基础上,合并了一个全新的框架。它的新Struts 2系统结构和Strutss Strutss的系统结构差异很大 2以WebWork为核心,采用拦截器机制处理用户请求。也使得业务逻辑控制器能够与ServletAPI相匹配 完全离开。
我们可以把 struts2被理解为一个大的 servlet,而这个 servlet 就是 ActionServlet。struts2 在处理客户端请求时,将首先阅读web.xml 根据前端控制器的要求,配置文件 分发给不同的 Action 处理。在此之前,ActionServlet将被提交 将数据包装成一个 javaBean。 Struts2框架提供了许多拦截器,我们可以在包装数据的过程中操作数据,如数据验证等。Action执行后,返回结果视图 struts2 在配置文件中,选择转发或重定向。
2、Action配置在Struts2中有哪些注意事项?
答:需要注意的是(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实现moderiven接口;(2)action 在实体类对象中创建;(3)实现接口的getmodel方法,并返回创建的对象。
三是表达式封装:(1)在在action中声明实体类;(2)实体类的生成set和get方法;(3)表单输入项在name属性值中写表达式。
5、Struts2的值栈是什么?
A:值栈是对应每个请求对象的数据存储中心。Struts2引入值栈的一个非常重要的特点。在此之前,我们通过缓存或模型驱动在action和页面之间传输数据。数据混乱,难以管理。缓存有时间和数量限制,使用起来非常困难。引入值栈解决了这个问题,它可以统一管理页面和action之间的数据,供action使用、result、使用interceptor等。在大多数情况下,我们不需要考虑值栈在哪里,里面有什么。我们只需要获取我们需要的数据,这大大降低了开发人员的工作量和逻辑复杂性。
6、SpringMVC和Struts2有什么区别?
答:(1)Struts2是类级拦截,一类对应于request的上下文,SpringMVC 这是方法级别的拦截。一种方法对应于request的上下文,而该方法同时对应于url。因此,SpringMVC很容易从架构本身实现restful url,实现struts2的架构需要很大的努力,因为Action在Struts2中的一种方法可以对应一个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能力。