中图分类号:TP399 文献标识码:A 文章编号:1003-908201-0004-01

中图分类号:TP393 文献标识码:A 文章编号:1009-304411-0282-02

一、概念

MVC
把应用程序分成三个部分,即模型、视图、控制器,每个部分执行自己的任务。
模型是应用程序的主体部分,模型代表业务数据和业务逻辑。一个模型能为多个视图提供数据,从而提高了代码的重用性。
视图只负责与用户交互,不进行实际的业务处理。
控制器接收请求并决定调用哪个模型组件去处理请求,然后决定调用哪个视图来显示模型返回的数据。

一、引言

现在,人们的生活已经离不开移动互联网,移动设备也经成为人们必不可少的生活用品。
Android是由Google公司和开放手机联盟领导及开发的,是一种基于Linux的自由及开放源代码的操作系统,主要使用在智能手机和平板电脑等移动设备上。Android平台最著名的一点就是它的开放性,开发的平台对任何移动终端厂商都没有限制,允许任何移动终端厂商加入到Android
联盟中来,这样一来,平台可以拥有更多的开发者,随着用户和应用的逐渐增加,平台很快从新手走向成熟。随着全球经济一体化的逐步发展和深入,对于传统商品基于Android
移动电子商务平台已成为必不可少的了。目前,电子商务平台可以完成从最基本的信息展示、在线客户服务、在线网站管理等功能,在国际互联网上商务功能能够实现多样化,可以说,传统商品几乎所有的功能都可以在互联网上进行电子商务的高效运作,虽然与传统商品的规模有所不同,但是现在是一个互联网与电子商务快速发展的时代,它将成为改变现存企业竞争的模式的有力帮手,让企业在以后的发展空间能够在低成本的同时拥有高效率[1]。

二、MVC 简单示例

假设现在有一个数据库,里面有一张记录了学生信息的表,我们需要使用 MVC
的设计思想编写程序将所有信息显示出来。

永利澳门官网 1

学生信息数据表.png

完整的程序应该有这样的功能:
在首个 jsp 界面点击 “显示信息” 的链接后,调用 Servlet 的 doGet()
方法,doGet()会调用 DAO(负责操作数据库的类)
中的方法获取所有学生的信息,最后显示在视图中。
这里的 Servlet 就是控制器,DAO 就是模型,界面就是视图。

目前,浏览界面的多语言显示有两种解决方式。静态:就是为每种语言分别准备一套页面文件,要么通过文件后缀名来区分不同语言,要么通过子目录来区分不同语言[1]。动态:所有页面文件都是动态页面文件而不是静态页面文件,在需要输出语言文字的地方统一采用语言变量来表示,这些语言变量可以根据用户选择不同的语言赋予不同的值,从而能够实现在不同的语言环境下输出不同的文字[2]。但是动态多语言页面技术的服务器处理时间和调用数据库的时间开销很大,并且安全性不好,容易受到攻击,维护相当困难,可拓展性不好[3]。因此,本平台采用静态多语言技术实现Android平台的民族语言显示。

1 基于Android 移动电子商务平台的设计

1. 首页 jsp

首页的 jsp
页面只负责提供一个超链接供用户跳转到信息显示页面,只要在<body>中加入一个超链接即可。

<body>
    <a href="listAllServlet">List All Students</a>
</body>

我们看到,超链接会让我们跳转到 listAllServlet 这个 Servlet 程序中,而
Servlet 作为控制器,又将怎么连接模型和试图呢?

本文在满足电子商务平台的网络通信协议规范的基础上,设计并实现了基于Android的民族特色农产品电子商务平台,详细的介绍基于Android的民族特色农产品电子商务平台的设计和实现过程,并详细描述了数据库设计方法和多语言平台实现技术。最后详细阐述了每个模块的功能及运行原理。

