struts2拦截器的简单总结(3)

来源:互联网 发布:linux 别名 编辑:程序博客网 时间:2024/06/05 05:50

action与servlet API

action与servlet API是完全松耦合的,action类中可以方便进行测试 可以通过ActionContext类来访问servlet API,常用的方法有put,get,getApplication() 等

ActionContext.getContext().put("name", "caokaiqiang");//通过session来放值ActionContext.getContext().getSession().put("name1", "kevin");

ActionContext.getContext().getApplication().put("name","tom");
这样 便可以在jsp页面中进行访问,${sessionScope.name}

可以通过实现接口 来访问servlet  比如ServletContextAware来访问servlet 

public class action extends ActionSupport implements ServletContextAware {/** *  */private ServletContext context;
public void setServletContext(ServletContext arg0) {// TODO Auto-generated method stubthis.context = arg0;this.context.setAttribute("user", "jim");}
实现相应的方法即可 同样也可以通过其他接口来进行访问 例如httpServletResponse方法httpServletRequest方法等

struts2的标签库 OGNL语言的使用 可以简洁方便的访问后台数据 如#session['user']

添加头元素

 <%@taglib prefix="s" uri="/struts-tags" %>
uri表示struts2标签库的URI  prefix表示该标签库的前缀 对于所有的struts2标签库的使用都需要以s为前缀 当struts2框架发现某个标签是s前缀的 就认定是struts2标签

访问address属性

<s:property value = "#address"/>
if else标签

<s:if test="'A' in {'C','B'}">A</s:if><s:elseif test = "'A' in {'A','B'}">B</s:elseif><s:else>C</s:else>
append标签

<s:append var = "newList"><s:param value = "{'HTML','Java'}"></s:param><s:param value = "{'swift','OC'}"></s:param></s:append>
interator标签 用于进行循环遍历输出

<s:iterator value = "%{#newList}" id = "lst">

<s:property value = "lst"/></s:iterator>

merge标签
<pre name="code" class="java"><s:merge var = "mer"><s:param value = "{'HTML','Java'}"></s:param><s:param value = "{'swift','OC'}"></s:param></s:merge>

相当于checkbox
<!-- 对集合进行操作 创建了两个集合 随后默认china为默认值 --><s:select list="{'america','china'}" label = "Country" name = "country" value = "%{'china'}"></s:select><!-- 创建一个map对象 --><s:select list="#{'0':'female','1':'male'}" label = "sex"  name = "sex"></s:select>
struts2的数据标签

a 标签 表示一个超链接 

action 标签 表示动用struts.xml中哪个acion

<s:a action="actionBiaoqian">ccc</s:a>
<s:bean标签用于加载javabean param标签可以初始化参数值 

<s:bean var = "user" name = "com.biaoqian.test.User"><s:param name = "name" value = "tom"></s:param><s:param name = "age" value = "20"></s:param><s:if test="#user.age > 0"><s:property value = "#user.name"/></s:if></s:bean>
个人认为最重要的还是表单元素

<s:form action = "action" namespace="/user"><s:textfield label="name" name="username"></s:textfield><s:textfield label = "password" name = "password"></s:textfield><s:submit value="提交"></s:submit></s:form>
指定fom表单的action和 textfield中的关联类和 label值等
接下来最重要的就是strut2的拦截器部分了,是AOP思想的一种实现 可以吧大问题 分解为小问题 分别给不同的拦截器进行调用即可,拦截器在一起 还可以组成一个拦截器链,这些拦截器链会按照指定的顺序进行调用 

struts2的默认拦截器 

alias拦截器 作用是给参数起一个别名,让不同的action共享同一个参数值 实现了action之间的传值 只要在action下面加一个param元素 随后该元素name属性命名为aliases即可

     <action name = "firstAction" class = "com.kevinswift.action.FirstAction">  <!-- 指定action结果类型为chain --><result type = "chain">secondAction</result>  </action>  <action name = "secondAction" class = "com.kevinswift.action.SecondAction">  <result>success.jsp</result>  <!-- 分别要传的值 -->  <param name = "aliases">#{'firfirstCountry':'secondCountry'}</param>  </action>
两个类中进行打印和输出firstCountry和secondCountry

package com.kevinswift.action;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.Preparable;public class FirstAction extends ActionSupport implements Preparable{//分装请求参数 firstCountryprivate String firstCountry;public String getFirstCountry() {return firstCountry;}public void setFirstCountry(String firstCountry) {this.firstCountry = firstCountry;}/** *  */private static final long serialVersionUID = 1L;@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.print("firstAction" + firstCountry);return SUCCESS;}@Overridepublic void prepare() throws Exception {// TODO Auto-generated method stubSystem.out.println(firstCountry);}}

package com.kevinswift.action;import com.opensymphony.xwork2.ActionSupport;public class SecondAction extends ActionSupport {private String secondCountry;/** *  */private static final long serialVersionUID = 1L;@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("secondAciton" + secondCountry);return SUCCESS;}public String getSecondCountry() {return secondCountry;}public void setSecondCountry(String secondCountry) {this.secondCountry = secondCountry;}}
定义一个表单元素进行提交即可

其他两个系统拦截器个人认为不是非常的常用






0 0
原创粉丝点击