SCM项目手把手开发文档.docx

上传人:小飞机 文档编号:1664995 上传时间:2022-12-13 格式:DOCX 页数:79 大小:1.06MB
返回 下载 相关 举报
SCM项目手把手开发文档.docx_第1页
第1页 / 共79页
SCM项目手把手开发文档.docx_第2页
第2页 / 共79页
SCM项目手把手开发文档.docx_第3页
第3页 / 共79页
SCM项目手把手开发文档.docx_第4页
第4页 / 共79页
SCM项目手把手开发文档.docx_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《SCM项目手把手开发文档.docx》由会员分享,可在线阅读,更多相关《SCM项目手把手开发文档.docx(79页珍藏版)》请在三一办公上搜索。

1、1 SCM项目手把手开发文档作者:刘长炯日期:2008-9-16版本:1.01SCM项目手把手开发文档11编写目的32搭建基本开发环境32.1安装JDK和MyEclipse 5.5/6.0/6.532.2下载和安装Tomcat32.3安装MySQL 5.0/6.0 数据库42.4安装MySQL客户端管理软件Navicat Lite(可选)42.5安装和配置邮件服务器 (可选)52.6创建数据库和表62.6.1创建数据库62.6.2创建数据库表62.7准备必要的类库文件63开发项目73.1创建myscm2 Web项目73.2加入必要的JAR类库83.3导入JSP页面文件93.4修改web.xml

2、加入Struts 2过滤器93.5设置Hibernate全局配置文件103.6创建项目包结构113.7开发通用工具类123.7.1util.MD5Bean123.7.2util.mail.MailSender123.7.3filters.TomcatFormFilter133.8开发实体类和HBM文件133.9开发DAO层153.9.1HibernateSessionFactory153.9.2BaseDAO163.9.3OpenSessionInViewFilter163.10开发用户模块173.10.1BaseActionSupport(可选)173.10.2UserAction类摘要设计

3、193.10.3Struts 2通配符方式配置203.10.4用户列表功能203.10.5删除213.10.6表单AJAX验证功能213.10.7注册213.10.8激活233.10.9用户登录233.10.10用户注销233.10.11修改用户自己资料243.10.12取回密码243.10.13修改个人密码253.10.14根据ID查看用户信息253.11开发安全过滤器模块253.12开发后台管理模块(此模块建议作为练习)263.12.1前台设计263.12.2用户管理概要设计273.12.2.1用户搜索273.12.2.2添加新用户283.12.2.3浏览所有用户283.12.2.4删除用

4、户283.13站点全局配置及加载283.13.1.1加载283.13.1.2修改283.14安全中心303.14.1页面设计303.14.2添加新角色303.14.3浏览所有角色303.14.4添加资源访问许可303.14.5浏览所有资源访问许可304供应商和商品模块304.1商店首页面304.2供应商模块324.2.1类设计324.2.2注册供应商用户324.2.3添加供应商(TODO 供应商审批,隶属于交易员模块)324.2.4查看我的供应商列表324.2.5查看所有供应商列表334.2.6查看分成总额334.3商品模块334.3.1类设计334.3.2页面设计344.3.3添加商品354

5、.3.4浏览商品信息354.3.5浏览我的商品列表354.3.6浏览商品列表354.3.7修改商品信息354.3.8商品搜索355购物车模块355.1页面设计356程序开发调试交流366.1No result defined for action XXX and result success(input)的真正错误原因366.2排除法376.2.1排除浏览器及浏览器版本的因素376.2.2排除多余属性的干扰376.2.3JDK运行版本和开发工具编译器版本是否匹配?386.2.4重新发布Web应用或者复制新的JAR/Class文件了嘛?396.2.5Hibernate的包加完整了嘛?396.2.

6、6别的类似项目是否能正常运行?406.2.7log4j.properties是我们的好朋友406.2.8人不如新,衣不如旧416.2.9把能正确运行的项目的jar包集中起来,分门别类放置416.3关联程序源码426.4JDK6和Struts 2冲突的问题真实原因及解决办法426.5使用UTF-8或者GBK编码的MySQL实例486.6另外一个HibernateSessionFactory事务的异常506.7MySQL安装版停止运行506.8MyEclipse不会自动删除项目里面已经去掉的JAR506.9MySQL导出完整的建表语句516.10Struts 2不要加所有的JAR文件,否则项目会报

