1,设计实体/表
设计实体 --> JavaBean --> hbm.xml(配置实体) --> 建表--->
applicationContext-hibernate.xml(将hbm.xml配置到里面如:<value>classpath:/hbm/article/Title.hbm.xml</value>)
-----> struts-config-xml(配置action、form、jsp) ---> applicationContext.xml(配置dao、daoimpl、service、serviceimpl)
2,分析有几个功能,对应几个请求。
3,实现功能:
1,写Action类,写Action中的方法,确定Service中的方法。
2,写Service方法,确定Dao中的方法。
3,写Dao方法。
4,写JSP
============================
请求数量 地址栏
转发 1 不变
重定向 2 变化
增删改查共4个功能,需要6个请求。
所以需要相应的6个Action方法,每个Action方法处理一种请求。
作用 方法名 返回值 对应的页面
----------------------------------------------------
列表 list() list list.jsp
删除 delete() toList
添加页面 addUI() addUI addUI.jsp
添加 add() toList
修改页面 editUI() editUI editUI.jsp
修改 edit() toList
<result name="toList" type="redirectAction">role_list</result>
role_* ---> {1}
role_list list
role_addUI addUI
role_delete delete
================================================
LinkedList
addLast()
removeFist()
------------
→ →
------------
LinkedList
addFirst()
removeFirst()
================================= CRUD的Action方法的模板
/** 列表 */
public String list() throws Exception {
return "list";
}
/** 删除 */
public String delete() throws Exception {
return "toList";
}
/** 添加页面 */
public String addUI() throws Exception {
return "saveUI";
}
/** 添加 */
public String add() throws Exception {
return "toList";
}
/** 修改页面 */
public String editUI() throws Exception {
return "saveUI";
}
/** 修改 */
public String edit() throws Exception {
return "toList";
}
/** 列表 */
public String list() throws Exception {
List<Forum> forumList = forumService.findAll();
ActionContext.getContext().put("forumList", forumList);
return "list";
}
/** 删除 */
public String delete() throws Exception {
forumService.delete(model.getId());
return "toList";
}
/** 添加页面 */
public String addUI() throws Exception {
return "saveUI";
}
/** 添加 */
public String add() throws Exception {
forumService.save(model);
return "toList";
}
/** 修改页面 */
public String editUI() throws Exception {
// 准备回显的数据
Forum forum = forumService.getById(model.getId());
ActionContext.getContext().getValueStack().push(forum);
return "saveUI";
}
/** 修改 */
public String edit() throws Exception {
// 1,从数据库中取出原对象
Forum forum = forumService.getById(model.getId());
// 2,设置要修改的属性
forum.setName(model.getName());
forum.setDescription(model.getDescription());
// 3,更新到数据库
forumService.update(forum);
return "toList";
}
/** 上移 */
public String moveUp() throws Exception {
forumService.moveUp(model.getId());
return "toList";
}
/** 下移 */
public String moveDown() throws Exception {
forumService.moveDown(model.getId());
return "toList";
}
===============================
<!-- users属性,本类与User的一对多 -->
格式:?属性,本类与?的?
?1 属性名
?2 关联对类型
?3 关系
多对一:
<many-to-one name="" class="" column=""></many-to-one>
一对多(Set):
<set name="">
<key column=""></key>
<one-to-many class=""/>
</set>
多对多(Set):
<set name="" table="">
<key column=""></key>
<many-to-many class="" column=""></many-to-many>
</set>
<!-- users属性,本类与User的一对多 -->
<set name="users">
<key column="departmentId"></key>
<one-to-many class="User" />
</set>
<!-- parent属性,本类与Department(上级)的多对一 -->
<many-to-one name="parent" class="Department" column="parentId"></many-to-one>
<!-- children属性,本类与Department(下级)的一对多
order-by属性:指定的是sql的orderby子句内容
-->
<set name="children" cascade="delete" order-by="id ASC">
<key column="parentId"></key>
<one-to-many class="Department" />
</set>
<!-- users属性,本类与User的多对多 -->
<set name="users" table="itcast_user_role">
<key column="roleId"></key>
<many-to-many class="User" column="userId"></many-to-many>
</set>
多对多关系
用户 岗位
用户id id 岗位id id
用户名称 userName 岗位名称 roleName
用户岗位表(中间表)
用户id userId
岗位id roleId
大概逻辑如下(有些的可能不太全面,可以多看看书.):
struts1:
发布Struts Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容.
在接到一个HttpRequest请求后,ActionServlet 根据struts-config.xml中的配置内容,将请求的参数传到对应的Formbean中,并设置session.然后根据请求中的Action参数,在struts-config.xml中查找指定的Action,并调用此Action来处理请求.根据Action的处理结果,会返回一个forward变量,此时通过mapping.findForward()查找出对应的forward所标示的Action或者JSP页面,将请求转到下一个处理.如果是forward指向JSP页面,则输出到前台.
假设现在有以下情景:
用户正在浏览一个用STRUTS的技术构建的网站主页,主页上有个登陆表单,用户填好登陆名和密码,单击“登陆”按钮,就激活了以下一系列过程:
(1)用户的请求以HTTP方式传输到服务器上,接受请求的是ActionServlet.
(2)ActionServlet接收到请求后,会查找Struts-config.xml文件来确定服务器上是否有用户请求的操作,此处用户请求操作应为登陆操作。如果没有,则返回一个用户请求无效的出错信息。
(3)当ActionServlet请求找到用户请求的Action后,首先将用户输入的表单参数打包成一个ActionForm对象,这个ActionFrom对象其实也就是一个JavaBean,里面包含两个字段,分别是用户名和密码。接着ActionServlet再根据struts-config.xml中的配置信息决定是否要执行ActionFrom对象中的Validate方法。若Validate方法执行有错,则返回。否则,继续下一步。
(4)系统生成一个用户所请求的Action的实例对象,将前面的ActionFrom对象传递给它,运行它的Execute()方法。这一步其实就是用户登陆的控制器,在执行exectue()方法时,可以调用后台模型验证登陆名和密码是否正确等信息。
(5)execute()执行结束前会生成一个ActionForward类型的对象并将之返回给ActionServlet,该对象的作用是告诉ActionFroward就代表跳转到一个登陆成功的页面。ActionServlet将对之进行分析,其实就相当于接收到一个新的请求,重复(2)~(5)的过程,直到将某个界面返回给用户为止!