技术开发 频道

玩玩Spring之struts+hibernate+spring添删改查示例



第三步:随便选择一种MVC框架写Web部份(Web开发工程师)

  晕,类Class都没看见一个就要写Action了啊?
  新手别叫,这里演示的是一种现代、先进、高雅、华丽、贵族式的编程及设计方法!(晕,不准吐!),J2EE中提倡的是面向接口编程,所以,系统设计师都给了你UML图,甚至连详细的Java接口都给你了,已经够多了,快动手吧。
  本例MVC使用的Struts框架,因此整个开发流程大致有下面的几个步骤。

1、 先根据IUser接口,写一个ActionForm,代码如下:
package com.easyjf.struts.form; import org.apache.struts.action.ActionForm; public class UserForm extends ActionForm { private String cid; private String userName; private String password; private String email; private String tel; private String birthday; private String intro; public String getCid() { return cid; } public void setCid(String cid) { this.cid = cid; } //其它的getter、stter方法在此略过。 }
 
2、写Action

  根据用户的需求说明及设计师的相关模式或规范建议等,写一个处理“添删改查”等操作的Action,本文全部写到一个UserManageAction.java 中,代码如下:
package com.easyjf.struts.action; import java.util.ArrayList; import java.util.Collection; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.easyjf.example.business.IUser; import com.easyjf.example.business.IUserService; import com.easyjf.struts.form.UserForm; import com.easyjf.util.CommUtil; import com.easyjf.web.tools.IPageList; import com.easyjf.web.tools.ListQuery; import com.easyjf.web.tools.PageList; public class UserManageAction extends Action { private IUserService userService; public IUserService getUserService() { return userService; } public void setUserService(IUserService userService) { this.userService=userService; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { WebApplicationContext wac =WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext()); this.userService = (IUserService) wac.getBean("userService"); String command=request.getParameter("easyJWebCommand"); if(command==null || "".equals(command)||"list".equals(command)||"query".equals(command)) { return doQuery(mapping,form,request,response); } else if("new".equals(command)) { return mapping.findForward("edit"); } else if("add".equals(command)) { return doAdd(mapping,form,request,response); } else if("edit".equals(command)) { return doEdit(mapping,form,request,response); } else if("update".equals(command)) { return doUpdate(mapping,form,request,response); } else if("del".equals(command)) { return doDel(mapping,form,request,response); } return super.execute(mapping,form,request,response); } public ActionForward doEdit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserForm vo=(UserForm)form; IUser user=null; if(vo.getCid()!=null && (!vo.getCid().equals("")))user=userService.read(vo.getCid()); if(user==null)user=userService.newUser(); if(user!=null) { vo.setCid(user.getCid()); vo.setUserName(user.getUserName()); vo.setPassword(user.getPassword()); vo.setTel(user.getTel()); vo.setEmail(user.getEmail()); vo.setIntro(user.getIntro()); vo.setBirthday(user.getBirthday()); return mapping.findForward("edit"); } else { request.setAttribute("msg","找不到数据!"); return doQuery(mapping,form,request,response); } } public ActionForward doUpdate(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) { IUser obj=(IUser)form2Po(form); if(userService.update(obj)) { request.setAttribute("msg","数据修改成功!"); return doQuery(mapping,form,request,response); } else { request.setAttribute("msg","数据修改失败"); return mapping.getInputForward(); } } public ActionForward doAdd(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { IUser obj=form2Po(form); if(obj==null) { request.setAttribute("msg","无法创建要保存的对象,添加失败!"); return mapping.getInputForward(); } if(userService.save(obj)) { request.setAttribute("msg","数据添加成功!"); return doQuery(mapping,form,request,response); } else { request.setAttribute("msg","数据添加失败"); return mapping.getInputForward(); } } public ActionForward doQuery(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { int currentPage=CommUtil.null2Int(request.getParameter("page")); int pageSize=CommUtil.null2Int(request.getParameter("pageSize")); if(currentPage<1)currentPage=1; if(pageSize<1)pageSize=15; String scope="1=1"; Collection paras=new ArrayList(); String orderType=CommUtil.null2String(request.getParameter("orderType")); String orderField=CommUtil.null2String(request.getParameter("orderField")); String userName=CommUtil.null2String(request.getParameter("queryUserName")); String tel=CommUtil.null2String(request.getParameter("queryTel")); if(!userName.equals("")) { scope+=" and userName like ?"; paras.add("%"+userName+"%"); } if(!tel.equals("")) { scope+=" and tel like ?"; paras.add("%"+tel+"%"); } if(orderField.equals(""))//默认按用户名排序 { orderField="userName"; orderType="desc"; } if(!orderField.equals("")) { scope +=" order by "+orderField; if(!orderType.equals(""))scope+=" "+orderType; } IPageList pList=new PageList(new ListQuery(userService.query(scope,paras))); pList.doList(pageSize,currentPage,"",""); if(pList!=null){ request.setAttribute("list",pList.getResult()); request.setAttribute("pages",new Integer(pList.getPages())); request.setAttribute("rows",new Integer(pList.getRowCount())); request.setAttribute("page",new Integer(pList.getCurrentPage())); request.setAttribute("gotoPageHTML",CommUtil.showPageHtml(pList.getCurrentPage(),pList.getPages())); } request.setAttribute("orderType",orderType); request.setAttribute("orderField",orderField); return mapping.findForward("list"); } public ActionForward doDel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserForm vo=(UserForm)form; IUser user=null; if(vo.getCid()!=null && (!vo.getCid().equals("")))user=userService.read(vo.getCid()); if(user!=null && userService.del(user)) { request.setAttribute("msg","数据删除成功!"); } else { request.setAttribute("msg","数据修改失败"); } return doQuery(mapping,form,request,response); } public IUser form2Po(ActionForm form) { UserForm vo=(UserForm)form; IUser user=null; if(vo.getCid()!=null && (!vo.getCid().equals("")))user=userService.read(vo.getCid()); if(user==null)user=userService.newUser(); user.setUserName(vo.getUserName()); user.setBirthday(vo.getBirthday()); user.setEmail(vo.getEmail()); user.setTel(vo.getTel()); user.setPassword(vo.getPassword()); user.setIntro(vo.getIntro()); return user; } }

  注意了,Action中使用的都是IUser,IUsrService等接口,其中execute方法中有一句有点不一样:
 WebApplicationContext wac =WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext());
  this.userService = (IUserService) wac.getBean("userService");
  这就是传说中强大的Spring IOC的使用。因为有了他,我们的Web开发人员也不用知道这个IUserService究竟是什么东西了,有时候也无法知道。你想想,你在做这一步的时候,可能另外分工做后台商业逻辑层的伙伴还没有把IUserService的实现写出一个来呢。Web开发人员需要用的IUserService的时候,直接通过类似的方法找Spring取就是了。Spring一个角色是扮演IOC容器中间件嘛,他都没有谁还有呢?
  本例中有关com.easyjf.web.tools、com.easyjf.util等包只是使用了EasyJWeb的分页业务引擎及一些实用工具,没有其它功能,否则代码就会更多了。大家可以下载EasyJWeb的源码看到详细实现方式。
 
3、美工及设计制作人员做界面,完成后交由我们Web开发人员加JSP代码。

 
  JSP部分主要有两个页面,userEdit.jsp主要是一个用户信息录入表单。userList.jsp是用户信息列表页面。这一部分大家一定都轻车熟路了吧,由于篇幅、页面、版面等都有限,就不把详细代码扔出来污染环境了。请新手直接到EasyJF开源团队官网下载完整的示例代码,其中包括了这两个JSP页面。下载地址:
 
4、配置Struts配置文件struts-config.xml

struts-config.xml的内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <data-sources /> <form-beans > <form-bean name="userForm" type="com.easyjf.struts.form.UserForm" /> </form-beans> <action-mappings > <action attribute="userForm" input="/userEdit.jsp" name="userForm" path="/userManage" scope="request" type="com.easyjf.struts.action.UserManageAction"> <forward name="edit" path="/userEdit.jsp" /> <forward name="list" path="/userList.jsp" /> </action> </action-mappings> <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" /> </plug-in> </struts-config> 5、最后还差一步,就是配置web.xml文件。 Web.xml文件内容如下 <?xml version="1.0" encoding="UTF-8"?> <web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>

  工作都完了,自己在检查检查,可以作一些单元测试等工作,并把接口用说明文档写好交给老大吧。

  下面我们再看看其它角色的表演!
0
相关文章