20条struts学习总结

  1. Struts采用filter(StrutsPrepareAndExecuteFilter)机制实现。
  2. 继承ActionSupport可以实现一个Action。
  3. Action可以复写execute方法实现处理,也可以不复写execute,直接写方法,但是struts.xml文件的name属性要改为ActionName_*形式,请求路径要改为ActionName!function.action的形式。
  4. 每来一个客户端请求,struts就启动一个线程执行Action,所以做到了Action和其包含的属性的隔离。
  5. 每个Action都可以设置返回值,返回值直接是一个struts.xml文件中的result的name属性。
  6. Struts.xml文件可以相互包含,用include关键字。
  7. Action中能取得JSP的内置对象,通过ServletActionContext获取:pageContext、request、response、ServletContext。
  8. 资源配置文件通过struts.properties的struts.custom.i18n.resources属性指定。
  9. 资源配置文件有三种:全局、包级别、Action级别。
  10. Action要接收一个VO,就直接在Action里设置一个对应的VO属性就可以了,但是要写上对应的getter和setter方法。
  11. Strtus有自己的标签库,但是不建议使用。
  12. Struts数据验证可以在Action中复写ActionSuport的validate()方法。也可以用配置文件的方式。两种方式没有本质上的区别,只是两种不同形式。但是,两者起作用的时刻都是在默认赋值完成之后进行的,如果数据转换失败,则对应的属性为null,所以这两种验证方式的意义都不大。
  13. Action错误提示可以使用ActionSupport类中的addFieldError方法。当Action检测到FieldErrors不为空的时候,则认为数据验证失败。可以通过getFieldErrors方法获取所有的数据校验错误。
  14. 要实现数据校验,可以将逻辑放在拦截器(Interceptro)中完成。拦截器执行在Filter和Action之间,此时数据赋值还没有发生,这是校验数据合法性的好时机。
  15. 开发自定义的拦截器需要继承AbstractInterception。
  16. 拦截器中ActionInvocation接口作为参数,它可以取得真正执行的Action实例。同时还可以取得request、session、application的所有属性。你用反射机制实现获取真正执行的Action的相关属性。
  17. 指令牌Token可以防止表单反复提交。
  18. 文件上传可以用File参数直接接收,方法是在Action中声明一个File类型的变量就可以了—如File photo。同时还可以获取上传文件的名称和类型等,方法是在声明对应文件名后缀加上FileName或者ContentType的变量。
  19. 文件上传限制通过引用拦截器fileUpload实现,给fileUpload指定参数,如maximumSize和allowedTypes。
  20. Struts可以接受客户端的数据,根本原因是其实现了很多转换器,struts可以接受简单类型如:string、int、double、date等,还可以接受的数据。但是如果要接受更多的自定义的类型数据,可以实现转换器。转换器的实现通过继承DefaultTypeConverter完成。
时间: 2024-09-28 20:05:50

20条struts学习总结的相关文章

系统管理员应该知道的 20 条 Linux 命令

如果您的应用程序不工作,或者您希望在寻找更多信息,这 20 个命令将派上用场. 在这个全新的工具和多样化的开发环境井喷的大环境下,任何开发者和工程师都有必要学习一些基本的系统管理命令.特定的命令和工具包可帮助开发者组织.排查故障并优化他们的应用程序,而且当出现错误时,也可以为运维人员和系统管理员提供有价值的分类信息. 无论你是新手开发者还是希望管理自己的应用程序,下面 20 条基本的系统管理命令都可以帮助您更好地了解您的应用程序.它们还可以帮助解决为什么应用程序可在本地正常工作但不能在远程主机上

原型设计20条军规(转)

<原型设计20条军规> 第一条:原型设计的最终目的是为了准确.方便.快捷的表达产品设计人员的产品设计意图: 第二条:原型的观看者往往不是同一类对象,因此原型的设计不可避免的会有多种表现形态,每一种形态的原型都是为设计服务,没有高低之分: 第三条:如果按照产出方式,有手绘产出.软件产出之分,如果按照表现形式,有纸质.低保真.高保真之分: 第四条:如果你的产品设计周期中,原型设计时间过长,可能你需要停一下,站得远些重新审视一下自己原型设计的初衷: 第五条:原型是否要做到高交互.高仿真取决于观看者的

《经验分享收集》 一:10+年程序员总结的20+条经验教训

原文地址:http://www.codeceo.com/article/10-years-20-tips-programmer.html 一:10+年程序员总结的20+条经验教训 开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止.我从来没有妄想过能够一步登天.相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中. 我很喜欢John Gall的这句话:“复杂系统总

quick-cocos2d-x 加载进度条的学习

先上quick代码: 1 --[[创建扇形的进度加载条]] 2 3 --创建进度动作的Action(进度时间,最终比例) 4 local to1 = CCProgressTo:create(1, 100) 5 6 --传入作为进度条用的精灵,创建ProgressTimer 7 local pTimer = CCProgressTimer:create(CCSprite:create(s_pPathSister1)) 8 pTimer:setType(kCCProgressTimerTypeRad

不得不转,修电脑军规20条

最近买了部安卓的手机,google nexus5 系统是安卓4.4.2. 刚到手就发现链接wifi有问题,一直在获取ip(obtaining ip...)和验证.试过恢复出厂 重启 各种都不管用,只有设置静态ip才可以,但是不能一直这样子呀!! 查了下路由器,路由器已经分配了地址.所以最大可能就是安卓手机上拿到这个地址没有成功写入配置文件,为什么没有写入呢,就是权限的问题了,不明白为什么google会出现这个错误. 因为不熟悉安卓系统,所以查了好几天,终于在一个外国网站上发现了下面这个解决办法,

MySQL性能优化的最佳20+条经验

http://www.pythonclub.org/mysql/optimize-20-tips 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存

//随机生成 10到20条数据 数据包含 用户名(5-10位的字母) 性别 年龄(1-100岁)

//随机生成 10到20条数据 数据包含 用户名(5-10位的字母) 性别 年龄(1-100岁)/*生成随机数的方法*/function random(min, max) { if (min < 0 || max < 0) { console.log("请输入大于0的数据"); return false } if (max == null) {//判断如果只传入一个参数 var max = min;//将参数设置为最大值 min = 0;//将最小值设置为零 } retur

Struts学习傻瓜式入门篇

或许有人觉得struts不容易学,似乎里面的一些概念让未接触过的人迷惑,MVC1.MVC2.模式……我写这篇文章是想让从来没有接触过struts的人,能有个简单的入门指引,当然,系统地学习struts是必要的,里面有很多让人心醉的东东,那是后话了. 该案例包括首页,用户登陆.网站向导页面.就这么简单,没有深奥的struts概念,主要靠动手,然后用心体会. WEB Server用tomcat4.到http://jakarta.apache.org下载struts1.1,把zip文 件释放到c:\s

【转账】MySQL性能优化的最佳20+条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被My