本系统是在满足电子商务平台的网络通信协议规范的前提下,用于Android移动电子设备上,功能分为:用户管理、资讯查询、商品买卖等等,让电子商务交易能够在移动设备上得以运用,让电子商务能够更加方便快捷。本系统共有前台和后台两个模块。前台主要以产品浏览模块和购物模块两个为主,产品浏览模块主要有产品全局浏览,产品列表,产品内容,评论等功能。购物模块相当于一个购物车,包括选取产品,会员注册,登录等功能。后台管理模块总共有6个管理模块,分别是:商品管理、公告管理、订单管理、用户管理、系统管理以及管理员管理模块。以下是几个管理模块的主要说明:1)
商品模块:商品分类搜索查询,商品浏览,商品收藏,商品购买;2)
购物车模块:用户可先把商品放入购物车再点击购买;3) 结算模块:结算,
提交订单;4)
用户模块:用户注册,账号登录,账号验证,订单管理,个人信息修改;5)
管理员模块:管理员账号登录,账号验证,密码修改,登录验证成功后方可进行网站后台管理工作;6)
商品管理模块:商品发布,商品删除,商品分类;7)
订单管理:订单的删除,确认订单信息,改变订单状态。

2. listAllServlet

在 Eclipse 中新建一个 Servlet,会生成如下所示的代码。

@WebServlet("/listAllServlet")
public class ListAllServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public ListAllServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理 get 请求
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理 post 请求
        doGet(request, response);
    }
}

Servlet 会在 doGet() 方法中通过 DAO 类获取到数据库的信息,在 doGet()
中没有与数据库交互的逻辑,它只是调用了 DAO 类的方法,至于 DAO
中是怎么实现的,Servlet 并不关心。
获取到数据后,Servlet 将请求转发给另一个 jsp
页面来显示数据(之前查询到的数据都会放入请求中以便页面获取)。

二、系统平台框架设计

2 基于Android 移动电子商务平台的实现

那么什么是请求的转发呢?

请求的转发就是,客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个
servlet 执行完之后,调用 request.getRequestDispacther()
方法,把请求转发给指定的 jsp
页面,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此
servlet 和 jsp 共享的是同一个 request。

与请求的转发相类似的还有请求的重定向,在重定向过程中,客户发送一个请求到服务器,服务器匹配
servlet,这和请求转发一样。servlet
处理完之后调用了response.sendRedirect()
,响应行告诉客户端你必须再发一个请求去访问 jsp
页面。这里两个请求互不干扰,相互独立。
也就是说,如果目标的响应页面不需要从 request
中读取任何值,则可以使用请求的重定向,还可以防止表单的重复提交。

// 请求转发
request.getRequestDispatcher("/student.jsp").forward(request, response);

//请求的重定向
response.sendRedirect( "/student_list.jsp");

观察上面的代码,我们发现请求转发和请求的重定向对地址的格式是不一样的,请求转发中的
“/” 代表当前 web 应用;请求的重定向中的 “/”
代表当前站点,这里就是8080端口。

基于Android的民族特色农产品电子商务平台设计主要包含两大部分:Android客户端界面设计数据库服务器设计。

2.1 平台主要技术

3. StudentDao

我们已经知道数据库中的信息是怎么存放的了,现在需要先定义一个 Student
实体类来在内存中存放信息。

public class Student {

    private String img_path;
    private Integer flow_id;
    private Integer type;
    private String id_card;
    private String student_name;
    private Integer grade;

    public Student(String img_path, Integer flow_id, Integer type, String id_card, String student_name, Integer grade) {
        super();
        this.img_path = img_path;
        this.flow_id = flow_id;
        this.type = type;
        this.id_card = id_card;
        this.student_name = student_name;
        this.grade = grade;
    }

    public Student() {
        super();
    }

    public String getImg_path() {
        return img_path;
    }

    public void setImg_path(String img_path) {
        this.img_path = img_path;
    }

    public Integer getFlow_id() {
        return flow_id;
    }

    public void setFlow_id(Integer flow_id) {
        this.flow_id = flow_id;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public String getId_card() {
        return id_card;
    }

    public void setId_card(String id_card) {
        this.id_card = id_card;
    }

    public String getStudent_name() {
        return student_name;
    }

    public void setStudent_name(String student_name) {
        this.student_name = student_name;
    }

    public Integer getGrade() {
        return grade;
    }

    public void setGrade(Integer grade) {
        this.grade = grade;
    }

    @Override
    public String toString() {
        return "Student [img_path=" + img_path + ", flow_id=" + flow_id + ", type=" + type + ", id_card=" + id_card
                + ", student_name=" + student_name + ", grade=" + grade + "]";
    }

}

之后是与数据库交互的 DAO 类,这里的 DAO
类使用了原生的方式连接和操作数据库。

public class StudentDao {

