如何建立一个模块

 

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)的过程,直到将某个界面返回给用户为止!

 

 

posted @ 2018-02-02 15:33  一支穿云箭  阅读(514)  评论(0编辑  收藏  举报