Struts学习----数据校验与拦截器

73 篇文章 0 订阅
52 篇文章 0 订阅

Struts数据校验

         1.校验分类:

  • 浏览器端校验:JavaScript,但不安全
  • 服务器端校验:struts校验

         2.struts校验介绍:

  • 手动校验:编写代码
           适用于需要与数据库交互。
  • xml校验:编写配置文件
          通用校验,逻辑简单。例如:不能为空,长度10,是否相等。

Struts手动校验

            手动校验,必须实现接口:Validateable,提供一个方法 validate()。

            1.action所有方法校验: 实现接口,并实现方法validate()

public class Demo1Action extends ActionSupport{
		private String name;
		
		
		public String execute(){
			System.out.println(name);
			return SUCCESS;
		}
//---------------------------------------------------
		@Override
		public void validate() {
			//验证代码放入该方法
			//判断name参数合法性
			if(name ==null || "".equals(name)){
				//不合法=> 调用addFieldError,添加错误信息
				addFieldError("name", "用户名不能为空!");
			}
			
			//写死,添加非表单字段错误信息
			addActionError("用户名已经重复!");
			//写死,添加提示信息
			addActionMessage("哈哈,这就是提示没别的意思!");
			
		}
		
//----------------------------------------------------		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
}

                2.action单个方法校验:实现接口,并编写方法 validate方法() , 此处“方法”表示执行的方法名称,首字母大写。

                     例如:add() 执行前需要校验,必须编写 validateAdd()

                     注意:先执行“单个方法”校验,再执行“所有方法”校验

               3.提供错误提示,阻止目标方法的执行

  •         this.addFieldError("", "") 给指定的字段设置提示信息
                  <s:fielderror>jsp显示错误
  •        this.addActionMessage(aMessage) action提示提示信息
                  <s:actionmessage/>jsp显示错误
  •        this.addActionError(anErrorMessage) action错误
                  <s:actionerror/>jsp显示错误

xml校验

          1.单个方法校验:

                   位置:action类同包

                   名称:actionClass-actionName-validation.xml

                             actionClass :表示action类名

                             actionName:表示action访问名称,及<action name="...">

                             validation.xml :固定后缀

           2.所有方法校验:

                    位置:action类同包

                    名称:actionClass-validation.xml,解释同上

           3.struts提供的校验器:

                  校验配置文件位置:xwork-core-2.3.15.3.jar!/com/opensymphony/xwork2/validator/validators/default.xml

拦截器

        struts提供拦截器,对action类进行增强的。struts已经实现多个拦截器,完成不同的功能。

        例如:文件上传、数据校验、类型转换、参数封装等

默认拦截者栈

        struts-default.xml 提供struts完成所有拦截器,也提供默认拦截器栈

       <default-interceptor-ref name="defaultStack"/> 所有的action默认使用那个拦截器栈

       <interceptor-stack name="defaultStack"> 声明一个拦截器栈,名称为“defaultStack”,通常称为:默认拦截器栈

<interceptor-stack name="defaultStack">
	<interceptor-ref name="exception"/>
	<interceptor-ref name="alias"/>
	<interceptor-ref name="servletConfig"/>
	<interceptor-ref name="i18n"/>
	<interceptor-ref name="prepare"/>
	<interceptor-ref name="chain"/>
	<interceptor-ref name="scopedModelDriven"/>
	<interceptor-ref name="modelDriven"/>
	<interceptor-ref name="fileUpload"/>
	<interceptor-ref name="checkbox"/>
	<interceptor-ref name="multiselect"/>
	<interceptor-ref name="staticParams"/>
	<interceptor-ref name="actionMappingParams"/>
	<interceptor-ref name="params">
		<param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
	</interceptor-ref>
	<interceptor-ref name="conversionError"/>
	<interceptor-ref name="validation">
		<param name="excludeMethods">input,back,cancel,browse</param>
	</interceptor-ref>
	<interceptor-ref name="workflow">
		<param name="excludeMethods">input,back,cancel,browse</param>
	</interceptor-ref>
	<interceptor-ref name="debugging"/>
</interceptor-stack>

             默认拦截器栈参数:

  • servletConfig : 用于给action类注入Servlet api。
           例如:action类实现ServletRequestAware就可以被struts框架注入HttpServletRequest对象
  • modelDriven: 调用action类的getModel()方法,获得javabean实例,如果没为null,将交予struts。
  • fileUpload:struts默认支持文件上传。
  • params:给action类进行数据封装。如果使用ModelDriven,就给javabean封装数据。
  • conversionError:将转换错误添加到action类的错误提示信息中。
           将执行 action.addFieldError("属性","错误提示");
  • validation:将执行action所有校验。先执行注解校验,再执行单个方法校验,最后所有方法的校验
  • workflow :从action类获得添加的错误信息,如果没有发行。如果有返回“input”
          方式1:默认情况,如果存在错误,返回值“input”
          方式2:实现接口ValidationWorkflowAware,修改整个action的错误返回结果集名称,将执行方法 getInputResultName()
          方式3:通过@InputConfig注解,给指定的方法配置出现错误时,返回结果result的名称。 

 

public class Demo8Action extends ActionSupport implements ValidationWorkflowAware{
	@Override
	public String getInputResultName() {
		return "xxx";  //出现错误不再返回input,二是xxx,所有的方法都使用。
	}
	
	@Override
	public String execute() throws Exception {
		
		System.out.println(this.getText("usernameMsg"));
		System.out.println(this.getText("passwordMsg"));
		System.out.println(this.getText("company"));
		
		
		return NONE;
	}

	@InputConfig(resultName="loginInput")	//如果登录出现异常,将返回不是input,而是loginInput
	public String login(){
		return SUCCESS;
	}
	@InputConfig(resultName="registerInput") //如果注册出现异常,将返回不是input,而是registerInput
	public String register(){
		return SUCCESS;
	} 

}

自定义拦截器

           1.实现接口:com.opensymphony.xwork2.interceptor.Interceptor

//初始化方法
public void init() { }
//拦截方法
public abstract String intercept(ActionInvocation invocation) throws Exception;
	invocation.getAction() 获得当前action类实例
	invacation.invoke()	放行
//销毁方法
public void destroy() {  }

            2.继承父类:com.opensymphony.xwork2.interceptor.MethodFilterInterceptor

              在使用自定义拦截器,可以对指定的方法进行操作(哪些方法不拦截,哪些必须拦截)

  •        设置属性includeMethods,确定哪些方法进行拦截
  •        设置属性excludeMethods,确定哪些方法不进行拦截

           3.<default-interceptor-ref name="xxx">将指定的拦截器,声明成默认的。

                 注意:如果使用自定义xxx,“defaultStack”将被覆盖。

注意:拦截器只拦截action类,不拦截jsp文件。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值