Struts1 学习

本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-146.html

1. Struts工作流程主要对象:Action、ActionForm、ActionServlet、ActionForward、ActionMapping

2. 工作流程:Register.do发送请求,找到web.xml从而找到ActionServlet,ActionServlet收到请求之后,进行请求的预处理,Locale,http请求头解析和基本响应头的封装等等,再根据路径找到对应的Action,并查找配置文件,找到相应的Action的配置,将该Action的配置封装成ActionMapping,把http请求中的参数封装成ActionForm,接着把request、response、mapping、form传入Action中,在Action的excute方法中对该请求进行处理,并返回ActionForward,根据这个ActionForward对该请求进行相应的jsp页面转发。

3. Struts用处:web层简化处理、提供了丰富的标签库、自动表单检验、

4. 表单校验:ActionForm的validate方法,返回的ActionErrors包含了表单错误信息,表单校验通过则返回null,在struts-config.xml中的action标签的input属性指定表单检验失败之后回显jsp页面,并在该页面中用<html:errors property=""/>标签对表单错误信息显示

5. Struts表单自动回显标签<html:text/>、<html:password/>、<html:checkbox/>等等,要配合<html:form/>使用,其中checkbox不能回显,要用multibox,并且multibox不执行标签体;

6. 表单号校验:<html:form/>表单会自动检索域中的"org.apache.struts.action.TOKEN"属性,并自动生成hidden类型表单参数。

步骤:在UIAction中调用saveToken(request);执行生成表单号并保存的操作,在处理Action中调用isTokenValid(request)判断表单号校验情况,调用resetToken(request);删除域中的表单号;

7. 表单校验时顺便把数据封装到实体:在FormBean中维护一个实体对象,在validate执行时,顺便把数据填入实体中,之后直接get就可得到实体数据,加快效率(需要事先注册好beanutils的相关的类型转换器)。

8. 不进行校验直接把表单数据填入实体:Struts依赖的beanutils支持"user.username"这种属性方式赋值,可以直接在FormBean中维护一个实体,在jsp表单选项中用"user.username"的二级Bean属性赋值方式来直接把表单值注入实体中(需要事先注册好beanutils的相关的类型转换器)。

9. 文件上传:(乱码用过滤器解决)

A. jsp设置post方式和enctype类型;

B. 表单中的file类型的表单使用FormFile类型的属性,自动封装的;

C. 导入commons的fileupload和io包;

D. Action中再对FileForm得到文件输入流,使用IO进行上传操作。

注:A.多文件上传:表单名称用list[0],用一个List<FormFile>保存,重写get和set方法。

B.文件上传大小限制需要设置struts的controller标签。

C.文件下载:用DownloadAction,封装好StreamInfo返回即可,要设置下载header。

10.常用Action:

(1)DownloadAction:处理文件下载请求Action;

(2)DispatchAction:可以根据表单参数调用不同的方法,达到一个Action处理多个业务的目的,配置文件中parameter属性设置对应的表单参数的名称;

(3)MappingDispatchAction:和DispatchAction类似,略微简化URL,不常用;

11.动态FormBean:不需要设计formbean,而是动态生成的;

步骤:<form-bean/>标签设置type为DynaActionForm,设置<form-property/>动态为formbean添加属性;

需要使用时,获取并强转为DynaActionForm即可使用;

表单校验:继承DynaActionForm并复写校验方法;(validate框架)

12.Struts-Validate框架(表单校验框架,struts框架):

样例:struts-cookbook-1.3.10样例是关于本框架

优点:声明式,不需要写java代码,并且自动生成js表单校验代码,和动态FormBean配合可以完全依靠配置文件定义整个FormBean,不需要修改Java代码;

步骤:

(1) formbean类继承ValidatorForm或者DynaValidatorForm;

(2) 此时formbean调用validate方法就会调用Validator框架校验;

(3) validator-rules.xml配置文件在struts-core包中集成了,只需要写validation.xml即可;

(4) struts-config.xml文件中用<plugin/>标签配置validator框架,可在struts-core中的validator-rules.xml找到如何配置;

(5) validation.xml中配置,需要配合国际化资源文件:

配置方式支持错误信息国际化资源文件和占位符替换;

注:validator-rules.xml定义校验规则;

validation.xml配置Bean来使用校验规则校验;

mask校验器就是匹配正则表达式的:

<var>

<var-name>mask</var-name>

