匡蕾 刘进锋
摘要:服务器端编程方式JSP和Servlet已经成为当今开发电子商务应用程序的首选方式。在应用程序中的一些复杂问题例如缓存问题、持久性问题和系统响应速度问题等可以借助MVC(Model-view-Controller)架构加以缓解。该文在分析JSP,Servlet和MVC基本原理和交互过程的基础上,以电子商务中的模块为例,利用Servlet+JSP实现模块设计,MVC架构实现展示层和逻辑层分离,减少了模块与模块之间的耦合性,在某一模块功能发生变化的时候不会迫使其他代码改变。
关键词:电子商务;Servlet;JSP;MVC框架
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)33-0265-03
1 Web开发技术概述
Web资源不再是静态的更多的是动态的,当请求Web资源时,必须在带有请求参数的服务器上运行程序并生成相应地内容与正在与系统通信的用户进行持续交互,这会产生大量的数据。这些数据的复杂性可以借助框架加以缓解,如果没有框架程序员的大部分时间都花在编码标准服务上,如缓存,持久性和安全性。MVC三层架构模型的一些功能是能够轻松存储访问应用程序的数据、保证数据的完整性、会话管理、用户认证等操作。而服务器端编程语言有ASP.NET、JSP+Servlet,其主要功能都是向网站添加动态功能。JSP+Servlet技术是J2EE ( TM)平台的基础,它提供Web客户端和服务器端之间的连接,并且分离了Java代码和HTML,对于构建交互式Web应用程序是非常好的选择,并且已经成为当今最流行的企业应用程序服务器端编程方式。而ASP则在小型站点中占主导地位。
2 MVC架构介绍
MVC架构把交互系统组件分为模型、视图、控制器三种:处理应用程序数据的模型(Service层)、呈现用户界面的视图(Web层)以及处理用户输入的控件(DAO层)。
1)业务逻辑层是由JavaBean、Servlet和推荐系统组成,JavaBean管理客户端和服务器上运行的数据流,并调用相对应的方法来封装数据。Servlet从客户端接收数据、处理数据并将其发送到数据访问层进行存储,业务逻辑层是系统的至关重要的一部分,拥有推荐系统的核心代码。
2)表示层是Web层方面的开发,Web层由html+css+js+bootstrap+JSP组成,首先由html+css+js搭建静态页面,接着JSP校验数据并把用户信息传给业务逻辑层。业务逻辑层的Service层将数据处理完成后呈现给用户并观察业务逻辑层进行更新。Web层是用户能看到的最直观的一层。
3)数据访问层是由大量的接口来实现访问/操作数据的地方,实现处理数据的增删改查,并把所有操作封装成接口返回一个结果集供业务逻辑层调用,安全性较高。
采用MVC设计思想完成三层体系结构实现展示层和逻辑层分离,使得一个模型可以具有多个显示视图,当模型數据发生变化,控制器都会通知所有的视图显示的更新。同时实现了数据层与表示层的分离,在需要替换或更新某一模块时不需要改动其他模块。这样一方面有助于设计在需求分析改变时可重复使用,减少再次设计的成本。另一方面减少类与类之间的耦合性,在某一模块功能发生变化的时候不会迫使其他模块代码改变。
3 Servlet交互过程
Servlet 是由Sun公司提出的动态Web资源服务器开发技术,Servlet通过HTTP协议与Web浏览器进行信息交互,交互完成后Servlet将生成响应返回给Web服务器。首先浏览器通过用户输入的URL访问Web服务器的资源,Web服务器在收到HTTP请求后进行分析:
1)分析host请求当前请求是由哪台虚拟主机发出的,如果没有host请求则访问缺省虚拟主机。
2)分析GET请求头要访问的是该虚拟主机的哪个Web资源。
3)在Web.xml中找到该Web资源的虚拟路径,访问该虚拟路径对应Servlet。
使用这个模型可以同时处理很多请求,而只有在第一次请求Servlet时会创建一个新的Servlet实例,此后无需实例化任何新对象,创建出Servlet对象会一直驻留在内存中为该Servlet访问服务。
后续访问Servlet中的service(request,response)方法之前,确保Servlet中的初始化方法init()和代表请求的request对象、代表响应的response对象已经创建完成,request对象封装着请求头和请求体,但response对象此时是空的。Web浏览器有需要打给服务器的内容在放在response对象中的响应头和响应体中,接着服务器取出响应头和响应体中的所有内容并组织成HTTP响应消息打给浏览器。浏览器解读HTTP响应,根据HTTP响应的内容在界面上做一个展示,核心过程如图1所示。
4 JSP技术分析
4.1 JSP技术简介
JSP+Servlet技术是J2EE (TM)平台的基础,它提供Web客户端和服务器端程序之间的连接。Servlet是在Java中嵌套HTML其本质上是一段Java程序,获得了Java语言的所有优势包括可移植性、可重用性和崩溃保护。JSP是Servlet技术的服务器端扩展,JSP引擎包含在Servlet引擎中,程序执行之前JSP引擎将JSP页面转换/编译为Servlet。目前JSP技术已成为创建动态Web网页的主流开发技术之一,具有分离动态和静态内容、支持脚本和标签、跨平台、可使用重用组件和标签的优点。
1)分离动态和静态内容:JSP页面将应用程序逻辑与内容呈现分开,带给浏览器呈现时又可以完美结合,使设计人员在不更改底层动态内容的情况下更改整体页面布局,灵活性高。
2)支持脚本和标签:JSP技术支持基于Java脚本元素和标签,标签允许以特定的形式将任意合法的Java代码进行封装。同时也可以使用自定义标签库,实现在不嵌套Java语言的前提下仍可以运行使用服务器端Java的功能。脚本可以在网页中展示丰富的多媒体动态效果,另外JSP也可支持部分非基于Java编程的脚本语言。
3)跨平台:JSP是完全独立于平台的,无论是在Web页面、Web服务器还是底层服务器都可创建JSP页面。运行环境也是独立的,Web服务器或启用Web的应用程序服务器上都可运行,并从任何浏览器访问。
4)重用组件和标签:组件可以用于组件开发和页面组合,这为程序的编写节省了大量的时间,同时为用户提供了Java和其他脚本语言的跨平台功能和灵活性。
4.2 JSP执行过程
当一个JSP页面被客户端访问时,它被的JSP引擎解析、验证、传译成一个Servlet并最终执行,其中传译包括将自定义标签转换为Java代码并设置脚本变量的过程。传译成Servlet后产生一个发送给客户端浏览器的响应。传译的过程分为三步如图2所示:
1)JSP引擎将来自客户端的请求request传给JSP页面,首次传译时调用JSPInit()方法来准备页面,传译阶段通常会创建一个类去实现Javax.Servlet.Servlet接口来将JSP页面变成Servlet源文件。
2)接着将Servlet源程序文件翻译成相应的.class文件,装载执行该.class 文件。
3)JSP页面被传译成Servlet之后,JSP页面根据给定HTTP的协议创建一个响应对象或一些其他的对象来响应客户端。同时,JSP引擎可以随时调用JSPDestroy()方法来回收JSP页面所使用的所有资源结束其生命,这与Servlets的生命周期是一样的。
5 MVC架构下JSP+Servlet实现
MVC设计思想完成Web应用程序开发时,JavaBean和Servlet组成了业务逻辑层(Service层),JavaBean管理客户端和服务器上运行的数据流,并调用相对应的方法来封装数据,Servlet从客户端接收数据、处理数据并将其发送到数据访问层进行存储。业务逻辑层是系统的至关重要的一部分,上有表现层(Web层)下有数据访问层(DAO层),如需改变视图则改变表示层,如需改变数据则改变数据访问层。JSP是Web层方面的开发,Web层将Service层数据呈现给用户,并观察Service层进行更新,是用户能看到的最直观的一层。数据访问层(DAO层)是由大量的接口来实现访问/操作数据的地方,处理数据的增删改查并把所有操作封装成接口返回一个结果集供业务逻辑层调用,安全性较高,维护起来也更加方便。图3展示了在线商城系统的基于 Jsp+Servlet+Java Bean 的J2EE 中 MVC 模式的实现过程,整个框架的作用过程为:①浏览器的请求被其中一个JSP接收,JSP页面向程序流转对应的Servlet发送请求。②该Servlet与Java Bean进行通信以访问信息。③Java Bean负责信息处理,并返回处理结果到Servlet;④请求处理完成后,控制流程将转移到的JSP页面。
以图4订单模块为例,当用户点击购买的按钮时访问MVC表示层的ShopServlet中的showIndent方法,并且带着用户想要购买的商品的id,showIndent方法列出订单的基本信息,要求用户提供购买数量和支付方式如图4,用户点击购买后把商品存到request域中,重定向到表示层,表示层的ShopServlet中go方法进行四步操作:
1)表示层从request域中拿出订单号+下单用户名+下单图书+下单时间+评论等需要插入indent表中的值。其中订单金额不能从域中直接获取到,需要go方法根据订单单价*数量doublesum= Double.valueOf(bookPrice)*Integer.valueOf(num);实时计算出来。
2)把订单号+下单用户名+下单图书+下单时间+评论+订单金额这些信息,调用表示层中的IndentService方法插入到数据库,并从book表中扣除相对应的库存数量。
3)IndentService调用数据访问层的IndentDao的方法,对数据库的Indent表和book表进行操作,且采用事务管理的方式,让两步操作处在同一个事务里面,事务具有原子性不可分割要么同时完成要么同时不完成,有一步操作中断全部事务回滚。
4)重定向回表示层。理想情况下用户不应该直接访问JSP页面,请求直接发送到Servlet。该Servlet负责处理请求的实际处理,然后将该控制转移到适当的JSP页面。 JSP页面然后将显示对用户的响应,随后的请求在用户填写表单并单击提交按钮之后再次被引导到一个Servlet进行处理。系统的用户根本不应该知道任何JSP页面的存在。
6 结束语
本文采用 JSP+Servlet的MVC三层架构技术,实现了视图层、逻辑层、数据层的分离,使得系统具有良好的扩展性,减少了类与类之间的耦合性。Servlet可访问调用HTTP的库,对于构建交互式Web应用程序是非常好的选择。JSP具有分离动态和静态内容,支持脚本和标签,跨平台,可使用重用组件和标签的优点。因此,有利于大型项目开发管理。
参考文献:
[1] 孙卫琴. Tomcat 与 Java Web 开发技术详解[M].北京:电子工业出版社,2010.
[2] 王文新.基于模型-视图-控制器的 Web 应用程序框架设计[J].信息与电子工程,2009,7(4):358-360.
[3] 王栋.一种简易 Web 服务器的设计与实现[J].電子科技,2016,29(1) : 121-123.
[4] 李莉,高峰.WEB Service 技术综述[J]. 信息系统工程,2014(1) : 36.
[5] 胡辉. IOS 环境下使用 MVC 模式进行 APP 开发的设计思路探索[J].数字技术与应用,2015(6) : 204-206.
[6] 梁弼.基于MVC 的高校科研成果管理系统的设计与实现[J].计算机技术与发展,2011,21( 10) : 161 -163.
[7] 冯玉萍. 基于MVC的设计与开发[J].科技风,2010(5):25.
[8] 张志瑜. 论述PHP实现MVC框架[J].科技视界,2016(13):218-219.
【通联编辑:代影】