2011年2月9日开始学习struts2,到现在,用struts2花了7,8天完成了当当网的核心模块(包含大部分功能)
先对自己做的当当网做个总结吧:
首先是注册,注册页面基本的CSS以及美工,图片都是成品。表单里封装了user的字段,提交到Action中,利用Action中user对象的set方法封装了整个表单的值到他的属性中去,表单项不太多。但是由于整个注册需要2个步骤来完成,第一步简单的提交用户信息,第二部通过验证。第一步与第二步之间user的共享是通过session来做的。本来第二部是需要通过邮件,验证码是通过uuid生成的唯一字串,在通过Base64编码形成的。将发送的验证码,与表中的比较。由于种种原因,邮件的这部分操作,改用了简单的页面提示,只需把页面上显示的验证码复制到文本框提交就可以了。这里需要注意的就是如果用户在完成第一步之后,关掉了浏览器,下次登录的时候需要在Action里检查它是否通过了验证(user表中有对应的字段,同时也存了验证码)。总之注册的Action里做了:1,将用户信息写入d_user表。2,密码加密。3,生成邮箱激活码,并发送,将激活码uuid部分更新到数据库。还有个要点是,此处我的处理时在用户注册成功时,自动登录,将用户信息存入session。此处作的最烦心的事情就是jQry的表单验证,用了jQry的validate插件。由于页面的错误信息放置已经定死,此处需要重写jQry的errorPlacement方法,来定位错误信息的放置。同时使用了添加了一些验证规则,比如说汉字啊,一个汉字作为2个字符长度啊,此处的实现涉及到了addMethod方法(此为全局的方法)。
jQuery.validator.addMethod("character", function(value, element) {
var rules =/^[a-z0-9\u4e00-\u9fa5]+$/;
return this.optional(element) || (rules.test(value));
}, "<img src='../images/wrong.gif'/>请输入正确的昵称!"
);
jQuery.validator.addMethod("myLengthRange",function(value, element, param) {
var rules = /[\u4e00-\u9fa5][\u4e00-\u9fa5]+/;
var rule2 = /[\u4e00-\u9fa5]+/;
return this.optional(element) || (value.length>=param[0] && value.length<=param[1] || rules.test(value) && value.length<3 || value.length==3&&rule2.test(value));
},"<img src='../images/wrong.gif'/>昵称的长度必须大于4小于20!"
);
接下来是登录,登录的时候,登录的时候没有进行表单的验证。我觉得不太必要。但是如果用户名密码错误,或者为空点击登录,会利用Action返回的result定位到原来的页面,显示错误信息。此处需要注意的也就是当用户是还未通过验证的用户,那么他登录之后会跳转到验证页面,验证码从数据表中取得,此处操作通注册的第二步操作。
注册与登录完毕之后,进入main页面。main页面其实就是利用jQry $.load()方法导入一些页面,以及利用ognl标签<s:action />来载入Action。如下:
<s:action name="new" namespace="/main" executeResult="tr"></s:action>
左边栏是Category,分为二级菜单以及三级菜单。因为一级菜单,此处我们只对图书进行操作,所以也就省去了一级菜单的列出,直接设为静态。中间的最新上架,编辑推荐,最新热卖之类的Action做的操作大同小异。也就是利用不同的规则从数据库中查到到对应的list,然后利用ognl的iterator标签在页面中显示,此处,我在Action中设置了num字段用于控制显示的条目数,此字段用于iterator标签中的end属性,此属性在使用时必须声明begin属性。这里得num在getNum方法时,需要在其超出list.size()-1时,对其进行设置,设置为list.size()-1。在点击页面中的更多链接时,通过传入num参数,来改变显示的条目数量。同时main页面上做了jQry处理,在鼠标mouseover,mouseout,mousemove时显示产品大图。
$(function(){
var x = 10;
var y = 20;
$("img.dang_img").mouseover(function(e){
this.myTitle = this.title;
this.title = "";
var imgTitle = this.myTitle? "<br/>" + this.myTitle : "";
var tooltip = "<div id='tooltip'><img height='200px' width='150px' src='"+ this.src +"' alt='产品预览图'/>"+imgTitle+"</div>"; //创建 div 元素
$("body").append(tooltip); //把它追加到文档中
$("#tooltip").css({
"top": (e.pageY+y) + "px",
"left": (e.pageX+x) + "px"
}).show("fast"); //设置x坐标和y坐标,并且显示
}).mouseout(function(){
this.title = this.myTitle;
$("#tooltip").remove(); //移除
}).mousemove(function(e){
$("#tooltip")
.css({
"top": (e.pageY+y) + "px",
"left": (e.pageX+x) + "px"
});
});
})
接下来是购物车的操作。购物车的操作牵涉到了,jQry对按钮的点击的,修改图片的显示,在成功发送Ajax时回调函数,将图片替换为原来的图片。此处对购物车的添加商品也就是通过Ajax完成的。$.post() 购物车中如果购买的是相同产品,那么会通过查找,修改对应的CartItem的数量,若不同产品,则向CartItem的items(ArrayList)添加该商品,同时,更新Cart的总价以及省钱数。(Cart类包含一个List<CartItem>items,以及总价和省钱数;而CartItem中保存的是Book对象以及deleted(用于判断是否从购物车中删除,删除后可以恢复)和数量)。cartlist.jsp显示的2个列表,一个是购物车中的产品信息,一个是从购物车中删除的产品。利用ognl的iterator遍历,显示deleted为tr及false的2个列表。此处可以点击更改数目,此操作同时更新Cart的总价及省钱数。同时在删除某一产品后,再次购买该商品,用户若恢复删除的商品,此处也涉及了同一商品的数量合并,以及从List中删除多余的商品。
在点击结算按钮时,此处设置了拦截器,若用户未登录,则在拦截器中通过reqst.getHeader获得原页面的url在登录之后跳转到原来访问的页面(同理,在main页面的head上的登录按钮也用了这个拦截器)。所以此处在sturts.xml中的配置的result的返回页面是动态的,如下:
<result name="s?ss" type="redirect">${forward_to}</result> 此处购物车的信息需要在浏览器关闭后保留,则此处运用到session和cookie来一起工作来实现此功能。每一次更新购物车都需要将一个cart对象按照指定的规则转成字符串,通过UrlEncoder来编码,存入Cookie,因为涉及到中文问题,同时需要编写对应的方法按照规则将Cookie的字串转会成Cart对象。在session取对象取出来为空时,将cookie的字串转成cart,放入session,即可。
订单模块,牵涉到的业务也比较简单,首先点击结算,跳转到订单信息页面,显示购物车中的信息。同时点击下一步,此时进入一个Action先将表单信息存入数据库,接下来,完善收件地址,若为新地址则加入表中,同时更新order表中的地址信息(order表中存地址信息,本来我觉得字段有冗余,但是经同学点拨,得知用户可以修改,删除地址,所以订单中的地址信息不可存地址表外键)最后完成订单。完成订单后注意要删除cart对应的session以及cookie。
分享到:
相关推荐
sturts开发的当当网,oracle数据库实现,达内培训中心开发。
这个入门例子旨在帮助初学者快速掌握如何配置和使用Struts2进行开发。以下是一些核心知识点: 1. **Struts2框架基础**:Struts2是Apache软件基金会的一个开源项目,它在Struts1的基础上进行了大量的改进,提供了更...
在本示例中,"Sturts2.rar"可能包含了一个演示如何使用Struts2实现文件上传功能的项目。文件上传是Web应用中常见的需求,它允许用户上传文件到服务器。 在Struts2中,处理文件上传主要依赖于Apache Commons ...
Struts2是一个非常著名的Java Web开发框架,它基于MVC(Model-View-Controller)设计模式,极大地简化了创建企业级Java应用的过程。在描述中提到的"struts2的jar包"是构建Struts2项目所必需的核心库,包含了框架运行...
在J2EE开发中,Struts、Spring和Hibernate是三个非常关键的开源框架,它们各自在Web应用程序的架构中承担着不同的职责。本教程将围绕这三个框架,介绍如何使用它们来实现基本的CRUD(创建、读取、更新、删除)操作。...
Struts2是一个强大的Java web应用程序框架,它源于WebWork2并吸收了Struts1的优点,致力于简化企业级应用的开发过程。Struts2的核心在于它对Model-View-Controller(MVC)架构模式的实现,提供了更加灵活和可扩展的...
Struts2是一个强大的Java web开发框架,它提供了一种组织应用程序的方式,使开发者可以更方便地构建MVC(模型-视图-控制器)架构的应用。在这个"Struts2经典案例"中,我们将深入探讨如何利用Struts2实现数据库连接、...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web开发框架,它在Web应用中提供了强大的控制层支持。对于初学者来说,理解并掌握Struts2的增删改查操作是十分重要的,因为这是构建任何业务应用程序...
Struts2是一个非常著名的Java Web框架,用于构建企业级应用。它主要负责处理HTTP请求,进行视图渲染,并提供了一套强大的MVC架构来管理应用程序的业务逻辑。在Struts2中,验证(Validation)是确保数据质量和业务...
Struts2是一个流行的Java Web应用程序框架,用于构建和维护可扩展且易于管理的企业级应用程序。在Struts2中集成JSON(JavaScript Object Notation)技术,可以让应用与客户端进行更高效的数据交互,通常用于Ajax...
开发语言:java +jsp +struts2+hibernate 开发环境:MyEclipse 数据库: MySQL 系统架构:B/S架构 服务器:Apache Tomcat 二、系统包含模块 1、档案管理系统 2、联系人管理系统 3、费用管理系统 4、库存管理系统 5、...
在创建一个Struts 2应用之前,我们需要设置开发环境。这包括配置IDE(如Eclipse或IntelliJ IDEA)、导入Struts 2的库到项目中,并确保Web服务器(如Tomcat)已经正确配置。 接下来,我们将创建一个纯手工的Web应用...
"Sturts2第二部分"可能是指由于文件大小限制,将Struts2的完整压缩包分为两个部分进行上传,这部分包含了Struts2框架的后续内容。 在`src`目录下,通常会包含Struts2框架的源代码。源码是理解框架工作原理的关键,...
在“Sturts2课件第三天”的学习中,我们可能会涉及以下关键知识点: 1. **Struts2架构**:理解Struts2的核心组件和工作流程,包括Action、Result、Interceptor、Plug-in等,以及它们在请求处理中的作用。 2. **...
Struts2是一个强大的MVC(模型-视图-控制器)框架,被广泛应用于Java Web开发。国际化(Internationalization,简称i18n)是让应用能够支持多种语言和地域的重要特性。下面,我们将深入探讨如何在Struts2框架中实现...
### Struts2、Hibernate与Spring整合开发知识点梳理 #### 一、基础知识概览 - **JavaEE应用概述**: - **分层模型**:JavaEE应用通常采用分层架构,包括表示层、业务逻辑层、数据访问层等。 - **组件**:JavaEE中...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发领域中广泛应用。这个经典教程旨在帮助开发者深入理解Struts2框架的核心概念、特性以及实际操作,特别是关注Struts2的标签库和文件上传功能。 ...
Struts 2 是一个强大的Java Web应用程序开发框架,它提供了模型-视图-控制器(MVC)架构,便于开发者构建可维护、结构清晰的Web应用。在这个“Sturts 2 框架在线答疑系统”中,核心功能是实现Struts验证,这涉及到...
Spring、Struts2、Struts1 和 Hibernate4 是Java Web开发中的四大框架,它们各自扮演着不同的角色,共同构建了企业级应用的基础架构。这里提到的文档集合是关于这四个框架的最新版本API,旨在帮助开发者更好地理解和...
在IT行业中,jQuery、JSON和Struts2是三个非常关键的技术元素,它们分别在Web开发的不同层面上发挥着重要作用。接下来,我们将详细探讨这三个技术及其在项目中的整合应用。 jQuery是一个高效、轻量级的JavaScript库...