1.1 网上商城需求分析

1.1.1    前台:用户模块.

注册:

* JS非空校验.(不是必须)

* Struts2数据校验:在注册Action类同一包下新建UserAction-user_regist-validation.xml(针对注册regist)

* AJAX校验用户名是否存在:input文本框内加一条 - onblur="checkUserName()" -鼠标移除触发事件

不使用jquery:

 function checkUserName(){
// 获得用户名的值:
var username = document.getElementById("username").value;
// 1.创建异步加载对象:
var xhr = createXMLHttpRequest();
// 2.设置监听
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
var data = xhr.responseText;
document.getElementById("span1").innerHTML = data;
}
}
}
// 3.打开连接:
xhr.open("GET","${pageContext.request.contextPath}/user_checkUserName.action?"+new Date().getTime()+"&username="+username,true);
// 4.发送
xhr.send(null);
} function createXMLHttpRequest() {
var xmlHttp;
try { // Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
} catch (e) {
try {// Internet Explorer
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
}
}
} return xmlHttp;
}

使用jquery:

 function checkUserName(){
var username = $("#username").val();
$("#span1").load("${pageContext.request.contextPath}/user_checkUserName.action?"+new Date().getTime(),{'username':username});
}

* 发送激活邮件:需要一个,邮件本地服务器,当然联网的话就不需要这个了,还需要两个jar包,,注意引入javaee时可能会发生jar冲突。

发送邮件的工具类:MailUtils

 /**
* 发送邮件的工具类
*/
public class MailUtils {
public static void sendMail(String to,String code) throws Exception{
Properties props = new Properties();
props.setProperty("mail.smtp", "localhost");
// 1.Session对象.连接(与邮箱服务器连接)
Session session = Session.getInstance(props, new Authenticator() { @Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("service@shop.com", "111");
} }); // 2.构建邮件信息:
Message message = new MimeMessage(session);
// 发件人:
message.setFrom(new InternetAddress("service@shop.com"));
// 收件人:
message.setRecipient(RecipientType.TO, new InternetAddress(to));
// 设置标题
message.setSubject("来自SHOP激活邮件");
// 设置正文
message.setContent("<h1>来自SHOP的官网激活邮件</h1><h3><a href='http://localhost:8080/shop/user_active.action?code="+code+"'>http://localhost:8080/shop/user_active.action?code="+code+"</a></h3>", "text/html;charset=UTF-8"); // 3.发送对象
Transport.send(message);
}
}

其中code是发送邮件需要的一个密钥,由工具类UUIDUtils生成

 /**
* 生成激活码
*/
public class UUIDUtils {
public static String getUUID(){
return UUID.randomUUID().toString().replace("-", "");
}
}

密钥在业务层注册的时候生成并通过MailUtils.setMail(user.getEmail(), code);前往邮箱激活

* 验证码程序.

激活:

* 点击邮件中连接地址,对用户进行激活.

登录:

* 数据校验.

* 激活后的用户才可以进行登录.

* 验证码程序.

退出:

* 销毁session.

120

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

1.1.2    前台:分类模块(首页):

查询一级分类:显示到菜单位置.

查询一级分类:关联二级分类.

1.1.3    前台:二级分类

根据一级分类:查询到二级分类.

1.1.4    前台:商品模块(首页):

查询热门商品:

* 检索10个热门商品.

查询最新商品:

* 检索10个最新商品.(按时间排序)

根据分类查询商品:

* 根据分类的ID检索商品.

* 对商品显示的时候,分页显示.

根据商品ID检索商品:

* 显示商品详情.

1.1.5    购物模块:

添加到购物车:

* 将购物项添加到购物车.

* 如果购物项已经存在在购物车中,那么数量和小计需要增加.

* 如果购物项没有在购物车中,添加一个新的购物项.

清空购物车:

* 将购物车中所有的购物项,清空.

从购物车中移除:

* 将某一个购物项从购物车中移除.

1.1.6    订单模块:

保存订单:

* 数据从购物车中获取.

显示某个订单:

* 根据订单ID检索订单.

查询我的订单:

* 根据用户ID检索订单.

在线支付:

* 选择第三方支付平台,为订单进行付款.

1.1.7    用户模块:(后台)

