1、struts2是什么
struts2是用于企业级Web开发的框架,基于struts2开发Web应用程序,在开发效率、可扩展性、可维护性上都会大有提升。
2、struts2的优点
struts2框架是典型的实现了MVC架构的框架,使用struts框架,通过struts2.xml文件配置非常容易的将数据层(模型)、控制层和视图展现层分离,开发出架构清晰的项目。
3、struts2的运行机制
参见博客:http://www.cnblogs.com/tengpan-cn/p/5210155.html
4、struts2知识体系
① 如何搭建最简易的struts2程序
结合struts2运行机制可知,首先在web.xml中配置struts2的过滤器;写struts2.xml文件(文件中可以include其他xml文件);写后台的action类(继承于ActionSupport类),类成员必须写get set方法;编写前端展示页面即可;
② 关于struts.xml配置中的问题
包(package):包的作用同Java中的包的作用是一样的,主要防止action的命名冲突,尤其是多个小组负责一个项目的时候;
包可以继承,默认(必须在xml中写)继承 struts-default 包;
namespace属性,值必须以“/”开头;对应客户端浏览器中的URL地址的一部分
action标签:位于package标签里面,这个标签指定了后台逻辑,实现的是控制层;
name属性对应的URL地址的一部分
动态方法调用(通配符* 的应用)~~~~,此技术可以从客户端向服务器端的struts.xml文件中传递参数,实现动态配置;
struts2是线程安全的,每次请求访问一个action 都会创建一个新的action对象。
默认的action,可以为一个包配置一个默认的action,当找不到action的时候就会执行默认的action
result标签,位于action标签里面,用于指定action执行完后,前台显示的内容,实现的是展示层;
name属性默认值是success;
type属性:可以设置为 dispatcher(服务器跳转到页面.jsp .html等)、redirect(客户端跳转到页面)、chain(服务器端跳转到action)、redirectAction(客户端跳转到action) ;默认是dispatcher;
关于struts中的路径:URL地址中的路径并不是文件的实际路径;也就是说,struts2寻找路径的方式不是按照文件保存路径去寻找的,而是根据package、action、result的这些对于关系找的。
global-result标签:一个package对应一个global-result标签,这个标签内包含多个result标签,这个包内的所有action都可以使用这些result标签;
其他包想要使用这些标签,可以继承这个包;
前端与服务器端的数据交互:
前端向服务器端传递数据:通过get或者是post请求传递参数,在action中通过各种方式拿到request 请求即可
① ActionContext.getContext().get("request") & ActionContext.getContext().getSession()
② ServletActionContext.getRequest();
③ 实现RequestAware、SessionAware接口(setRequest 与 setSession方法,入参是Map对象)(最常用)
④ 实现ServerletRequestAware接口
或者是通过DOMmain(域模型) 直接赋值给action的属性。
服务器端向前端传递参数:主要通过value stack 和 context stack,在服务器端通过request.setAttribute() 或者 session.setAttribute()将值放在值栈或者上下文栈中,然后通过ONGL表达式获取。
《ONGL表达式》 也可以直接给action的属性赋值,在前端通过ONGL获取action的属性;
动态结果集:在struts2.xml中获取action的属性值,这样产生动态结果集。获取方式${成员名};
标签:
<s:property value="ONGLExpression" default="" />
<s:set var="varName" value="varValue" />
<s:bean var="dog" name="com.bjsxt.action.Dog" >
<s:param name="name" value="'cacy'" /> <!-- cacy是Dog类的一个属性 -->
</s:bean>
这时候会将一个名字为dog的对象放在actionContext里面,类似于JSP的useBean
控制标签:
<s:if test="condition" ></s:if>
<s:else if test="condition"></s:if>
<s:else></s:else>
遍历集合
<iterator value="{1,2,3}" var="x" status="status">
<s:property /> //取出当前值 放在x变量中
<s:property value="#status.count" />
<s:property value="#status.index" />
</iterator>
遍历Map
<iterator value="#{1:'a', 2:'b' , 3:'c'}" var="x">
<s:property value="key" /> | <s:property value="value" />
<s:property value="#x.key" /> | <s:property value="#x.value" />
</iterator>
<subset> 标签,截取集合
关于% $ #的使用:
%:配合{}使用,将字符串转化为ONGL表达式;
#:相当于ActionContext. getContext(),可以用于访问context stack中的元素;用来构造Map "#{"key1":"value1","key2":"value2"}" (不太清楚为什么必须加#);用于过滤和投影;
$: 在xml文件中取action的属性值。
欢迎各位园友补充指正!!!