薛倩
基于MVC模式和Java EE技术网上书店的设计与实现
薛倩
网上书店作为电子商务的一种,与传统的店面书店相比,其经营方式和销售渠道表现出很多优势,为此进行网上电子书店的设计与实现。为了程序的易维护性和可扩展性,结合网上交易系统的特点,采用模式视图控制器(MVC)设计模式,使之适用于Java EE(企业版)技术来进行项目的开发。根据企业需求分析,进行系统功能结构设计,以系统开发技术应用和购物车的实现为例,详尽介绍了网上书店的设计与开发方法。
MVC模式;Java EE技术;网上书店;购物车;JSP标准标签库;JNDI技术
基于Internet的信息服务,商务服务已经成为现代企业不可缺少的一项服务。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站[1]。现代企业需要的是一个功能强大的,能提供完善的电子商务服务的动态商务网站。网上书店作为电子商务的一种,与传统的店面书店相比,其经营方式和销售渠道表现出很多优势。首先,它不受传统购物的诸多限制,24小时全天候、全方位服务是店面书店所不能企及的。其次商家可以通过网络拉近与消费者的距离、迅速增加所拥有的消费群,同时对于消费者可以扩大选择面,足不出户通览互联网上的书籍信息,尽情享受购书乐趣,体现了个性化的购物过程。第三,成本低廉是网上电子书店的显著优点。网上购书减少了商品流通的中间环节,节省了大量的开支,从而也大大降低商品流通和交易成本。加之与其他网上交易相比,购书过程易于判断和选择,书籍的运送不易破损,不具时效性等特点,更加明确了网上书店的优势。网上交易平台对书籍销售企业具有重要的意义,为此研究能够实现简单电子商务的小型动态商务网站——网上电子书店交易系统。
1.1 开发技术选择
很多网上交易系统是由JSP(Java Server Pages)技术完成的,仔细分析发现JSP技术存在弊端。最突出的问题是代码和业务逻辑混淆在一起,彼此嵌套,难以对项目进行有效的维护和扩展。例如,使用JSP技术编写的程序,其JSP页面直接访问数据库,如果数据库中表的名称改变了,需要改写所有的访问语句;同时程序中所有的页面都需要美工进行美化,这样一来,当网站业务需求发生变化的时候,对于程序员和美工都是一个很重的负担。因此,为了使程序具有维护性和可扩展性,结合网上交易系统的特点,本文采用MVC(Model View Controller)设计模式,使用适用于Java EE(Java Platform,Enterprise Edition)技术来进行项目的开发。
1.2 系统开发技术介绍
1.2.1 MVC设计模式和Java EE技术
所谓设计模式是一套被反复使用、多数人知晓的、代码设计经验的总结[2],设计模式的作用是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。MVC设计模式可应用到某种应用开发中,由模型、视图、控制器3个模块组成。Java EE开发技术就是基于MVC设计模式的应用,其中模型代表应用程序状态和业务逻辑,进行业务操作和访问数据库,对应的组件是JavaBean。视图提供可交互的客户界面,向客户显示模型数据,对应的组件是JSP或HTML文件。首先,控制器根据客户的请求来操纵模型,并把结果经由视图展现给客户,对应的组件是Servlet。Java EE开发技术优点在于3个层各尽其责、互不干涉,如果哪一层的需求发生变化只需要更改相应层的代码,而不影响其他层。其次,由于按层把系统分开,有利于实现开发中的分工。第三是把显示和数据分离,增加了各模块的可重用性。MVC访问模式如图1所示:
图1 MVC访问模式
Java EE体系架构采用传统的MVC设计模式,支持企业级应用开发,简化企业解决方案的开发、部署和管理等复杂问题,事实上,Java EE已经成为企业级开发的工业标准和首选平台[3]。
1.2.2 Servlet
Servlet是一个Java程序,是在服务器上运行以处理客户端请求并做出响应的程序[4]。我们使用Web容器构建电子商务应用程序时,一般使用的是Web HTTP请求,构建的Servlet不需要提供Servlet接口,只要继承HttpServlet类就行了,继承了HttpServlet的类就是一个可在Servlet引擎Web服务器里面运行的小应用程序。用来接收客户请求,并做出响应的Java程序,Servlet是中间件技术的重要部分,它控制着其他的组件。
Servlet编程基本模式:首先处理Get和Post请求,其次Servlet接收数据,最后根据结果,转向其他页面或资源。Servlet的生命周期由Servlet容器控制,如Tomcat就是一个Servlet容器。
1.2.3 JSP标准标签库
JSP标准标签库简称为JSTL(Java Server Pages Standard Tag Library),辅助JSP显示动态内容的标准标签库。JSTL提供的标准标签有包含通用标签、条件标签、迭代标签的核心标签库和SQL标签库等,可用于编写各种动态JSP页面和访问数据库。比如使用setDataSource标签定义数据源的代码为,<sql:setDataSource driver="driverClass" url= "databaseURL" user="username" password= "userpass" var= "datasource"/〉 1.2.4 JNDI(Java Naming and Directory Interface)技术
企业级开发需要稳健和高效的数据访问层[5],而传统的数据库连接技术已经无法满足需求,而且需要打开连接,操作数据库,关闭连接等多次重复操作。JNDI技术可以给应用程序提供可靠的已连接好的空闲连接。JNDI是一组在Java应用中访问命名和目录服务的应用程序编程接口(API),其javax.naming.Context接口提供了查找JNDI Resource的接口,该接口的lookup()方法获得数据源。得到数据源DataSource对象后,javax.sql.DataSource接口负责建立与数据库的连接,可以通过DataSource的getConnection()方法获得数据库连接对象Connection,把连接保存在连接池中。连接池是由容器提供的,用来管理池中连接对象。JNDI技术进行数据连接的工作过程如图2所示:
图2 JNDI技术进行数据连接的工作过程
2.1 系统功能结构设计
系统的功能是建立简单小型动态网上购书网站。根据网站功能需求,系统设计的主要功能模块包括书籍展示、书籍详情、购物车、购物结算、用户认证注册等内容。书籍展示显示了所有书籍的列表及概要信息,并可以根据需要选择其中一本,链接到书籍详情。书籍详情页面将详细介绍书籍的作者、出版时间、摘要等相关信息。购物车是网上书店功能结构中的核心[6],通过购物车可以将需要购买的书籍依次添加进来,直至最终实现购物结算功能。除了以上基本功能模块,网上书店可以根据需要拓展、增加其他功能模块,比如留言板、新书推荐等。
2.2 开发环境
系统采用B/S结构,以Apache Tomcat 7.0作为应用服务器,SQL Server 2005作为数据库服务器,使用集成开发工具MyEclipse8.0,基于MVC模式和Java EE技术进行网络应用程序的开发,以JNDI技术连接访问数据库。
3.1 使用Servlet实现电子书店用户认证
用户输入用户名和密码进行用户认证,如果用户名或密码错误,返回到登录页面login.jsp,否则显示验证成功页面success.jsp,Servlet主要代码如下所示:
…
public class AuthenticationServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName=request.getParameter("userName");
String userPass=request.getParameter("userPass");
if (userName == "accp" && userPass == "123")
response.sendRedirect("success.jsp");
else
response.sendRedirect("login.jsp ");
}
}
…
3.2 使用JSTL中update标签进行数据更新应用
使用带参数的update标签设置数据源,设置SQL语句,param标签的功能是用来设置相关参数,数据库名称为“books”。主要代码如下所示:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%〉
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%〉
<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName= books"
user="sa" password="sa" var="conn"/〉
<sql:update var="order" dataSource="${conn}"〉
insert into BookOrder(username,zipcode,phone,creditcard,total)
values(?,?,?,?,?)
<sql:param value='${param["username"]}'/〉<sql:param value='${param["zipcode"]}'/〉<sql:param value='${param["phone"]}'/〉
<sql:param value='${param["creditcard"]}'/〉
<sql:param value='${100}'/〉
</sql:update〉
3.3 使用JNDI获取连接数据库对象
除了编写代码外,还要进行JNDI配置,主要包括Tomcat的conf/context.xml中的配置、加入数据库驱动文件、应用程序的web.xml文件的配置等。主要代码如下所示:
…
public List getTitles() {
try {
Context ic = new InitialContext();
DataSource source
=(DataSource)ic.lookup("java:comp/env/jdbc/books");
Connection connection = source.getConnection();
titlesQuery = connection.prepareStatement("SELECT * FROM titles ");
ResultSet results = titlesQuery.executeQuery();
}
…
购物车的实现是该项目的核心,根据MVC设计模式进行购物车设计,主要包括3个部分:1.购物车中对象的设计;2.编写Servlet实现添加书籍到购物车;3.编写JSP实现查看购物车的书籍列表。
4.1 购物车中对象的设计
首先设计MVC中的模型,购物车中的对象主要包括购买的书籍本身信息和购买数量,将两项属性封装为名为CartItemBean的模型JavaBean,主要代码如下所示:
…
public class CartItemBean implements Serializable {
private BookBean book;
private int quantity;
public CartItemBean(BookBean bookToAdd, int number)
{
book = bookToAdd;
quantity = number;
}
public BookBean getBook() {
return book;
}
public void setQuantity(int number) {
quantity = number;
}
public int getQuantity() {
return quantity;
}
}
4.2 编写Servlet实现添加书籍到购物车
购物车Servlet功能是根据客户请求,实现添加书籍到购物车。首先获得session对象,并从session中取出BookBean对象,然后创建HashMap对象,并添加一个条目到Map中。…
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(false);
RequestDispatcher dispatcher;
if (session == null) {
dispatcher = request.getRequestDispatcher("/../books.jsp");
dispatcher.forward(request, response);
}
Map cart = (Map) session.getAttribute("cart");
BookBean book = (BookBean) session.getAttribute("bookToAdd");
if (cart == null) {
cart = new HashMap();
session.setAttribute("cart", cart);
}
CartItemBean cartItem = (CartItemBean) cart.get(book.getISBN());
if (cartItem != null)
cartItem.setQuantity(cartItem.getQuantity() + 1); else
cart.put(book.getISBN(), new CartItem-Bean(book, 1));
dispatcher = re
quest.getRequestDispatcher("/../viewCart.jsp");
dispatcher.forward(request, response);
}
…
4.3 编写JSP实现查看购物车的书籍列表
Servlet根据数据处理的结果,通过MVC中视图JSP,向客户显示模型数据,显示购物车内商品。显示购物车内书籍的JSP页面主要代码如下所示:
…
Map cart = (Map) session.getAttribute("cart");
Set cartItems = cart.keySet();
Object[ ] isbn = cartItems.toArray();
BookBean book;
int i = 0;
while (i < isbn.length) {
cartItem = (CartItemBean)
cart.get((String)isbn[i]);
book = cartItem.getBook();
i++;
}
系统基于MVC模式,采用Tomcat作为应用服务器,使用JNDI技术获取连接对象访问数据库,根据企业需求分析,进行系统功能结构设计,对系统所使用的开发技术进行举例,完成系统核心—购物车的实现,详尽介绍了基于Java EE技术完成网上书店的设计与开发方法。系统能够提供书籍展示、书籍详情、购物车、购物结算、用户认证注册等功能,且具有访问速度快,安全可靠,易于维护和管理的特点。
[1] 鲍振军,赵武,荣先奎.利用JavaEE构建创新型企业管理系统[J].机械设计与制造.2011,(2):229-233.
[2] 徐东风,曹维,廖俊杰.基于MVC模式的实验室仪器管理系统设计[J].实验室研究与探索.2010,29(8):101-104.
[3] 陈俊杰,赵春胜,高静.基于JavaEE架构的可定制审计系统的设计与实现[J].内蒙古农业大学学报(自然科学版).2012,33(4):37-40.
[4] 靳大尉,赵成,陈刚.统一权限管理下的Web应用管理平台[J].计算机应用.2013,33(s2):305-306,311.
[5] 张海营.基于物联网的图书馆馆藏推荐服务平台构建[J].图书馆杂志.2013,(12):33-37.
[6] 刘冰,李正凡.基于Struts扩展框架的Web应用研究[J].计算机应用.2008,28(10):221-224.
Design and Implementation of Online Bookstore Based on MVC Model and Java EE Technology
Xue Qian
(Shaanxi College of Communication Technology, Xi’an 710018, China)
Business service has become a modern enterprise indispensable service. Online bookstore is a kind of electronic com-merce. Compared with the traditional storefront bookstore, online bookstore’s mode of operation and sales channels shows many advantages, so we design and realize the online bookstore system. For the sake of program maintainability and scalability, combined with the characteristics of online trading system, this paper adopts MVC design pattern and uses Java EE technology which is suitable for enterprise application to carry on the project. According to the analysis of business needs, the system function structure is designed. Design and development method of online bookstore is introduced in great detail for application system development technology and shopping cart implementation.
MVC Pattern; Java EE Technology; Online Bookstore; Shopping Cart; JSTL; JNDI Technology
TP311
A
2014.07.20)
国家自然科学青年基金项目(41102107)
薛 倩(1978-)女,河南焦作,陕西交通职业技术学院,讲师,工学硕士,研究方向:交通信息工程、图形处理与模式识别,西安,710018
1007-757X(2014)08-0014-04