    /**
     * 获取所有的学生信息
     * @return 学生列表
     */
    public List<Student> getAllStudent() {
        List<Student> list = new ArrayList<>();
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            String driverClass = "com.mysql.jdbc.Driver"; // 驱动程序名
            String url = "jdbc:mysql:///student"; // url 指向要访问的数据库名
            String user = "root";
            String password = "root";
            // 加载驱动程序
            Class.forName(driverClass);
            // 获取连接
            connection = DriverManager.getConnection(url, user, password);
            String sql = "select img_path, flow_id, type, id_card, student_name, grade "
                    + "from examstudent";
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();

            // 遍历结果集
            while(resultSet.next()) {
                String img_path = resultSet.getString(1);
                int flow_id = resultSet.getInt(2);
                int type = resultSet.getInt(3);
                String id_card = resultSet.getString(4);
                String student_name = resultSet.getString(5);
                int grade = resultSet.getInt(6);
                // 将数据库中的每条信息添加到 List<Student> 中
                Student student = new Student(img_path, flow_id, type, id_card, student_name, grade);
                list.add(student);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        /**
         * 将所有的连接关闭
         */
        finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return list;
    }
}

1.Android客户端界面设计

JSON 是一种以数据交换的轻量级格式。它基于JavaScript的一个子集。JSON
采用完全独立的文本格式,但是也使用了类似于C
语言家族的习惯。这些独特的语言形式让JSON成为理想的数据交换语言。不仅方便编辑人员的阅读和编写,同时也易于机器解析和生成。

4. 转发请求到 jsp 前端

在有了 DAO 类之后,我们就能在 Servlet 中与数据库交互了。
改写 doGet() 方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        StudentDao dao = new StudentDao();
        List<Student> list = dao.getAllStudent();
        /**
         * 如果前端是 jsp 页面
         * 将请求转发到 student.jsp 页面进行显示
         */
        request.setAttribute("students", list); // 将信息保存在请求中
        request.getRequestDispatcher("/students.jsp").forward(request, response);
    }

从代码中可以发现,我们将从数据获取的 list 数据放入了请求中,再转发给了
students.jsp,之后我们就可以在 jsp
中将学生信息通过列表的方式显示出来。
students.jsp 代码如下,我们先从 Servlet
转发过来的请求中取出我们需要的数据,然后对数据进行遍历,使用表格的形式将其打印出来。

<%@page import="com.lister.entity.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <% List<Student> students = (List<Student>)request.getAttribute("students"); %>

    <table border = "1" cellpadding = "10" cellspacing = "0">
        <tr>
            <td>flow_id</td>
            <td>type</td>
            <td>name</td>
            <td>id_card</td>
            <td>grade</td>
        </tr>
        <% for (Student student : students) { %>
            <tr>
                <td><%=student.getFlow_id() %></td>
                <td><%=student.getType() %></td>
                <td><%=student.getStudent_name() %></td>
                <td><%=student.getId_card() %></td>
                <td><%=student.getGrade() %></td>
            </tr>
        <% } %>
    </table>

</body>
</html>

最终在浏览器显示的结果如下:

永利澳门官网 2

学生信息列表.png

android客户端主要功能包含:注册界面、登陆界面、商品展示界面,购物车界面。注册界面是用户进行网络交易的第一步,主要用于注册个人用户,验证个人信息,方便下一次直接登陆。登陆界面主要用于检测用户信息合法性,为用户提供找回密码的功能,同时为用户提供切换语言功能,方便少数民族地区的人群使用。商品展示界面主要用于显示特色农产品信息,主要包括农产品名称、价格、参考图片等等。购物车界面主要实现添加购物车,删除购物车功能,可以调用商品展示模块向用户展示商品详情,可跳转到支付界面并与第三方对接完成支付功能。平台采用ListView设计显示界面,实现了界面的滚动显示,用户使用起来国家的方便。每一张图片或产品名称都设计了超链接,单机可以加入购物车进行第三方在线支付。

Http用于传送www方式的数据。www 基于客户端/ 服务器模型,由Web 浏览器和Web
服务器构成,两者之间采用Http进行通信。Http 协议采用请求/
响应模型,是基于TCP/IP协议之上的协议,是Web
浏览器和Web服务器之间的应用层协议,是通用的、无状态的面向对象的协议[2]。

5. 服务器与手机端通信的情况

如果要将信息显示在手机端,那么此时手机端就将充当前端的角色。目前服务器与手机端通信文本一般使用
json 格式,这里我们也使用 json 与Android 手机端通信。
首先导入 Gson jar 包,再次改写 doGet() 方法,使用 Gson 的方法将
List<Student> 转化成 json 字符串并打印出来。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        StudentDao dao = new StudentDao();
        List<Student> list = dao.getAllStudent();

