Struts2(一)


*目录
1、配置文件
2、拦截器
3、Action
4、输入校验*

配置文件
1、web.xml
位于WEB_INF目录下,配置Struts的核心控制器。拦截用户请求,并交给Action类

<web-app>
    <display-name>Name</display-name>
    <filter>
        <filter-name>struts2<filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2<filter-name>
        <url-pattern>/*</url-pattern>
    <filter-mapping>
</web-app>

2、struts.xml
存储在于WEB_INF\ classes目录下,配置Action类,自定义拦截器等等,通过这个文件判断下一步去哪个Action
(1)配置Bean、常量(class,name,type,scope,static,optinal等):

<struts>
    <bean type="组建实现的接口" name="BeanName" class="自定义类">
    <bean class="自定义类" static="true">
    <constant name="struts.il8n.encoding" value="GBK">
</struts>

(2)命名空间配置
若action内加了namespace属性,则URL为xxxx/name/xxx.action,否则默认”“

3、struts.properties
一个由键值对组成的Proterties文件,存储在于WEB_INF\ classes目录下

拦截器
1、拦截器与acton的关系
由FilterDispatcher初始化一个ActionProxy实例,并调用它的execute方法,拦截器会拦截用户请求,然后才调用execute方法,最后返回一个逻辑视图,拦截器是可插拔的,由配置文件配置
2、在struts.xml文件配置
(1)默认配置的拦截器,在struts-default.xml文件中,形式:

<interceptors>
<interceptor name="name1"  class="com.xxxx.xxxx" />拦截器
<interceptor name="name2"  class="com.xxxx.xxxx" />带参数的拦截器
    <param name="paramName">value</param>
<interceptor-stack  name="name3">拦截器栈
    <param name="name">value</param>拦截器栈统一参数
    <interceptor-ref name="name1"/>
        <param name="name">value</param>拦截器栈中的某一拦截器指定参数
    <interceptor-ref name="name2"/>
</interceptor-stack>

须在文件中先定义了拦截器才能在action属性中调用:

<action name="name" class="xxxxxxx">
    <result name="xxx">/xx.jsp</result>
    <interceptor-ref name="name"/>
</action>

若指定了某个拦截器,则默认的拦截器不起作用,若想起作用,则须手动配置默认拦截器,使用<default-interceptor-ref name="拦截器或栈名字"/>
(2)自定义的拦截器
可以继承抽象拦截器AbstractInterceptor类,实现itercept方法,此方法有一个参数ActionInvocation对象,可以通过此对象获得session、Action等等,要使用自定义拦截器需要在struts.xml先用定义拦截器,然后用使用拦截器,步骤与上述一样
3、使用拦截器
(1)要实现方法过滤,需要继承MethodFieldInterceptor抽象类,重写doInterceptor方法,在配置中如下:

<ation name="xx" class="xxx">
    <interceptor-ref name="方法过滤拦截器名">
        <param name="excludeMethods>Action中不被过滤的方法</param>
        <param name="excludeMethods>Action中被过滤的方法</param>
    </interceptor>

(2)拦截器的拦截顺序
在execute方法前,配置在前的拦截器先起作用,在Action的execute方法之后,后配置的拦截器先起作用
(3)拦截结果拦截器
实现PreResultListener接口,实现beforeResult方法,有参数result,即execute方法的返回值
(4)内建拦截器
因为用户的包继承了struts-default包,包含默认的拦截器栈,所以不用说这个。。。。

Action
继承ActionSupport
(1)访问Servlet API
直接方法:有IOC和非IOC方法,非IOC方法使用ServletActionContext的辅助类HttpServletRequest来获得API,静态方法有getPageContext()、getRequest()、
getResponse()、 getServletContext()、

间接方法:有一个ActionContext类,创建和使用ActionContext:

ActionContext ac=ActionContext.getContext();
ActionContext常用方法:
   Object get(Object key)查找ActionContext中的值
   Map getApplication()获得一个application级的Map对象
   static ActionContext getContext()获得当前的ActionContext
   Map getParameters()获得所有参数信息
   Map getSession()获得HttpSession
   void put(Object key,Object value)存入键值对
   void setApplication(Map application)设置上下文
   void setSession(Map session)设置session

(2)在struts.xml中配置Action
属性有name,class,method等

<package name="xx" extends="struts-default" namespace="">
    <action name="xx" class="xx" method="xx">
        <result name="xx">xx</result>
        <result type="redirect">xxx</result>

输入校验

(1)客户端校验和服务器校验
客户端校验可以用JavaScript代码绑定到表单,设置onSubmit属性,然后用自定义函数校验
服务器校验可以设置数据库限制条件、Java代码校验等等,类型转换要在数据校验之前

(2)重写validate()方法
此方法在execute()方法之前,若有不合格的输入,可以调用其父类的addFieldError()方法,记录错误,若有错误则不会执行execute()方法

(3)validateXxx()方法
专门校验xxx(),需要在对Action配置时,指定method属性,否则将执行validate()而不是validateXxx()
(4)内置校验器
有必填校验器、字符串长度校验器、日期校验器、正则表达式校验器等等
内置校验器在校验文件中配置:校验文件命名-validation.xml.例如:Requiredstring-validation.xml,配置文件如下:

<validators>
    <field name="action中的属性name">
        <field-validator type="使用的校验器类型" >
        <message>失败时显示的信息</message>
        </field-validator>
    </field>
</validators>

(5)自定义校验器
继承FieldValidatorSupport类,重写validate(Object obj)方法,然后新建validators.xml文件,

<validators>
    <validator name="xx" class="xxx"/>
</validators>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值