收藏 分享(赏)

Jeecms开发学习笔记.doc

上传人:精品资料 文档编号:10374657 上传时间:2019-11-04 格式:DOC 页数:12 大小:97.90KB
下载 相关 举报
Jeecms开发学习笔记.doc_第1页
第1页 / 共12页
Jeecms开发学习笔记.doc_第2页
第2页 / 共12页
Jeecms开发学习笔记.doc_第3页
第3页 / 共12页
Jeecms开发学习笔记.doc_第4页
第4页 / 共12页
Jeecms开发学习笔记.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、Jeecms 开发学习笔记Jeecms 开发学习笔记青岛海尔软件有限公司带吴钩Jeecms 开发学习笔记第 0 页 共 12 页目录1.文档说明 .32. 关键词 .32.1MVC32.2 实体 32.3 实现类 33. 从 Act 到 Mng 到 Dao43.1Act.43.1.1 什么是 Act? 43.1.2Act 实现从 html 到 jspx43.1.3 从 Act 到 Mng 53.2Mng 和 MngImpl 73.2.1 什么是 Mng 和 MngImpl? .73.2.2Mng 73.2.3 从 MngImpl 到 Dao83.3Dao 和 DaoImpl93.3.1 什么是

2、 Dao 和 DaoImpl? .94. 实体类 .94.1 为什么使用实体类? 94.2id 的作用 .105 配置文件 .115.1 数据库配置文件 115.2 国际化 12Jeecms 开发学习笔记第 1 页 共 12 页1.文档说明本文档来源一个现实项目的学习,笔者须在 Jeecms 框架内实现前台提交简历,后台查看简历的过程。而笔者毫无 java web 开发经验。因此本文档适用于毫无 java web 开发经验人群,将以 Jeecms 的 spring MVC + spring + hibernate 框架为结构进行介绍。建立一个实体,从数据的写入到查找为流程,进行一个详细的描述。

3、2.关键词2.1MVCMVC 全名是 Model View Controller,是模型(model)视图(view)控制器(controller) 的缩写,一种软件设计典范,用一种业务逻辑、数据、界面 显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC 被独特的发展起来用于 映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。2.2 实体实体类主要是作为数据管理和业务逻辑处理层面上存在的类别; 它们主要在分析阶段区分 。实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行

4、为必须与它所代表的实体对象密切相关。2.3 实现类就是接口的实现类,实现了接口中那些方法的方法体。Jeecms 开发学习笔记第 2 页 共 12 页3.从 Act 到 Mng 到 Dao3.1Act3.1.1 什么是 Act?在我的理解,Act 就是接受请求然后执行方法的类,是前台页面和后台处理衔接的类,是重要的类。一般地,注释掉 Act 下的内容,就失去了衔接的类,我们不需要重新编译实体,Mng ,Dao ,也不会影响其他的类。这时候,新编译的 Act 实现与前台的衔接后,就会走到它所注入的 Mng,Dao ,最后进入表。3.1.2Act 实现从 html 到 jspx在参照 guestbo

5、ok 的时候,你会发现并没有 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);FrontU

6、tils.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 / 留言板类别页mode

7、l.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.j

8、spx 的 urlJeecms 开发学习笔记第 3 页 共 12 页就相当于发送了这个请求,然后进入由RequestMapping 注解的一个方法。我们假设这个时候没有留言类别,也就是说 ctg=null 为 true,这时就会return FrontUtils.getTplPath(request, site.getSolutionPath(),TPLDIR_SPECIAL, GUESTBOOK_INDEX)在这里 site 是你设置的 site 一般与 project 名一致,TPLDIR_SPECIAL 已经配置好了,指的是 t 文件夹下的 special 文件,重点说一下 GUESTB

9、OOK_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 到这

10、个 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

11、 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 =

