第三步:随便选择一种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的源码看到详细实现方式。
本例中有关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>
工作都完了,自己在检查检查,可以作一些单元测试等工作,并把接口用说明文档写好交给老大吧。
下面我们再看看其它角色的表演!
