*目录
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>