        /**
         * 如果前端是 jsp 页面
         * 将请求转发到 student.jsp 页面进行显示
         */
//      request.setAttribute("students", list);
//      request.getRequestDispatcher("/students.jsp").forward(request, response);

        /**
         * 如果前端是手机端
         * 使用 response.getWriter() 将信息打印出来
         */
        PrintWriter out = response.getWriter();
        Gson gson = new Gson();
        String json = gson.toJson(list);
        out.print(json);
    }

这时如果在浏览器中请求数据,得到的会是 json 字符串,如下所示:
每个 json 对象的第一个子段为图像的网址,供 Android 加载图片所用。

永利澳门官网 3

json信息.png

在 Android 端解析 json
之后加载数据,可以得到如下的列表,代码就不详细介绍了。

永利澳门官网 4

Android 端显示.png

2.数据库服务器

MVC 全名是Model View Controller,是模型 -视图 -控制器
的缩写,用一种业务逻辑和数据显式分离的方法组织代码,是软件设计的典范。主要是将业务逻辑被聚集到一个部件里面,在界面和用户数据被相互改进和个性化定制的同时而不用重新编写业务逻辑。M
V C
独特地发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

数据库服务器设计主要包含本地数据库SQLLite设计和网络数据库MySQL设计。本地数据库主要用于存储客户端缓存信息数据,网络数据库主要用于存储用户,产品和产品交易等数据。

2.2 基于Android 移动电子商务平台数据库

三、系?y技术实现

E – R 方法是“实体-
联系方法”的简称。它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型

1.技术路线方案

2.3 客户端核心代码

视图层:显示用户界面,直接与用户接触,响应用户的操作并传送操作事件到视图控制层。在此层上采用XML技术完成APP
UI界面的设计。

客户端获取数据客户端采用了Android 的一些开源库android-async-http
来作为客户端来实现数据调用。android-async-http
开源框架方便操作,也能够使我们轻松地获取网络数据或者向服务器发送数据。Android-async-http
这个框架封装了各种类型的请求数据格式。例如请求string、json、json
数组等对象。客户端详情页右侧小导航屏幕固定跟随jquery 代码://
获取要定位元素距离浏览器顶部的距离var navH = $.offset.top;//
滚动条事件$.scroll{// 获取滚动条的滑动距离var scroH = $.scrollTop;//
滚动条的滑动距离大于等于定位元素距离浏览器顶部的距离,就固定,反之就不固定f{
$.css;}elseif{$.css;} })代码的结构是:先获取到类名为detail_nav
的元素到屏幕顶部的距离,保存到参数n a v H
中,然后监听鼠标滚动的距离,如果滚动的距离大于等于n a v
H,则自动脱离文本流,定位方式由static 变为fixed,否则定位方式为static。

视图控制层:包含Activity与Fragment组件,Activity与Fragment接收视图层操作事件,进行简单的逻辑判断后,将请求通过业务逻辑代理转发到具体的业务逻辑类中进行处理。视图控制层可以接收来自业务层的业务请求并作出响应。

2.4 数据服务接口

业务逻辑层:采用代理模式,处理来自视图层的请求命令并将数据处理结果返回到视图控制层。可与数据层,网络层进行数据交互。