<var-value>填写正则表达式</var-value>

</var>

前台js框架校验:

<html:javascript formName="RegisterForm"/>

<html:form action="/Register" onsubmit="return validateRegisterForm(this)">

添加自定义校验规则:在cookbook工程中密码校验可参考,在validation.xml中<global/>标签定义自定义规则,再在下面编写校验规则进行使用。(需要写一个实现校验功能的类来执行自定义校验规则,在global标签中标明相应的类路径即可)

13. Struts异常处理:

<exception/>标签:path属性:设置异常跳转路径;

Type属性:异常的路径名;

Key属性:错误页面携带的错误信息在资源文件中的key;

14. 全局配置参数:

<global-exception/>:全局处理异常;

<global-forwards/>:全局跳转页面,例如全局消息显示页面,会在所有的action的mapping中可以查找到;

15. Action是单例的并且线程不安全的!!!

本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-146.html

时间: 2024-10-07 18:51:12

Struts1 学习的相关文章

struts1学习

1.为什么要使用Struts框架 1.1 建立在MVC这种公认的好的模式上的 1.2 开源项目 1.3 可以与其他技术和框架具有很好的额融合性.如:Spring 1.4 可以减少重复代码的开发,提高工作效率 2. FrameWork的概念 人们用于解决相同问题或者相似问题的方案. 特点: 可重用性.可扩展性.可收缩性 控制器.业务逻辑层.数据逻辑层. 3. Struts的概念和体系结构 Struts是Apache组织的一个开源项目,主要是采用Servlet和JSP技术来实现的. Struts是一

strust1与strust2,springmvc三者之间的区别?

strust1与struts2的区别    1.struts2是基于webWork的一个全新的框架,比struts1学习更方便    Struts2主要是改进了Struts1的servlet和action    Struts2的核心框架式当做一个filter来实现其功能,而struts1是ActionServlet    Struts2还提供拦截器     速度相对Stuts1来说慢一点. 2.strust2,springmvc的区别 1.Struts2是类级别拦截器,一个类对应request上

Struts2重新学习2之struts2和struts1的区别

1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts 2提供一个ActionSupport基类去实现常用的接口.即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用 作Struts 2的Action. 2) 线程模式方面的对比:Struts 1 A

【SSH学习笔记】—从配置Struts1环境到简单实例

以下我将从一个简单点的计算器实例,介绍struts1的环境配置,以及其重要的两个核心类:ActionForm和Action  简单计算器实现思路: 1.提供一个输入界面,输入两个数字和运算符(+.-.*./),提交后将运算结果显示出来.假设出现错误显示错误页面,在正确页面和错误页面须要显示出输入值.运算符和计算结果. 2.发送计算请求.须要Action处理这个请求.并将计算结果返回.此外,发请求须要传送数据才干计算.所以须要一个ActionForm来进行数据传送.表单上传送过来的数据都是字符串的

web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子

写android有段时间了,感觉思维越写越狭窄,考虑问题越来越局限了,看不到一个项目整体的设计和构架,觉得很有必要多多写一些大型的框架性的东西来提高自己的视野. 从接触java到现在一年多了,在我的印象里,struts好像是用来接收请求然后处理,将处理结果在跳转到jsp上显示的:spring就是 一个大型的工厂,专门生产业务的类:hibernate就是负责和数据库勾结,然后提供数据的.惭愧啊,我居然从来都没有用过SSH三大框架,居然我也能 鬼使神差的工作了,而且工作了这么长时间了,趁现在空暇和还

struts1源码学习3

  public void init() throws ServletException {         final String configPrefix = "config/";         final int configPrefixLength = configPrefix.length() - 1;         // Wraps the entire initialization in a try/catch to better handle         //

struts1源码学习1

初始化方法学习 public class ActionServlet extends HttpServlet //servlet初始化  public void init() throws ServletException {         final String configPrefix = "config/";         final int configPrefixLength = configPrefix.length() - 1;         // Wraps t

struts1源码学习2(initChain)

先上代码 protected void initChain()         throws ServletException {         // Parse the configuration file specified by path or resource         try {         //还是先从servlet配置中找chainConfig         //默认值是chainConfig = "org/apache/struts/chain/chain-conf

Struts1.x学习笔记(一)

1,导入Struts需要的jar包 <!-- Struts1导入开始 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts-el</artifactId> </dependency> <dependency> <groupId>org.apache.struts</groupId> <art