JAVA企业面试题精选 Struts 11-18

3.11.请简述Struts2中各组件的作用及调用顺序

参考答案:

  Struts2有6大核心自检,分别为前端控制器filter,业务控制器Action,值对象ValueStack,拦截器Interceptor,输出组件Result,Struts2标签.
  它们的调用顺序是,请求提交给前端控制器filter,它会根据struts.xml中的配置找到对应的业务控制器Action,然后实例化值对象ValueStack并实例化Action放于ValueStack的栈顶,在调用Action 的业务方法,在调用过程中会被拦截器组件所拦截.最终根据Action方法的返回值,filter从struts.xml中可以找到对应的Result,于是使用这个Result向页面输出内容.
  当然,最常见的输出实际上是将请求转发给一个JSP.name在容器解析JSP生成HTML的过程中,Struts2标签将被解析.此时标签中的OGNL表达式会发送给ValueStack取值,返回的结果被写入最终生成的HTML.

3.12.简述拦截器的作用

参考答案:

  拦截器适合封装一些共通处理,便于重复利用.例如请求参数给Action属性,日志的记录,权限检查,事务处理等.拦截器是通过配置方式调用,因此使用方法比较灵活,便于维护和扩展.

3.13.Struts2有哪些UI标签,请简述其作用

参考答案:

  Struts2中有如下UI标签:
  1.表单标签,可以生成form元素.
  2.文本框,密码框,文本域标签,这些标签很相似,都是生成一个框体,然后在框体中显示出默认的内容,差异仅仅是长相不同.
  3.布尔框,可以生成一个checkbox,要求用户进行确认选择.这个标签可以做默认的勾选,但是要求OGNL表达式访问的值是布尔类型的.
  4.单选框标签,可以生成一组单选框,并根据OGNL取值自动勾上一个单选框.
  5.复选框标签,可以生成一组复选框,并根据OGNL取值自动勾选上几个复选框.
  6.下拉列表标签,可以生成一个下拉列表,包含一组option,并根据OGNL取值自动勾选上一个option.
  注意,上述单选框,复选框,下拉列表标签,在使用上都有2中初始化选项的方式,一种是静态的方式,可以直接在标签上写出固定的范围,并根据此范围初始化选项.也可以在标签上通过OGNL表达式访问Action中的一个集合,并根据此集合来初始化选项.

3.14.Struts2中的拦截器有什么用,与Spring中的AOP有什么区别和联系

参考答案:

  Struts2中的拦截器可以批量扩展Action,处理一组Action的通用业务逻辑.
  Struts2中的拦截器实际上就是采用AOP思想实现的,只是它只能处理Action的通用逻辑,无法处理其他组件的通用逻辑.而Spring的AOP实现更为灵活,可以实现任意一批组件的通用业务逻辑.

3.15.Action默认引用哪个拦截器,如果没有默认引用,会导致什么问题?

参考答案:

  Action默认引用一个拦截器栈,叫做defaultStack.这个默认引用不能丢掉,因为里面包含了Struts2框架所必须依赖的一些拦截器,如果丢掉会导致项目报错.因此我们在开发时,如果自己引用了自定义拦截器,要注意不丢掉默认的拦截器栈.

3.16.Struts2写Action的时候,需不需要继承什么类?

参考答案:

  可以继承自ActionSupport类,也可以不继承.

3.17.Struts Action是不是线程安全?如果不是,有什么方式可以保证Action的线程安全?如果是,请说明原因(Struts1和Struts2)?

参考答案:

  Struts1的Action不是线程安全的.Struts1在第一次请求某个Action是,会创建这个Action实例.之后再请求该Action实例时,就用之前创建好的这个Action处理,即他是单例模式.在Struts1的方法调用模式用到的参数一般都是局部变量(包括Request,Response等),局部变量是线程安全的,因此不用考虑线程安全问题.如果在Action类中使用了实例变量,就会存在线程安全问题.所以我们用Struts1开发是尽量不要使用实例变量.
  Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题.不过在Spring + Struts2的应用中,由Spring来管理Struts2的Action,而IOC容器管理的bean默认是单实例(scope=”singleton”),加上Struts2的Action就像一个POJO一样,定义了很多的类变量,这就有线程安全问题了.解决此问题最简单的办法则是不是用单例模式(设置scope=”prototype”>,配置如下:

<bean id="testAction" class="com.webapp.action.TestAction" scope="prototype">

3.18.Struts2中的拦截器和Servlet中的过滤器有什么区别?

参考答案:

  Struts2中的拦截器和Servlet中的过滤器的区别如下:
  1.拦截器是基于Java反射机制的,而过滤器是基于函数回调的;
  2.过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器;
  3.拦截器只能对Action请求其作用,而过滤器则可以对几乎所有请求起作用;
  4.烂机器可以访问Action上下文,值栈里的对象,而过滤器不能;
  5.在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值