拦截 :
在src下建interceptor
public class filterinterceptor extends AbstractInterceptor {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation ai) throws Exception {
Object action=ai.getAction();
if(action!=null)
{
if(action instanceof loginAction)
{
loginAction loginact=(loginAction) action;
String descri=loginact.getUser().getDescri();
if(descri.contains("bad"))
{
descri=descri.replaceAll("bad","XXXX");
User user=new User();
String hobby=user.getHobby();
String name=user.getName();
String pass=user.getPassword();
int sex=user.getSex();
String provice=user.getProvice();
user.setDescri(descri);
loginact.setUser(user);;
}
return ai.invoke();
}
}
return loginAction.LOGIN;
}
}
建action
public class loginAction extends ActionSupport implements SessionAware{ //防止反复提交的话必须要继承,且涉及interceptor
private Employ emp;
private Map<String,Object> session;
@Override
public void setSession(Map<String, Object> arg0) {
this.session=arg0;
}
public Employ getEmp() {
return emp;
}
public void setEmp(Employ emp) {
this.emp = emp;
}
// @Override
// public void validate() {
// if(emp.getUser()==null||("").equals(emp.getUser()))
// {
// this.addFieldError("name", "请输入用户名");
// }
// if(emp.getPassword()==null||("").equals(emp.getPassword())) {
// this.addFieldError("password", "请输入密码");
// }
// }
public String dologin()
{
if(emp.getUser().equals("zhangsan")&&(emp.getPassword()).equals("123"))
{
session.put("name",emp);
}
return "success";
}
}
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"/> //开发模式,最好写
<package name="firstpackage" extends="struts-default">
<interceptors>
<interceptor name="filterinterceptor" class="com.a.interceptor.filterinterceptor"/> //声明interceptor,且声明放在package内最上方,否则可能有问题
</interceptors>
<global-results>
<result name="success">/token/success.jsp</result>
<result name="login">/token/login.jsp</result>
</global-results>
<action name="loginAction" class="com.a.Action.loginAction" method="doLogin">
<interceptor-ref name="defaultStack"></interceptor-ref> //放重复提交
<interceptor-ref name="token"></interceptor-ref>
<result name="invalid.token">/token/notice.jsp</result>
<interceptor-ref name="filterinterceptor"></interceptor-ref> //部署拦截字符的
</action>
</package>
</struts>
login.jsp
<body>
<s:form action="loginAction" method="post">
<s:token></s:token> //防重复提交
<s:textfield name="user.name" label="user" required="true" requiredposition="left"></s:textfield>
<s:password name="user.password" label="password" required="true" requiredposition="left"></s:password>
<s:radio name="user.sex" list="#{1:'男',0:'女'}" label="sex" ></s:radio>
<s:select list="{'请选择省份','吉林','北京','上海'}" name="user.provice" label="provice"></s:select>
<s:checkboxlist list="{'足球','游泳','跑步'}" name="user.hobby" label="label"></s:checkboxlist>
<s:textarea name="user.descri" cols="30" rows="5" label="描述"></s:textarea>
<s:submit value="submit"></s:submit>
<s:reset value="reset"></s:reset>
</s:form>
</body>
</html>
还写notice.jsp,,success.jsp省】
注意点:在struts.xml中拦截器声明在上面,且在action在下面,且在action部署中拦截器的部署都是在result前面的一个拦截器完了接着下一个,
拦截器的class中
Object action=ai.getAction();
if(action!=null)
{
if(action instanceof loginAction)
{
loginAction loginact=(loginAction) action;
以上几句是拦截器里面涉及action内容的通用方法,,机即通过拦截器对象拿到action对象
其他的还可以通过拦截器对象拿到actioncontext然后拿到session见另一个拦截器栗子!
大家晚安 拜托明天高效