查询所有用户:

修改用户信息:

删除用户信息:

1.1.8    一级分类:(后台)

查询所有一级分类:

* 分页.

添加一级分类:

修改一级分类:

删除一级分类:

* 删除二级分类.(级联)

1.1.9    二级分类:(后台)

查询所有二级分类:

添加二级分类:

* 所属一级分类:

修改二级分类:

* 所属一级分类:

删除二级分类:

1.1.10商品模块(后台)

查询所有商品:

* 分页.

* 条件查询.

添加商品:

* 上传商品图片.

修改商品:

* 修改上传图片.

删除商品:

1.1.11订单模块(后台)

查询所有订单:

* 分页

按状态查询订单:

* 分页

是否可以删除订单:

120

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

3.1    SSH环境搭建:

3.1.1    第一步:创建一个web项目.

3.1.2    第二步:导入相应jar包.

Struts2的jar包:

* struts2框架解压路径/apps/struts2-blank.war/WEB-INF/lib/*.jar

* struts2框架解压路径/lib/struts2-spring-plugin-2.3.15.3.jar

* struts2框架解压路径/lib/struts2-json-plugin-2.3.15.3.jar

Spring的jar包:

* Spring开发基本jar包

* spring框架解压路径/lib/spring-beans-3.2.0.RELEASE.jar

* spring框架解压路径/lib/spring-context-3.2.0.RELEASE.jar

* spring框架解压路径/lib/spring-core-3.2.0.RELEASE.jar

* spring框架解压路径/lib/spring-expression-3.2.0.RELEASE.jar

* spring框架依赖包解压路径/com.springsource.org.apache.commons.logging-1.1.1.jar

* spring框架依赖包解压路径/com.springsource.org.apache.log4j-1.2.15.jar

* Spring的AOP开发(Aspectj)

* spring框架解压路径/lib/spring-aop-3.2.0.RELEASE.jar

* spring框架解压路径/lib/spring-aspects-3.2.0.RELEASE.jar

* spring框架依赖包解压路径/com.springsource.org.aopalliance-1.0.0.jar

* spring框架依赖包解压路径/com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

* Spring的JDBC支持、事务管理、整合Hibernate

* spring框架解压路径/lib/spring-jdbc-3.2.0.RELEASE.jar

* spring框架解压路径/lib/spring-tx-3.2.0.RELEASE.jar

* spring框架解压路径/lib/spring-orm-3.2.0.RELEASE.jar

* Spring整合web项目:

* spring框架解压路径/lib/spring-web-3.2.0.RELEASE.jar

* Spring整合Junit单元测试:

* spring框架解压路径/lib/spring-test-3.2.0.RELEASE.jar

Hibernate框架jar包:

* hibernate框架解压路径/hibernate3.jar

* hibernate框架解压路径/lib/required/*.jar

* hibernate框架解压路径/lib/jpr/*.jar

* hibernate框架整合log4j

* slf4j-log4j12-1.7.2.jar

* 数据库驱动包

* c3p0连接池jar包.

3.1.3    第三步导入相应配置文件:

Struts框架中:

* web.xml

* 核心过滤器:

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

* struts.xml

Spring框架中:

* web.xml

<!-- Spring框架使用监听器,服务器启动的时候加载Spring的配置文件 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 监听器默认加载WEB-INF/application.xml -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

* applicationCotnext.xml

<!-- 引入外部jdbc.properties文件 -->

<context:property-placeholder location="classpath:jdbc.properties"/>

<!-- 配置连接池的信息 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<!-- 数据库连接的四个基本参数 -->

<property name="driverClass" value="${jdbc.driver}"/>

<property name="jdbcUrl" value="${jdbc.url}"/>

<property name="user" value="${jdbc.user}"/>

<property name="password" value="${jdbc.password}"/>

</bean>

<!-- 配置Hibernate的相关属性 -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<!-- 注入连接池 -->

<property name="dataSource" ref="dataSource"/>

<!-- 配置Hibernate的其他的属性 -->

<property name="hibernateProperties">

<props>

<!-- Hibernate的方言 -->

<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.format_sql">true</prop>

<prop key="hibernate.hbm2ddl.auto">update</prop>

<prop key="hibernate.connection.autocommit">false</prop>

</props>

</property>

</bean>

<!-- 声明式事务管理 -->

<!-- 配置事务管理器 -->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<!-- 注入 sessionFactory-->

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

* 不使用hibernate配置文件:

* 将hibernate的信息配置到spring框架中.

log4j的配置文件:

连接数据库基本参数配置文件:jdbc.properties

另外在对类及jsp页面等等的命名有了更全面的认识。

编码上出现过几个问题,不止下面这些(忘记了~)...:

异常The given object has a null identifier:修改数据时候主键没有传递

解决办法:<s:hidden name="action中实例对象名.id" id="id"></s:hidden>

hibernate总是报错 配置factory的id找不到,mapping配置文件Could not parse mapping document from input stream

解决办法:实体类映射表中"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">改为: "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd

数据库插入日期数据出现异常Data truncation: Incorrectdatetime value: '' for column 'ordertime' at row 1数据库时间类型和实体类中的定义的数据类型不匹配

解决办法:

1,更换最新的mysql连接数据库驱动,点此下载

2,使用SimpleDateFormat进行转换,转换成和数据库一致的格式:yyyy-MM-dd hh:mm:ss

对于查询的数据以页面的形式展现,在这个项目中有两种方法,一是离线查询,还有就是this.getHibernateTemplate().executeFInd

离线查询:

 DetachedCriteria criteria = DetachedCriteria.forClass(Product.class);
criteria.add(Restrictions.eq("is_hot", 1));
List<Product> list = this.getHibernateTemplate().findByCriteria(criteria, 0, 10);

executeFind()方法:

PageHibernateCallback类

 public class PageHibernateCallback<T> implements HibernateCallback<List<T>> {

     private String hql;
private Object[] params;
private int startIndex;
private int pageSize; public PageHibernateCallback(String hql, Object[] params,
int startIndex, int pageSize) {
super();
this.hql = hql;
this.params = params;
this.startIndex = startIndex;
this.pageSize = pageSize;
} public List<T> doInHibernate(Session session) throws HibernateException,
SQLException {
//1 执行hql语句
Query query = session.createQuery(hql);
//2 实际参数
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
//3 分页
query.setFirstResult(startIndex);
query.setMaxResults(pageSize); return query.list();
}
}

Dao层查询分页

 List<Product> list = (List<Product>) this.getHibernateTemplate().executeFind(new PageHibernateCallback<Product>("from Product where is_hot=?", new Object[]{1}, 0, 10));

最新文章

  1. 学习《Hardware-Efficient Bilateral Filtering for Stereo Matching》一文笔记。
  2. java弱引用之WeakHashMap相关资料
  3. 如何预览将要上传的图片-使用H5的FileAPI
  4. Autoit 在word中绘图
  5. 2015年Java开发岗位面试题归类
  6. 【poj1014】 Dividing
  7. MFC学习 进程间通信
  8. php redis 分布式类
  9. HTML&amp;CSS基础学习笔记1-简单网页中有哪些标签?
  10. RDLC报表系列(二) 行分组
  11. jq中的css-Dom
  12. CSS常用Hack集合(adding)
  13. CocosCreator游戏开发---菜鸟学习之路(三)如何在CocosCreator中使用Pomelo
  14. ubuntu设置 SSH 通过密钥对登录
  15. django.core.exceptions.AppRegistryNotReady: Apps aren&#39;t loaded yet.
  16. MongoDB的简单操作
  17. merge-two-sorted-lists合并链表
  18. Ionic3与Angular4新特性
  19. js,timeout,promise执行顺序
  20. selenium 滑动解锁(drag_and_drop_by_offset)

热门文章

  1. Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片
  2. mongodb aggregate
  3. arm开发板make编译时遇到 make[2]:*** [s-attrtab] 已杀死 问题的解决方案
  4. Spring EntityResolver &quot;.dtd&quot; 和 &quot;.xsd&quot;检验
  5. jar包部署在linux上后浏览器访问不到的问题
  6. 用Python实现九九乘法表打印
  7. Linux知识点(二)
  8. ng-class的几种用法
  9. node监视文件或者文件夹的变化
  10. SessionState的几种设置