数据服务接口接口是服务器和移动实现数据通讯的通道,这里的移动终端不分系统平台,IOS、Android、Windows
Phone
等都可以无差别地通过接口和服务器进行数据交互。平台使用PHPMVC作为基础框架,接口也相应地使用了MVC
的控制器作为接口的载体。由MVC 自带的JSON
框架来对数据进行序列化数据进行传输。支付接口:基于HTTP,支持GET 和POST
两种提交方式,字符编码仅支持GB2312,用于浏览器和WEB服务之间的通讯[3]。请求信息采用md5
签名保证数据不被篡改。每一个交易都由一个目的U R L
和相应参数组成。支付网关调用商户端CGI
程序的位置和程序名称由商户在支付请求接口中return_url
字段定义。$return_url
是提供给支付网关和商户系统的页面,这个页面为后台调用,是不会被用户看到的,将支付结果发送到这个页面,商家可以在这个页面更进一些操作根据这个支付结果。

信息系统层:包含数据层和网络层,客户端数据访问分为四种:网络数据,文件,sqlite数据库,SharedRreferences。网络数据通过网络组件向服务端发送网络请求获取,有缓存机制,文件主要用来存储图片资源,sqlite数据库存储一些本地使用的数据。

3 基于Android 移动电子商务平台的展望

2.Android客户端与数据库服务器交互技术

通过对基于Android
移动电子商务平台的研究,对未来的互联网技术和移动商务技术做出了以下两点展望:1)速度能够更快,功能更强大。因为移动通讯技术和移动终端硬软件都会得到不断的提高,智能平台的处理也会日益提升。未来,移动电子商务平台会更加稳定可靠,对人们处理日常工作和事物能够有更大的帮助。2)业务方面能够更加完善。因为互联网是一个新兴发展的业务,随着时间的不断推移,移动互联网一定会增加很多新的业务功能,范围将不停扩大。如:移动支付、移动广告、移动监控等等都能够快速发展,帮助人们提高工作效率,改变生活。

在解析过程中首先以字符串格式转换JavaScript对象中的一组数据,
然后这个字符串可以在函数之间传递,
或者在异步交互式程序中将字符串从Android客户机传递给服务器端程序。用此技术实现了Android客户端与数据库服务器端的数据交互。

4 结束语

数据库服务器端与Android客户端的数据交互流程:首先由Http协议将客户端的数据请求发送到Web服务器,
然后服务器端将数据请求封装成JSON格式,
再通过Http协议将解析结果返回至Android客户端,
客户端将接收到的数据进行解析后以适当的格式显示在界面上。

移动通信和互联网是现在社会发展最快的业务,移动互联网正在影响人们的生活方式,随着4G
时代的到来以及移动购物用户体验的不断改善,人们对移动互联网的需求将会越来越大。移动端购物对PC
端购物,乃至传统的购物行为都会造成很大的影响,这种影响不仅表现在对PC
端与传统购物市场的争夺,也会对两个市场起到拉动作用,开发出新的客户和市场空间。所以,电商企业以及传统企业都要把握好机会,不断优化移动端购物给人们带来的体验,才能在未来得到更好地发展。

3.支付服务技术

在本地Android操作系统上安装安全支付服务组件,该组件中,
MobileSecurePayer 类封装了对安全支付的调用;MobileSecurePayHelper
类实现安全支付插件的检测、更新、下载和安装;PartnerConfig类实现了商户账户信息配置;ResultChecker类通过AlixPay返回结果的解析处理。

四、数据库设计

SQLite是一款开源的、轻型的嵌入式数据库,是遵守ACID的关系型数据库管理系统,是一款拥有支持事务处理、零配置、自包性、占用资源低等优点的SQL数据库引擎。本系统中,SQLite主要用于本地客户端数据的存储。通过创建一个帮助类SQLiteOpenHelper,调用getReadableDatebase方法来初始化SQLite数据库,然后通过SQLiteDatebase执行SQL语句空间数据表格。首先通过DriverManager类,调用registerDriver)方法注册数据库驱动,调用getConnection方法连接MySQL数据库,在通过Connection类调用createStatement方法获取传输器对象,利用传输器对象执行SQL语句,创建products数据表,包含5个字段,分别是商品编号、商品英文名称、商品藏文名称、价格、图片。

五、结束语

本文研究了当今电子商务Android客户端的设计,针对目前我国支持名族语言显示的Android应用程序不能满足少数民族用户网上购物的现状,实现了电子商务Android客户端名族语言的显示。通过该平台,中文用户、少数民族用户都完成了网上购物流程,在一定程度上解决了少数民族用户购物难的难题。

相关文章