12、 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) Jeecms 开发学习笔记第 4 页 共 12 页json.put(“succ

13、ess“, 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.rende

14、rJson(response, json.toString();Autowiredprivate CmsGuestbookCtgMng cmsGuestbookCtgMng;Autowiredprivate CmsGuestbookMng cmsGuestbookMng;Autowiredprivate SessionProvider session;Autowiredprivate ImageCaptchaService imageCaptchaService;Json 我们不多做介绍,在 Jeecms 框架下,想要处理带有验证码提交的数据时,我们可以复制之后稍作修改,方法是平凡的,重点看红

15、色框的部分。第一个红色框框中用到了 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 ,提交就成功了。第二个红色框框中用到了Autowir

16、ed 注解,作用是数据在走 Mng 接口时 bytype 自动注入,与Resource 注解的 byname 形成对照。这就实现了从 Act 到 Mng,注入后可以使用 Mng 的 save 方法。Jeecms 开发学习笔记第 5 页 共 12 页3.2Mng 和 MngImpl3.2.1 什么是 Mng 和 MngImpl?也就是 manager 接口和实现类,是业务逻辑层的重要的类。在 Jeecms 中,guestbook是特殊的,他有前端 guestbook_index.html 存入,有后端 guestbook 文件夹下 3 个页面的查询。这就意味着有两个 Act 会走这个 Mng 接

17、口,相对的,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 getL

18、ist(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, Intege

19、r 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 checkByI

20、ds(Integer ids,CmsUser checkUser,Boolean checkStatus);这里没什么好说的,就是接口而已,我们不多看重点是下面的实现类。Jeecms 开发学习笔记第 6 页 共 12 页3.2.3 从 MngImpl 到 DaoMng 红色框框内对应的实现代码如下:public CmsGuestbook save(CmsGuestbook bean, CmsGuestbookExt ext,Integer ctgId, String ip) bean.setCtg(cmsGuestbookCtgMng.findById(ctgId);bean.setIp(ip

21、);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 g

22、uestbook = 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,

23、 ip);这里必须知道的是,title,content ,email ,phone ,qq 是封装进 CmsGuestbookExt 里的,ctgId 是在 CmsGuestbookCtg 里的,所以在这个实现类中还会有:private CmsGuestbookCtgMng cmsGuestbookCtgMng;private CmsGuestbookExtMng cmsGuestbookExtMng;Autowiredpublic void setCmsGuestbookExtMng(CmsGuestbookExtMng cmsGuestbookExtMng) this.cmsGuestbo

24、okExtMng = cmsGuestbookExtMng;Autowiredpublic void setCmsGuestbookCtgMng(CmsGuestbookCtgMng cmsGuestbookCtgMng) Jeecms 开发学习笔记第 7 页 共 12 页this.cmsGuestbookCtgMng = cmsGuestbookCtgMng;封装进不同实体有很大的好处,可以防止在字段很多的情况下不会出现因为方法字段不是一一对应的,而出现映射混乱的问题(一般表现为有些字段储存入其他字段,而本身字段为 Null)。当然代码也不会繁琐,隐藏 bug 少,便于数据管理。当然也有其坏

25、处,会使得存储和查询效率降低,但是一般门户流量小,数据少,这些坏处可以忽略。第二个红色框框标记的部分,是 return 上一个方法,封装到一个 bean,MngImpl 这一实现类,存储过程一般最后都要封装进一个 bean 的。第一个红色框框走了 dao 接口,注意下面的代码声明了 dao 的注入:Autowiredpublic void setDao(CmsGuestbookDao dao) this.dao = dao;3.3Dao 和 DaoImpl3.3.1 什么是 Dao 和 DaoImpl?也就是 dao 接口和实现类,是数据访问层的重要的类。因为 Jeecms 使用 hibern

26、ate 技术,且映射关系并不复杂(针对 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.Ge

27、neratedValue;import javax.persistence.Id;import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;Jeecms 开发学习笔记第 8 页 共 12 页EntityTable(name=“T_USER“)public class User IdGeneratedValue(generator=“system-uuid“)GenericGenerator(name = “system-uuid“,strategy=“uuid“)Column(length=

28、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,这意味这

29、什么呢?外面的方法是无法访问到 username 的,只有使用 get 和 set 方法访问,这样保证了 username的安全性,不会因为代码误编而导致错误。Java 就是面向对象编程,这句话大家都是知道的,装进一个实体里,这样就很容编译了,这就是为什么使用实体。4.2id 的作用再看 guestbook 的两个实体 CmsGuestbook 和它的父类 BaseGuestbook,关于它的字段以及 get 和 set 方法我们就不再赘述,看下面的代码:public boolean equals (Object obj) if (null = obj) return false;if (!(

30、obj instanceof com.jeecms.cms.entity.assist.CmsGuestbook) return false;else com.jeecms.cms.entity.assist.CmsGuestbook cmsGuestbook = Jeecms 开发学习笔记第 9 页 共 12 页(com.jeecms.cms.entity.assist.CmsGuestbook) obj;if (null = this.getId() | null = cmsGuestbook.getId() return false;else return (this.getId().e

31、quals(cmsGuestbook.getId();public int hashCode () if (Integer.MIN_VALUE = this.hashCode) if (null = this.getId() return super.hashCode();else String hashStr = this.getClass().getName() + “:“ + this.getId().hashCode();this.hashCode = hashStr.hashCode();return this.hashCode;这段代码定义了 id 这个字段作为 guestbook 的标识,没有 id 则不能封装入库。5 配置文件5.1 数据库配置文件falseJeecms 开发学习笔记第 10 页 共 12 页Hibernate 的映射是非常实用的,从配置文件的简单就可以看出。5.2 国际化在 Jeecms 中就是 messages_zh_CN.properties 和 messages_en_US.properties注意 utf-8 码转码。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报