7、错511 编写目的本文档列出了本项目的基本开发步骤(只包含用户模块和后台管理模块),用于复习和开发时参考。开发时遵循的原则为尽量简单并提高代码复用,减少重复的代码。2 搭建基本开发环境2.1 安装JDK和MyEclipse 5.5/6.0/6.5本项目需要JDK 1.5(不要使用JDK 1.6,因为发现可能会导致BUG发生而无法载入Struts 2配置文件)。本项目使用MyEclipse 5.5或者更高版本开发,用其他工具例如Eclipse Java EE版本也可,主要用到JSP编辑器及Web项目发布功能。2.2 下载和安装Tomcat安装好Tomcat 6.0(或者5.5及更高版本)注意:

8、由于 Struts 2和 Tomcat 5.0 有冲突, 因此不能用Tomcat 5.Tomcat是一款开源免费的JSP服务器,可以在 .org/ 下载并安装。建议下载压缩包版本(文件名是apache-tomcat-6.x.xx.zip),而不是Windows Service Installer的EXE安装文件。 解压缩到磁盘目录,记下安装路径例如c:apache-tomcat-6.0.14, 和JDK的安装一样,为了避免日后产生问题错误,解压缩的路径不要带有空格,如c:Program Files。2.3 安装MySQL 5.0/6.0 数据库可以访问 MySQL 官方网站下载原版安装程序和J

9、DBC驱动,请访问:6.0.html#win32,下载安装包(如文件mysql-essential-6.0.5-alpha-win32.msi)双击进行安装,在最后一个屏幕点击启动Configure the MySQL Server now启动实例配置工具即可,如下图所示。配置过程请参考视频mysql_server_config.exe。此向导也可以通过选择菜单 开始 所有程序 MySQL MySQL Server 6.0 MySQL Server Instance Config Wizard来打开。2.4 安装MySQL客户端管理软件Navicat Lite(可选)MySQL管理工具,导航猫

10、免费版(Navicat Lite),可获得不低于SQL Server的易用度, 例如可视化建表, 修改表结构, 创建外键, 修改数据, 执行查询等功能,此软件的中文版可以在 下载*非商业 - 免费精简版。2.5 安装和配置邮件服务器 (可选)我们使用的本机测试邮件服务器为ForwardMail Server,启动后的邮箱登录页面是。在开始菜单中可启动邮件服务器配置工具,然后添加一个的域名,之后再点击左侧导航中的本地邮箱,添加必要的测试用邮箱地址。2.6 创建数据库和表2.6.1 创建数据库使用任意软件连接至MySQL服务器,然后创建数据库myscm。2.6.2 创建数据库表执行文件beansc

11、m.sql来创建应用程序运行所需的表和基本数据。2.7 准备必要的类库文件系统基于Struts 2Hibernate+MySQL开发,并用到了一些前台技术。下面列出了用到的Java和Web层类库:Struts 2*Hibernate 3MySQL JDBC 驱动JavaMail + JAF(Java激活框架 Java Activation Framework, Java对象变成字符串形式来传播)*JSTL类库(可从apache-tomcat-6.0.14webappsexamplesWEB-INFlib下找到)jstl.jar standard.jarCommons-(以及Commons-IO

12、)注:加*的包可使用MyEclipse自带的类库。Web框架(跨浏览器)FckEditor 可视化编辑HTMLXLoadTree 动态加载XML生成JavaScript树组件jQuery AJAX框架查询DOM对象,简洁,现成控件较少ExtJS 比较全面的AJAX框架 树,菜单,表格编辑器(Grid)学习比较困难 -显示公告(页面内弹出窗口)1. 导入CSS和EXT的JS2. 写Ext.onRead3. 写入功能代码EasyValidation 表单验证框架3 开发项目3.1 创建myscm2 Web项目选择菜单 File New Web Project, 输入项目名 myscm2,选择J2E

13、E 1.4。注意:不要选择Java EE 5,因为会导致JavaMail类库冲突。3.2 加入必要的JAR类库将必须的JAR包复制到WEB-INF/lib下。小提示:Hibernate的类库可以通过点击菜单 MyEclipse Add Hibernate Capabilities.来添加(此菜单位置可能略有出入),并同时指定数据库连接信息及创建Hibernate全局配置文件。struts2-blank-2.0.11.2.war - 5个基本的Struts 2 JARstruts2-showcase-2.0.11.2.war - 和 IOJSTL从tomcat下找 webappsexamples

14、WEB-INFlibMYSQL 驱动Hibernate的包3.3 导入JSP页面文件为了节约时间,JSP文件我们将不再一一从头开发。将项目所需的页面和相关资源从myscm项目中复制到本项目的WebRoot下即可(不要复制web.xml及源代码文件)。提示:如果文件显示为带?号的图标,如右图所示:,这不是文件错误,是因为原来的项目带了CVS版本控制信息,可在项目上选择上下文菜单Team Disconnect.来解决此问题。CVS版本控制,后面会介绍。3.4 修改web.xml加入Struts 2过滤器struts2org.apache.struts2.dispatcher.FilterDispa

