--------------------------------------自定义拦截器-------------------------
业务需求:
如果用户登录后可以访问action中的所有方法
user.jsp{
//设置用户为登录状态
}
如果用户没有登录不允许访问action中的方法,并且提示"你没有权限执行该操作"
-----------------------------------------------------------------------------
定义拦截器类,实现com.opensymphony.xwork2.interceptor.Interceptor接口
cn.acc.interceptor.PermissionInterceptor
struts.xml:
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack"/> //系统的拦截器放在最前面
<interceptor-ref name="permission"/>
</interceptor-stack>
...
<action name="list_*" class="cn.accp.action.InterceptorAction" method="{1}">
<interceptor-ref name="permissionStack" /> //调用拦截器栈
</action>
系统的拦截器一定要用上,
如果希望某个包里面的所有action都用到权限拦截器,
写上默认拦截器:<default-interceptor-ref name="permissionStack" />
注意:每个包只能指定一个默认拦截器,另外,一旦我们为该包中的某个action显示指定了某个拦截器,则默认拦截器不会起作用。
如果想有默认拦截器,又想显示指定某个拦截器,那就照下面那样做:
<action name="list_*" class="cn.accp.action.InterceptorAction" method="{1}">
<interceptor-ref name="permissionStack" /> //整个包中的默认拦截器
<interceptor-ref name="xxxx" />
</action>
-----------------------------------------------输入校验----------------------------------------------
-----------------------------------------------------------------------------------------------------
对于输入校验struts2提供了两种实现方法:
1.采用手工编写代码实现。
2.基于XML配置方式实现。
通过重写validate()方法实现,validate()方法会校验action中所有与execute方法签名相同的方法。
当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用
addFieldError()方法,action可以继承ActionSupport),如果系统的fieldErrors包含失败信息,struts2会将
请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
-----------------------------------------------------------------------------------------------------
对action指定方法进行校验
只要把validate()方法改写成 validateXxx(),Xxx为要校验的方法,注意首字母大写。
其他内容不变。
----------------------------------输入校验的流程--------------------------------------
--------------------------------------------------------------------------------------
1.类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2.如果在执行类型转换的过程中出现异常,系统会将异常信息保存到
ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管
类型转换是否出现异常,都会进入第3步。
3.系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4.再调用action中的validate()方法。
5.经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集
合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的
fieldErrors没有任何错误信息,系统将执行action中的处理方法。
---------------------------------------------------------------------------------------
跳到input视图有两种情况:
1、是验证失败
2、类型转换失败
validate(){
}
如果validate()方法中没有写一句代码,还是会跑到input视图,说明是类型转换出错了。
比如有个Date类型的属性,而页面输入错误格式,它就会跳到input视图。不会执行成功。
----------------------------------基于XML配置方法实现对action的方法进行校验--------------------------------------
-----------------------------------------------------------------------------------------------------------------
提供校验文件(校验文件模板可以从struts2的例子中copy出来。)
PersonAction-validation.xml
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
(全部校验器能在default.xml中找到)
requiredstring:必须填的字符串
-------------------------------------用XML对指定方法进行验证-----------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
1、ActionClassName-validation.xml //对整个action进行验证
2、ActionClassName-ActionName-validation.xml //对action中的某个方法进行验证,如:PersonAction-manager_add-validation.xml
如果为某个Action同时指定了上面两个文件
系统将自动汇总,执行两个的校验。
假如:
1文件中为某一属性设置成1-5的长度,而2文件中也为同一个属性设置成1-10的长度,那么系统默认会执行后面文件的验证。
当action继承了另一个action,父类action的校验文件会先被搜索到。
应用于action的是父类和子类的总和。
系统是先搜索到BaseAction-validation.xml,BaseAction-user-validation.xml,
接着搜索子类的校验文件UserAction-validation.xml,UserAction-user-validation.xml
---------------------------------------------国际化-----------------------------------------------
全局范围:
itcast_zh_CN.properties
itcast_en_US.properties
包范围:
在java的包下放置package_language_country.properties资源文件。package为固定写法,
处于该包及子包下的action都可以访问该资源。当查找指定key的消息是,系统会先从package
资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的
资源文件(全局范围)中寻找。
Action范围:
ActionClassName_language_country.properties资源文件。
要在页面直接指定某个资源文件,可以用<s:i18n name="cn/acc/action/PersonManageAction"></s:i18n>标签
----------------------------------------------------------OGNL表达式------------------------------------------------
OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。
Struts2框架使用OGNL作为默认的表达式语言。
相对EL表达式,它提供了平时我们需要的一些功能,如:
1.支持对象方法调用,如xxx.sayHello();
2.支持类静态方法调用 和 常量值访问,表达式的格式: @[类全名(包括包路径)]@[方法名|值名],
例如:@java.lang.String@format('foo%s','bar')或@cn.itcast.Constant@APP_NAME;
3.操作集合对象。
Ognl有一个上下文(Context)概念,其实上下文就是一个MAP结构,它实现
了java.utils.Map接口,在Struts2中上下文(Context)的实现为ActionContext
分享到:
相关推荐
### Struts2自学文档知识点详解 #### 一、Struts2简介 Struts2是一个用于构建企业级Java Web应用程序的开源框架。它基于MVC(Model-View-Controller)架构模式,提供了一种灵活的方式来组织代码,使得业务逻辑、...
综上所述,"struts2 自学材料"这个压缩包包含的练习和资源,覆盖了Struts2的主要特性和实践应用,是学习和掌握Struts2框架的宝贵资料。通过深入研究和实践这些例子,开发者可以更好地理解如何在实际项目中运用Struts...
这个"Struts 2自学入门教程"涵盖了Struts 2的核心概念和技术,是初学者了解和掌握Struts 2框架的绝佳资源。 首先,我们要理解Struts 2的标志(Tag)。这些标签是用于构建用户界面的JSP标签库,它们简化了在页面上...
本书全面讲述Struts 2开发框架的知识,包括Struts 2中配置文件的详细讲解、国际化与异常处理、数据类型的转换、数据的输入校验、Struts 2强大的标签库、Struts 2中文件的上传与下载、Struts 2对Ajax的支持、Struts 2...
Struts2自学笔记 Struts2是Java Web开发中的一款广泛应用的MVC框架,它基于Model-View-Controller设计模式,旨在简化企业级应用的开发流程。本自学笔记将深入探讨Struts2的核心概念、主要功能及其实现原理。 1. **...
Struts2是一个强大的Java web应用程序框架,它是Struts1的后续产品,融合了WebWork的核心技术,提供了全新的架构。在Struts2中,基于拦截器的机制被...对于自学Struts2的人来说,理解这些核心概念和配置方式至关重要。
这篇自学笔记将深入探讨Struts2的文件上传机制。 1. **文件上传原理** 文件上传是基于HTTP协议的POST请求实现的。在HTML表单中,通过`<input type="file" />`元素让用户选择本地文件。当用户提交表单时,浏览器会...
### Struts2框架深入解析与自学总结 #### Struts2框架简介 Struts2是Apache组织维护的一个开源框架,它是Struts1的升级版本,基于MVC(Model-View-Controller)架构模式,用于简化Java Web应用的开发过程。Struts2...
Struts2是一款非常流行的Java Web框架,用于构建企业级应用。然而,随着时间的推移,Struts2在安全方面暴露出了一些重要的漏洞,这给使用该框架的系统带来了潜在的安全风险。"Struts2漏洞检查工具Struts2.2019.V2.3...
这篇博客"Struts 2 自学之路: 3.1 struts.xml 核心配置实例说明"将引导我们深入了解如何使用这个至关重要的文件。 首先,`struts.xml`位于项目的`src/main/resources`或`WEB-INF/classes`目录下,它是Spring框架与...
Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...
Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试...
struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...
Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、结构清晰的MVC(模型-视图-控制器)架构的应用程序。本实战案例旨在帮助开发者深入理解并掌握Struts2的核心概念和实践技巧。案例包含了一个完整的...
struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...
<artifactId>struts2-core <version>2.5.24 ``` 确保其他必要的依赖(如Servlet API)也已添加。 ### 4. 编写Hello, World!程序 1. 创建一个Action类,如`HelloWorldAction.java`,实现`...
Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...
Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,旨在简化创建用户交互式、数据驱动的web应用的过程。这个“Struts2接口文档”是开发者的重要参考资料,提供了关于...