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的处理流程?
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文件。
先写到这里吧 过后再更