您的位置:首页 > 编程语言 > Java开发

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

2016-09-29 19:20 363 查看
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 stub
this.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{
//分装请求参数 firstCountry
private String firstCountry;
public String getFirstCountry() {
return firstCountry;
}

public void setFirstCountry(String firstCountry) {
this.firstCountry = firstCountry;
}

/**
*
*/
private static final long serialVersionUID = 1L;

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.print("firstAction" + firstCountry);
return SUCCESS;
}

@Override
public void prepare() throws Exception {
// TODO Auto-generated method stub
System.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;

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("secondAciton" + secondCountry);
return SUCCESS;
}

public String getSecondCountry() {
return secondCountry;
}

public void setSecondCountry(String secondCountry) {
this.secondCountry = secondCountry;
}

}
定义一个表单元素进行提交即可
其他两个系统拦截器个人认为不是非常的常用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: