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