Form 模型struts
请求页面 Action ActionServlet处理 Servlet业务代码 成功 失败 无论是否成功都要给人家返回一个结果这是为了给客户一个良好的体数据库 返回的页面jsp,html之类的
Action
1.Action什么时候初始化?发出该Action请求时,不是在读取配置初始化时 2.每个Action只会初始化一次
3.Action是线程不安全的,因为所有的请求会共享一个Action实例 4.怎样实现Action的安全性编程
A.注意不要用实例变量或者类变量共享只是针对某个请求的数据 B.注意资源操作的同步性
应用:统计一个Action的访问数据,只要定义一个类变量,再++即可
Action中的Mapping
来自配置文件中的Action元素,代表着控制器的请求信息
String name=mapping.getName();//获取配置文件中元素中的
的一个属性,即name
String path=mapping.getPath();//获取配置文件中元素中的
的一个属性,即path
String type=mapping.getType();//获取配置文件中元素中的
的一个属性,即type,可用于反射
String type=mapping.findForwards();//获取配置文件中元素中的
ActionForward froward=mapping.findForward(“指定名字(即forward标签里配置的name)”);
ActionForward
ActionForward有个Redirect属性,可以设置false或者true
False,no--------RequestDispatcher forward 只能跳转到当前应用的页面,不设置也可以
True,yes--------HttpServletResponse sendRedirect 可以跳转到应用外的页面,必须设置
ActionForm
工作原理
处理ActionForm的一般步骤:
A.检查Action的映射,确定Action中已经配置了对ActionForm的映射 B.根据name属性,查找form bean的配置信息
C.检查Action的form bean的使用范围,确定在此范围下(request,session),是否有此form bean实例
D.假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,请慎用
E.否则,就重新构建一个form bean的实例(调用构造方法),并且保存在一定作用范围 F.Form bean的reset()方法被调用 G.调用对应的setter方法,对状态属性赋值
H.如果validate的属性设置为true那么就调用form bean的validate()方法 I.如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行
J.注意:直接从ActionFrom类继承的reset()和validate()方法,并不能实现什么处理功能,所以有必要自己重新覆盖由页面向 Action发出请求
查找Action,看Action是否有name属性 查找,根据name和scope Scope getAttribute(name)
Scope 是struts-config.xml 是否找到 中的Action标签的一个属性 ,表示作用范围(个人理解是 否就是Action实例化存在
的域),默认值为 没找到就实例化一个 Scope setAttribute(name,form) session,
是否需要校验 validate
和查找Action类似,看一下有没有可用的form bean有就直接调用该form bean的reset方法,没有就创建一个,并保存在一定作用范围 找到Action的实例就跳过实例化一个Action的步骤 取值,从客户端参数,request.getParameter()获取用户提交的数据和赋值