Struts常见面试题

Struts分为Struts1和Struts2,默认情况下指的是Struts2,Struts1除非特别说明。

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

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

<s:iterator value = “list” var=”user”>
<s:property value = “#user.username”>
</s:iterator>

(2)向 request 域放值(获取 context 里面数的据, 写 ognl 时候,首先添加符号#context 的 key 名称.域对象名称)
(3)在页面中使用 ognl 获取
<s:property value = “#request.req”>
(4)%在 struts2 标签中表示单标签
在 struts2 标签里面使用 ognl 表达式, 如果直接在 struts2 表单标签里面使用 ognl 表达式不识别, 只有%之后才会识别。

<s:textfield name=”username” value=”%{#request.req}”>

2、Struts2框架的核心是什么?

核心控制器FilterDispatcher、业务控制器Action和用户实现企业业务的逻辑组件。

核心控制器FilterDispatcher是Struts 2框架的基础,包含框架内部的控制流程和处理机制。

业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发时,需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。

3、简单地说一下Struts2的处理流程?

13566833-48433db4218c77ab.png

Struts2工作流程.png

1)客户端初始化一个指向Servlet容器的请求(比如浏览器发送请求),该请求经过过滤器(Filter)后指向核心控制器FilterDispatcher;
2)核心控制器根据请求询问ActionMapper需要调用哪个Action;
3)ActionMapper把决定告诉核心控制器,核心控制器再把请求的处理交给ActionProxy;
4)ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类,创建一个ActionInvocation的实例;
5)ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用;
6)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果;
7)响应的返回是通过我们在web.xml中配置的过滤器
8)如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。

4、struts2配置文件的加载顺序?

先执行struts.xml然后执行struts.properties。
常量可以在struts.xml或struts.properties中配置,如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值。

struts.xml文件的作用:通知Struts2框架加载对应的Action资源

5、struts2常量的修改方式有哪些?

1)在struts.xml文件中配置:
<constant name="struts.action.extension" value="do"/>

2)在struts.properties中配置:
struts.action.extension=do

6、struts2是如何启动的?

struts2框架是通过Filter启动的,即StrutsPrepareAndExecuteFilter,此过滤器为struts2的核心过滤器;

StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件。

先写到这里吧 过后再更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值