《传智播客SCM手把手开发文档wou.docx》由会员分享,可在线阅读,更多相关《传智播客SCM手把手开发文档wou.docx(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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服务器,可以在 http:/tomcat.apache.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 数据库可以访问 M
9、ySQL 官方网站下载原版安装程序和JDBC驱动,请访问: the MySQL Server now启动实例配置工具即可,如下图所示。配置过程请参考视频mysql_server_config.exe。此向导也可以通过选择菜单 开始 所有程序 MySQL MySQL Server 6.0 MySQL Server Instance Config Wizard来打开。2.4 安装MySQL客户端管理软件Navicat Lite(可选)MySQL管理工具,导航猫免费版(Navicat Lite),可获得不低于SQL Server的易用度, 例如可视化建表, 修改表结构, 创建外键, 修改数据, 执行
10、查询等功能,此软件的中文版可以在 下载*非商业 - 免费精简版。2.5 安装和配置邮件服务器 (可选)我们使用的本机测试邮件服务器为ForwardMail Server,启动后的邮箱登录页面是http:/localhost:1086/。在开始菜单中可启动邮件服务器配置工具,然后添加一个的域名,之后再点击左侧导航中的本地邮箱,添加必要的测试用邮箱地址。2.6 创建数据库和表2.6.1 创建数据库使用任意软件连接至MySQL服务器,然后创建数据库myscm。2.6.2 创建数据库表执行文件beanscm.sql来创建应用程序运行所需的表和基本数据。2.7 准备必要的类库文件系统基于Struts 2
11、Hibernate+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-FileUpload(以及Commons-IO)注:加*的包可使用MyEclipse自带的类库。Web框架(跨浏览器)Fck
12、Editor 可视化编辑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,选择J2EE 1.4。注意:不要选择Java EE 5,因为会导致JavaMail类库冲
13、突。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 - fileupload 和 IOJSTL从tomcat下找 webappsexamplesWEB-INFlibMYSQL 驱动Hibernate的
14、包3.3 导入JSP页面文件为了节约时间,JSP文件我们将不再一一从头开发。将项目所需的页面和相关资源从myscm项目中复制到本项目的WebRoot下即可(不要复制web.xml及源代码文件)。提示:如果文件显示为带?号的图标,如右图所示:,这不是文件错误,是因为原来的项目带了CVS版本控制信息,可在项目上选择上下文菜单Team Disconnect.来解决此问题。CVS版本控制,后面会介绍。3.4 修改web.xml加入Struts 2过滤器struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*3.5 设置Hibernat
15、e全局配置文件创建文件srchibernate.cfg.xml,修改文件中的数据库连接信息:!DOCTYPE hibernate-configuration PUBLIC -/Hibernate/Hibernate Configuration DTD 3.0/EN org.hibernate.dialect.MySQLDialectjdbc:mysql:/localhost:3306/beanscm?useUnicode=true&characterEncoding=GBKroot1234com.mysql.jdbc.Drivertrue请将代码中红色内容修改为您自己的数据库连接IP,
16、用户名和密码。自动建表,INDEX不推荐。手工建表。3.6 创建项目包结构建议的包命名的规则是:公司域名.模块名.子模块名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(get
17、Body(), text/html;charset=GBK); else message.setText(getBody();发附件- 发一个动态的保单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, tru
18、e );/ 是否为调试模式创建Session对象 Session.getInstance(props)创建MimeMessage对象 new MimeMessage(session)设置邮件相关信息使用Transport对象发送消息 session.getTransport();connect();send();3.7.3 filters.TomcatFormFilter用来解决Tomcat表单提交乱码问题(GET方法提交乱码)难点:HttpServletRequestWrapper和字符串编码转换加入到web.xml并编写一个JSP页面进行测试。3.8 开发实体类和HBM文件实体类和HBM文
19、件可用MyEclipse生成,具体方法参考本人所著的免费电子书MyEclipse 6 Java 开发中文教程的7.4.5 使用反向工程快速生成 Java POJO 类,映射文件和 DAO一节。当然作为学习者来说,推荐尝试自己来手写HBM文件和Entity类,但是实际开发时一般都是用工具生成。难点(一对多和多对一):Role.hbm.xml!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN Resource.hbm.xml!DOCTYPE hibernate-mapping PUBLIC -/Hib
20、ernate/Hibernate Mapping DTD 3.0/EN 您应该了解下列内容:实体类都有什么限制?为什么?JavaBean:无参数的构造器。要有getter和setter,属性应为private。实体类 extends JavaBean: 必须实现java.io.Serializable,不能使用final修饰符,必须有ID属性和至少一个属性,推荐实现hashCode()和equals()方法。把HBM文件加入到hibernate.cfg.xml中。3.9 开发DAO层3.9.1 HibernateSessionFactory跨线程的对Session进行统一打开和关闭, 可配合F
21、ilter实现同一次访问实现自动管理Session和事务.DAO: load() - openSession() 读取数据 - closeSession() - JSP - user.address ThreadLocal + Filter解决Spring 提供了方案 OpenSessionInViewFilterlazy = false / 不推荐fetch=”join” / 不推荐Hibernate.initilizer(entity);query 有个关键字 fetch, from User fetch.?1. 创建SessionFactory2. 创建 static ThreadLoc
22、al 变量3. 编写获取Session和关闭Session的方法4. 编写事务处理的方法: 开始, 提交, 回滚3.9.2 BaseDAO小延伸: Hibernate中分页相关的对象和方法是哪些?一万条记录, 从第200条开始读到第20条.public Query setFirstResult(int firstResult); 设置开始读取的行数public Query setMaxResults(int maxResults); 设置最多读取的记录数Query q = s.createQuery(“from User”);return q.setFirstResult(200).setMa
23、xResults(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 OpenSessionInViewFilter实现的功能: 执行后续的Filter和Servlet/JSP时,首先打开事务,然后提交事务,如果出现异常则回滚事务, 还解决了JSP页面lazy载入数据时发
24、现session被关闭的问题.注意:此Filter必须加在所有的Filter之前,包括Struts 2 Filter,否则可能出现无法正常提交事务的问题(已经有人遇到过此问题导致无法正常注册).try 1. 打开session并开始事务2. 向后执行ServletChain, 包括后续DAO和Action等 chain.doFilter(request, response);3. 提交事务 catch (Exception e) 4. 回滚事务5. 显示出错信息 finally 6. 关闭session注册到web.xml.3.10 开发用户模块3.10.1 BaseActionSupport
25、(可选)此类提供一些通用的功能, 包括获取Request对象,获取参数,获取属性,DAO等,这个类完全是可选的.属性列表:baseDAO 基本的DAO对象; title,标题; message属性;resetMessages() - 重置title标题和message需要注意的方法:mergeParamsAsURI()/* * 将所有URL参数合并成一个URL字符串(page参数除外), 提供分页时显示.list.action?page=3¶1=11¶2=bb= list.action?page=3¶1=11¶2=bb&page=3+1 下一页 * return
26、 字符串, 如: 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-8) + =);out.append(.URLEncoder.encode(value, UTF-8) + &);/ 删除末尾多余的 & 字符if(out.toString().ends
27、With(&) out.deleteCharAt(out.length() - 1);/* * 获取当前会话的登录用户信息 * return User */public User getSessionLoginedUser() User currentUser = (User) getSession(loginedUser);return currentUser;3.10.2 UserAction类摘要设计文件上传相关的属性: File photo, String photoFileName; photo是表单域的名字.1. JDK 版本 2. JAR 包冲突 XML解析器 Hibernate
28、 xmlapis.jar前台:头像: 如何预览头像?! (IE浏览器比较容易实现, 其他的没保证, 安全 IE6可以, IE7和其他浏览器可以通过降低安全级来实现) logo”img.src = file.value;3.10.3 Struts 2通配符方式配置采用此配置可以大大减少代码量, Struts 1中没有对等的内容./message.jsp/user/list.jsp.Struts.xml 的写法可以从 Struts2完整包/app/ struts2-blank-2.0.11.2.wardelete list重定向到另一个Actionlist(Action的name)Result重定
29、向到另一个地址/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.10.5 删除user/delete.action?id=3 UserAction.delete() message.jsp/
30、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 + /regcode.jsp + EasyValidation reg() /message.jspregcode.jsp(可用Se
31、rvlet代替) 生成验证码1. 设置页面内容类型为图片2. 清空以前缓冲区3. 创建彩色缓冲图4. 获取图形(画笔)对象5. 填充白色的背景6. 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到(可选)7. 绘制颜色为红色8. 生成随机数字验证码并存入session, 然后输出到图片中9. 设定字体10. 绘制验证码到图片上11. 关闭对象, 释放内存, 刷新到图形对象12. 使用ImageIO把内存的图片编码到输出流, 参数依次为: 图片对象, 格式(png,jpg), 输出流难点(可复制粘贴): 255)fc = 255;if (bc 255)bc = 255;int r =
32、 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 = random.nextInt(100);int y = random.nextInt(20);int xl = random.nextIn
33、t(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. 重命名为 uuid.扩展名11. File.renameTo()快速复制文件12. 更新头像的存储路径到实体类13. 发送激活邮件String activeURL = h