15、tcherstruts2/*3.5 设置Hibernate全局配置文件创建文件srchibernate.cfg.xml,修改文件中的数据库连接信息:org.hibernate.dialect.MySQLDialectjdbc:mysql:/localhost:3306/beanscm?useUnicode=true&characterEncoding=GBKroot1234com.mysql.jdbc.Drivertrue请将代码中红色内容修改为您自己的数据库连接IP,用户名和密码。自动建表,INDEX不推荐。手工建表。3.6 创建项目包结构建议的包命名的规则是:公司域名.模块名.子模

16、块名3.7 开发通用工具类这些类和具体的业务无关,因此我们要单独开发以下的几个类。3.7.1 util.MD5BeanMD5摘要计算难点:获取MD5算法和转16进制字符串显示。3.7.2 util.mail.MailSender 邮件发送难点:message.addRecipients(Message.RecipientType.TO, InternetAddress .parse(getTo();if(isHtmlFormat() message.setContent(getBody(), text/html;charset=GBK); else message.setText(getBod

17、y();发附件- 发一个动态的保单JPG过程:创建连接属性对象Properties props = new Properties();props.put(mail.transport.protocol, smtp );/ 协议,必须设置后边的属性是可选的/props.put(mail.smtp.host, localhost );/ 服务器地址props.put(mail.smtp.port, 25 );/ SMTP 服务器端口props.put(mail.debug, true );/ 是否为调试模式创建Session对象 Session.getInstance(props)创建MimeMe

18、ssage对象 new MimeMessage(session)设置邮件相关信息使用Transport对象发送消息 session.getTransport();connect();send();3.7.3 filters.TomcatFormFilter用来解决Tomcat表单提交乱码问题(GET方法提交乱码)难点:HttpServletRequestWrapper和字符串编码转换加入到web.xml并编写一个JSP页面进行测试。3.8 开发实体类和HBM文件实体类和HBM文件可用MyEclipse生成,具体方法参考本人所著的免费电子书MyEclipse 6 Java 开发中文教程的7.4.

19、5 使用反向工程快速生成 Java POJO 类,映射文件和 DAO一节。当然作为学习者来说,推荐尝试自己来手写HBM文件和Entity类,但是实际开发时一般都是用工具生成。难点(一对多和多对一):Role.hbm.xml Resource.hbm.xml 您应该了解下列内容:实体类都有什么限制?为什么?JavaBean:无参数的构造器。要有getter和setter,属性应为private。实体类 extends JavaBean: 必须实现java.io.Serializable,不能使用final修饰符,必须有ID属性和至少一个属性,推荐实现hashCode()和equals()方法。把

20、HBM文件加入到hibernate.cfg.xml中。3.9 开发DAO层3.9.1 HibernateSessionFactory跨线程的对Session进行统一打开和关闭, 可配合Filter实现同一次访问实现自动管理Session和事务.DAO: load() - openSession() 读取数据 - closeSession() - JSP - user.address ThreadLocal + Filter解决Spring 提供了方案 OpenSessionInViewFilterlazy = false / 不推荐fetch=”join” / 不推荐Hibernate.ini

21、tilizer(entity);query 有个关键字 fetch, from User fetch.?1. 创建SessionFactory2. 创建 static ThreadLocal 变量3. 编写获取Session和关闭Session的方法4. 编写事务处理的方法: 开始, 提交, 回滚3.9.2 BaseDAO小延伸: Hibernate中分页相关的对象和方法是哪些?一万条记录, 从第200条开始读到第20条.public Query setFirstResult(int firstResult); 设置开始读取的行数public Query setMaxResults(int m

22、axResults); 设置最多读取的记录数Query q = s.createQuery(“from User”);return q.setFirstResult(200).setMaxResults(20).list();200 = 每页显示20条 * 当前页10, 每页显示几条练习: 写一个支持分页的查询方法List pagedQuery(String hql, int currentPage, int pageSize, Object. params)SQL: 列别名select sum(login_count) as 登录总次数 from scm_user3.9.3 OpenSess

23、ionInViewFilter实现的功能: 执行后续的Filter和Servlet/JSP时,首先打开事务,然后提交事务,如果出现异常则回滚事务, 还解决了JSP页面lazy载入数据时发现session被关闭的问题.注意:此Filter必须加在所有的Filter之前,包括Struts 2 Filter,否则可能出现无法正常提交事务的问题(已经有人遇到过此问题导致无法正常注册).try 1. 打开session并开始事务2. 向后执行ServletChain, 包括后续DAO和Action等 chain.doFilter(request, response);3. 提交事务 catch (Exc

24、eption e) 4. 回滚事务5. 显示出错信息 finally 6. 关闭session注册到web.xml.3.10 开发用户模块3.10.1 BaseActionSupport(可选)此类提供一些通用的功能, 包括获取Request对象,获取参数,获取属性,DAO等,这个类完全是可选的.属性列表:baseDAO 基本的DAO对象; title,标题; message属性;resetMessages() - 重置title标题和message需要注意的方法:mergeParamsAsURI()/* * 将所有URL参数合并成一个URL字符串(page参数除外), 提供分页时显示.lis

25、t.action?page=3¶1=11¶2=bb= list.action?page=3¶1=11¶2=bb&page=3+1 下一页 * return 字符串, 如: para1=11¶2=bb */public String mergeParamsAsURI() Map params = getRequest().getParameterMap();for(String value : values) System.out.println(value= + value);out.append(.URLEncoder.encode(key, UTF-

26、8) + =);out.append(.URLEncoder.encode(value, UTF-8) + &);/ 删除末尾多余的 & 字符if(out.toString().endsWith(&) out.deleteCharAt(out.length() - 1);/* * 获取当前会话的登录用户信息 * return User */public User getSessionLoginedUser() User currentUser = (User) getSession(loginedUser);return currentUser;3.10.2 UserAction类摘要设计文件

27、上传相关的属性: , String photo; photo是表单域的名字.1. JDK 版本 2. JAR 包冲突 XML解析器 Hibernate xmlapis.jar前台:头像: 如何预览头像?! (IE浏览器比较容易实现, 其他的没保证, 安全 IE6可以, IE7和其他浏览器可以通过降低安全级来实现) logo”img.src = ;3.10.3 Struts 2通配符方式配置采用此配置可以大大减少代码量, Struts 1中没有对等的内容./message.jsp/user/list.jsp.Struts.xml 的写法可以从 Struts2完整包/app/ struts2-bl

28、ank-2.0.11.2.wardelete list重定向到另一个Actionlist(Action的name)Result重定向到另一个地址/index.jsp3.10.4 用户列表功能user/list.action UserAction.list() /user/list.jsplist() 1. 查询记录得到数据集合 results2. setAttribute(属性名, results)3. return 结果名list.jsp$user.name 删除 user/delete.action?id=$user.id 修改user/editUI.action?id=$user.id3

29、.10.5 删除user/delete.action?id=3 UserAction.delete() message.jsp/ list.action1. findById() - User user;2. dao.delete(user);3.10.6 表单AJAX验证功能前台写法:用户名: 后台写法:String ajaxValidate1. 用户名敏感词禁止注册BadWordsFilter2. 用户名唯一3. Email唯一4. 图片验证码合法Action配置:/ajax_response.jsp/ajax_response.jsp$message3.10.7 注册/reg.jsp +

30、 /regcode.jsp + EasyValidation reg() /message.jspregcode.jsp(可用Servlet代替) 生成验证码1. 设置页面内容类型为图片2. 清空以前缓冲区3. 创建彩色缓冲图4. 获取图形(画笔)对象5. 填充白色的背景6. 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到(可选)7. 绘制颜色为红色8. 生成随机数字验证码并存入session, 然后输出到图片中9. 设定字体10. 绘制验证码到图片上11. 关闭对象, 释放内存, 刷新到图形对象12. 使用ImageIO把内存的图片编码到输出流, 参数依次为: 图片对象, 格式

31、(png,jpg), 输出流难点(可复制粘贴): 255)fc = 255;if (bc 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);%/随机产生155条干扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200);for (int i = 0; i 155; i+) int x = rand

32、om.nextInt(100);int y = random.nextInt(20);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);reg() 注册方法1. 检查session验证码和表单参数中是否一致2. 检查输入的验证码3. 用户名敏感词禁止注册4. 密码MD5保存5. 保存注册日期6. 设置激活状态为false7. 生成一个激活码 activeCode并存入数据库UUID8. 重命名文件并保存上传的图片到 /upload9. 获取/upload真实路径10.

33、 重命名为 uuid.扩展名11. ()快速复制文件12. 更新头像的存储路径到实体类13. 发送激活邮件String activeURL = myscm2/user/activation.action?code=+ activeCode;String message = 您注册了新用户, 激活码是: + activeCode+ , 可点击此地址激活账户: + + activeURL + + ;返回注册结果页面3.10.8 激活activation() message.jsp从表单参数读取激活码根据UUID激活码找到当前用户from User where tempcode = ?检查激活状态, 如果已经激活, 就提示他无需重复激活更新激活标志位(acti

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号