struts工作流程
1>启动struts框架,web.xml,创建ActionServlet对象,立即调用init(),解析struts-config.xml
2>view发送*.do请求
3>ActionServlet接受该请求,去掉.do后缀,在struts-config.xml文件中找<action>元素path属性.a>如果没有找到404错误;b>如果找到继续执行
4><action name="">判断是否需要表单封装页面数据.name属性值不为空则封装数据(创建ActionForm对象,根据scope属性值决定将form对象存储起来:request.setAttribute("",form);调用reset方法对数据进行初始化工作;封装数据(技术:a>vo值对象作为ActionForm对象的成员属性));
5>调用ActionErrors validate()方法进行表单数据验证:(<action>的vlidate属性:默认为true---会调用该方法;false---不会调用)
1>验证通过:ActionErrors为null或者ActionErrors中没有存放错误消息
2>验证不通过:ActionErrors有错误消息.将错误消息派发到 <action >元素的input属性指 定的jsp进行错误消息的输出:<html:errors/> 或者<html:errors key=""/>
6>验证通过,接下来根据<action>元素的type属性来创建Action对象,会立即调用Action对象的
DispatchAction对象的execute
页面
<input type="hidden" name="method" value="add"/>
<input type="submit" value="添加“ onClick="method.value='add';frm1.submit();"/>
<input type="submit" value="修改“ onClick="method.value='modify';frm1.submit();"/>
置换成name=“method” value=“add”
struts-config.xml
<action path="/logindispatch"
input="/TestDispatchAction1.jsp"
parameter="method" //指明提交的动作参数名
scope="request"
type="struts.LogindispatchAction"/>
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse respose)
{
String paramValue=mapping.getParameter();//method
String value=request.getParameter(paramValue);
Class cls=this.getClass();
Method method=cls.getMethod(value,new Class[]{});
return (ActionForward)method.invoke(this,new Object[]{});
}
<a href="logindispatch.do?method=add"></a>
二:hibernate
1>session api:save(Object) :临时状态(1:new;2:信息没有在数据库中保存)
update(Object) :游离状态(1:不在session缓存中;2:有记录在数据库中);持久化状态:(1:在session缓存中;2:有记录)
saveOrUpdate(Object)
delete(Object):持久和游离状态对象
load(Class cla,Serializable pk):查询对象不存在抛出异常
get(Class cla,Serializable pk):不存在对象则返回null.
2>Hibernate的缓存:
SessionFactory:1>所有的Hibernate的映射文件信息2>pojo类对应的表的基本的增删改查语句
Session:1>缓存sql语句,在commit时候执行
2>缓存了持久化状态对象
缓存作用:1>提高性能
2>保持对象状态和数据库记录的同步
3>实体映射:
关联关系的映射:
one-to-many:
cascade属性:级联操作
none:不做级联操作
save-update:
delete
all:
all-delete-orphan: