




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Jeecms开发学习笔记青岛海尔软件有限公司带吴钩目录1.文档说明32. 关键词32.1MVC32.2实体32.3实现类33. 从Act到Mng到Dao43.1Act43.1.1什么是Act?43.1.2Act实现从html到jspx43.1.3从Act到Mng53.2Mng和MngImpl73.2.1什么是Mng和MngImpl?73.2.2Mng73.2.3从MngImpl到Dao83.3Dao和DaoImpl93.3.1什么是Dao和DaoImpl?94. 实体类94.1为什么使用实体类?94.2id的作用105配置文件115.1数据库配置文件115.2国际化121.文档说明 本文档来源一个现实项目的学习,笔者须在Jeecms框架内实现前台提交简历,后台查看简历的过程。而笔者毫无java web开发经验。 因此本文档适用于毫无java web开发经验人群,将以Jeecms的spring MVC + spring + hibernate框架为结构进行介绍。建立一个实体,从数据的写入到查找为流程,进行一个详细的描述。2. 关键词2.1MVCMVC全名是Model View Controller,是模型(model)视图(view)控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面 显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于 映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。2.2实体实体类主要是作为数据管理和业务逻辑处理层面上存在的类别; 它们主要在分析阶段区分 。实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。2.3实现类 就是接口的实现类,实现了接口中那些方法的方法体。3. 从Act到Mng到Dao3.1Act3.1.1什么是Act?在我的理解,Act就是接受请求然后执行方法的类,是前台页面和后台处理衔接的类,是重要的类。一般地,注释掉Act下的内容,就失去了衔接的类,我们不需要重新编译实体,Mng,Dao,也不会影响其他的类。这时候,新编译的Act实现与前台的衔接后,就会走到它所注入的Mng,Dao,最后进入表。3.1.2Act实现从html到jspx 在参照guestbook的时候,你会发现并没有guestbook.jspx这个文件,那么它是怎么来的呢?我们看GuestbookAct.java中下面这段代码:RequestMapping(value = /guestbook*.jspx, method = RequestMethod.GET)public String index(Integer ctgId, HttpServletRequest request,HttpServletResponse response, ModelMap model) CmsSite site = CmsUtils.getSite(request);FrontUtils.frontData(request, model, site);FrontUtils.frontPageData(request, model);CmsGuestbookCtg ctg = null;if (ctgId != null) ctg = cmsGuestbookCtgMng.findById(ctgId);if (ctg = null) / 留言板首页return FrontUtils.getTplPath(request, site.getSolutionPath(),TPLDIR_SPECIAL, GUESTBOOK_INDEX); else / 留言板类别页model.addAttribute(ctg, ctg);return FrontUtils.getTplPath(request, site.getSolutionPath(),TPLDIR_SPECIAL, GUESTBOOK_CTG);这段代码是一个拦截,用于判断进入哪个guestbook页面(是未登录的guestbook_index或者guestbook_detail)。RequestMapping注解中value的值表示一个请求,guestbook*.jspx表示的是形如guestbookXXX(XXX可以为空).jspx的请求,我们输入一个./guestbook.jspx的url就相当于发送了这个请求,然后进入由RequestMapping注解的一个方法。我们假设这个时候没有留言类别,也就是说ctg=null为true,这时就会return FrontUtils.getTplPath(request, site.getSolutionPath(),TPLDIR_SPECIAL, GUESTBOOK_INDEX)在这里site是你设置的site一般与project名一致,TPLDIR_SPECIAL已经配置好了,指的是t文件夹下的special文件,重点说一下GUESTBOOK_INDEX,在Act中,有一个定义代码:public static final String GUESTBOOK_INDEX =tpl.guestbookIndex;那么tpl.guestbookIndex又是什么呢,这个需要在国际化文件中进行配置,两个国际化文件分别是messages_en_US.properties和messages_zh_CN.properties,这里显然已经配置好了,当你要写自己的Act时就需要自行配置了。于是,我们输入./guestbook.jspx时,就会走到GuestbookAct这个类,进入这个方法,最后return到这个guestbook_index页面,于是就从html变成了jspx,代码就是这样实现的。从jspx进行ajax提交我们不多提,只需要稍看guestbook_index就能就能了解。 3.1.3从Act到Mng依然是参考guestbook,我们看guestbookAct中这样一段代码:RequestMapping(value = /guestbook.jspx, method = RequestMethod.POST)public void submit(Integer siteId, Integer ctgId, String title,String content, String email, String phone, String qq,String captcha, HttpServletRequest request,HttpServletResponse response, ModelMap model) throws JSONException CmsSite site = CmsUtils.getSite(request);CmsUser member = CmsUtils.getUser(request);if (siteId = null) siteId = site.getId();JSONObject json = new JSONObject();try if (!imageCaptchaService.validateResponseForID(session.getSessionId(request, response), captcha) json.put(success, false);json.put(status, 1);ResponseUtils.renderJson(response, json.toString();return; catch (CaptchaServiceException e) json.put(success, false);json.put(status, 1);ResponseUtils.renderJson(response, json.toString();log.warn(, e);return;String ip = RequestUtils.getIpAddr(request);cmsGuestbookMng.save(member, siteId, ctgId, ip, title, content, email,phone, qq);json.put(success, true);json.put(status, 0);ResponseUtils.renderJson(response, json.toString(); Autowiredprivate CmsGuestbookCtgMng cmsGuestbookCtgMng;Autowiredprivate CmsGuestbookMng cmsGuestbookMng;Autowiredprivate SessionProvider session;Autowiredprivate ImageCaptchaService imageCaptchaService;Json我们不多做介绍,在Jeecms框架下,想要处理带有验证码提交的数据时,我们可以复制之后稍作修改,方法是平凡的,重点看红色框的部分。第一个红色框框中用到了cmsGuestbookMng的save方法,下面的json.put(success, true);json.put(status, 0);是关于验证码的信息,在html中的ajax提交方法有如下的判断:if(data.status=0) alert(留言成功); location.href=location.href; else if(data.status=1) alert(验证码错误); $(#guestbookCaptcha).click(); 显然地,status=0,提交就成功了。第二个红色框框中用到了Autowired注解,作用是数据在走Mng接口时bytype自动注入,与Resource注解的byname形成对照。这就实现了从Act到Mng,注入后可以使用Mng的save方法。3.2Mng和MngImpl3.2.1什么是Mng和MngImpl?也就是manager接口和实现类,是业务逻辑层的重要的类。在Jeecms中,guestbook是特殊的,他有前端guestbook_index.html存入,有后端guestbook文件夹下3个页面的查询。这就意味着有两个Act会走这个Mng接口,相对的,guestbook的业务逻辑也会比较复杂。3.2.2Mng仍然是guestbook,看它的代码:public interface CmsGuestbookMng public Pagination getPage(Integer siteId, Integer ctgId,Integer userId, Boolean recommend,Boolean checked, boolean desc, boolean cacheable, int pageNo,int pageSize);Transactional(readOnly = true)public List getList(Integer siteId, Integer ctgId,Boolean recommend, Boolean checked, boolean desc,boolean cacheable, int first, int max);public CmsGuestbook findById(Integer id);public CmsGuestbook save(CmsGuestbook bean, CmsGuestbookExt ext,Integer ctgId, String ip);public CmsGuestbook save(CmsUser member, Integer siteId, Integer ctgId,String ip, String title, String content, String email,String phone, String qq);public CmsGuestbook update(CmsGuestbook bean, CmsGuestbookExt ext,Integer ctgId);public CmsGuestbook deleteById(Integer id);public CmsGuestbook deleteByIds(Integer ids);public CmsGuestbook checkByIds(Integer ids,CmsUser checkUser,Boolean checkStatus);这里没什么好说的,就是接口而已,我们不多看重点是下面的实现类。3.2.3从MngImpl到DaoMng红色框框内对应的实现代码如下:public CmsGuestbook save(CmsGuestbook bean, CmsGuestbookExt ext,Integer ctgId, String ip) bean.setCtg(cmsGuestbookCtgMng.findById(ctgId);bean.setIp(ip);bean.setCreateTime(new Timestamp(System.currentTimeMillis();bean.init();dao.save(bean);cmsGuestbookExtMng.save(ext, bean);return bean;public CmsGuestbook save(CmsUser member, Integer siteId, Integer ctgId,String ip, String title, String content, String email,String phone, String qq) CmsGuestbook guestbook = new CmsGuestbook();guestbook.setMember(member);guestbook.setSite(cmsSiteMng.findById(siteId);guestbook.setIp(ip);CmsGuestbookExt ext = new CmsGuestbookExt();ext.setTitle(title);ext.setContent(content);ext.setEmail(email);ext.setPhone(phone);ext.setQq(qq);return save(guestbook, ext, ctgId, ip);这里必须知道的是,title,content,email,phone,qq是封装进CmsGuestbookExt里的,ctgId是在CmsGuestbookCtg里的,所以在这个实现类中还会有:private CmsGuestbookCtgMng cmsGuestbookCtgMng;private CmsGuestbookExtMng cmsGuestbookExtMng;Autowiredpublic void setCmsGuestbookExtMng(CmsGuestbookExtMng cmsGuestbookExtMng) this.cmsGuestbookExtMng = cmsGuestbookExtMng;Autowiredpublic void setCmsGuestbookCtgMng(CmsGuestbookCtgMng cmsGuestbookCtgMng) this.cmsGuestbookCtgMng = cmsGuestbookCtgMng;封装进不同实体有很大的好处,可以防止在字段很多的情况下不会出现因为方法字段不是一一对应的,而出现映射混乱的问题(一般表现为有些字段储存入其他字段,而本身字段为Null)。当然代码也不会繁琐,隐藏bug少,便于数据管理。当然也有其坏处,会使得存储和查询效率降低,但是一般门户流量小,数据少,这些坏处可以忽略。第二个红色框框标记的部分,是return上一个方法,封装到一个bean,MngImpl这一实现类,存储过程一般最后都要封装进一个bean的。第一个红色框框走了dao接口,注意下面的代码声明了dao的注入:Autowiredpublic void setDao(CmsGuestbookDao dao) this.dao = dao;3.3Dao和DaoImpl3.3.1什么是Dao和DaoImpl?也就是dao接口和实现类,是数据访问层的重要的类。因为Jeecms使用hibernate技术,且映射关系并不复杂(针对guestbook来说,包括one to one的guestbookext,many to one的guestbookctg,但是并不难理解),而且并不需要多么复杂的数据处理。对于小型门户,hibernate就够用了。Dao和DaoImpl与Mng和MngImpl的理解是相似的,不详细介绍了。4. 实体类4.1为什么使用实体类?我们找一个简单的例子:import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;EntityTable(name=T_USER)public class User IdGeneratedValue(generator=system-uuid)GenericGenerator(name = system-uuid,strategy=uuid)Column(length=32)private String id;Column(length=32)private String userName;public String getId() return id;public void setId(String id) this.id = id;public String getUserName() return userName;public void setUserName(String userName) this.userName = userName;注意到username都是private,而他的get和set方法都是public,这意味这什么呢?外面的方法是无法访问到username的,只有使用get和set方法访问,这样保证了username的安全性,不会因为代码误编而导致错误。Java就是面向对象编程,这句话大家都是知道的,装进一个实体里,这样就很容编译了,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年春七年级历史下册 第二单元 辽宋夏金元时期 民族关系发展和社会变化 第13课 宋元时期的科技与中外交通教学设计 新人教版
- 2024年高中语文 第一单元 写作任务指导-如何运用论据论证自己的观点教学设计 新人教版必修下册
- 金融市场的风险管理与控制策略
- 研发流程优化与质量提升策略
- 学术会议中的制作技巧
- 跨文化背景下的制作注意事项
- 科技协作委托项目合同5篇
- 楼体广告制作合同5篇
- 财务管理在中小企业的角色
- 上海医院聘用合同书范本6篇
- 2024年青岛市中考数学试卷(含答案解析)+2023年试卷及答案详解
- GB/T 15568-2024通用型片状模塑料(SMC)
- 冷库建设日常运营与维护保养方案
- 【真题】2024年镇江市中考道德与法治试卷(含答案解析)
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 监理见证取样工作计划
- 广东省广州市白云区2023-2024学年五年级下学期期末数学试题
- JT-T-1094-2016营运客车安全技术条件
- 《中药种植技术》课件-第八章 药用植物病虫害及其防治
- 2024年九年级中考语文《对联题》复习训练卷及答案解析
- 团队工作交接方案
评论
0/150
提交评论