struts2拦截器
拦截器Interceptor和过滤Filter的区别
过滤器过滤的是请求方面的东西,范围比较广泛,比较粗糙,拦截器主要管action的跳转和访问,更加注重细节。
拦截器的自定义以用户登陆为例
1,创建一个类继承extends类AbstractInterceptor或者继承Implements接口Interceptor
继承MethodFilterInterceptor类
实现doIntercept方法返回值是一个ActionInvocation
public class interceptorDemo1 extends MethodFilterInterceptor{
protected String doIntercept(ActionInvocation invocation) throw Extecption{
判断session中是否存在数据
1,获得数据
User existUser=(User)ServletActionContect.getRequset().getSession().getAtrribute("existUser");
2,判断session中用户信息是否为空
if(existUser==null){
没有登陆
给出提示信息回到登陆页面
获得正在执行的Action
ActionSupport action=invocation.getAction();
执行addActionError方法在jsp页面显示信息
action.addActionError(“没有登陆,没有访问权限”);
return action.LOGIN;
}
else{
已经登陆
return invocation.invoke();放行
}
return null;
}
}
3配置xml
在package中添加拦截器或者拦截器栈
添加拦截器
interceptors>
interceptor name=”拦截器的名字” class=”路径.路径”> /interceptor>
有几个配几个
/interceptors>
添加拦截器栈,struts2如果自定义拦截器就不会执行默认的拦截器了,所以就需要手动添加
interceptor-stack name=”栈名”>
interceptor name=”拦截器名” class=”路径”/>
struts2的默认拦截器interceptor name=”defaultStack”/>
/interceptor-stack>
4在Action中配置拦截器或拦截器栈
引入拦截器:
package>
action>
interceptor-ref name=”拦截器的名字”>
interceptor-ref name=”defaultStack”>
引入拦截器栈:
package>
action>
interceptor-ref name=”拦截器栈的名字”>
4在Action中配置那些方法不被拦截
<interceptor-ref name="拦截器名">
<param name="excludeMethods">方法名逗号隔开可以写多个方法</param>
</interceptor>
struts2的标签库
常用标签
if,property,date,debug
UI标签
用UI标签方便数据回显
form表单
在jsp页面的form1表单中的target属性值可以改变页面跳转的方式
默认是_self在自己页面打开
_ blank新弹出一个新窗口,
_parent在父窗口打开
textfield文本框
radio单选框
checkboxlist复选框
select下拉列表
textarea文本域
hidden隐藏值
submit提交按钮
s:form action=”” method=”” theme=”别卵用这个”>
s:textfield name=”name” lable=”文本框在jsp页面显示的名字”/>
s:textfield name=”password” lable=”密码”/>
s:radio list=”{‘男’,’女’}” name=”sex” label=”性别”/>
s:select list=”{‘北京’,’上海’,’韩国’}” lable=”city” lable=”籍贯” headerKey=”” headerValue=”-请选择”/>
s:checkboxlist list=”#{‘basketball’:’篮球’,’football’:’足球’,’volleyball’:’排球’}” name=”hobby” lable=”爱好”/>
s:textarea name=”info” cols=”6” rows=”3” label=”介绍” value=”文本域的值存放位置”>/textarea>文本域
s:hidden name=”id” value=”隐藏区域的值”/>
s:submit name=”” value=”提交”/>
/s:form>
小碎的struts2 知识点
可以用action类实现接口ModelDriven来完成从jsp页面接收数据
ActionSupport里面有很多方法ActionError: this.addActionError(“用户名或者密码错误”);事例是表示当用户登陆信息错误时回显在jsp页面的信息
FieldError:输入类型错误
ActionMessage:
一般放用户登陆成功需要跳转时result的type需要设置为redirect重定向类型