登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 毕业论文 > 计算机类 > 计算机科学与技术 > 正文

基于移动端的城市道路环境监管系统--服务器端程序开发毕业论文

 2022-05-10 08:05  

论文总字数:20349字

摘 要

随社会经济的发展,城市化进程的迅速推进,人口不断涌进城市,城市规模不断扩大,由此带来了一系列问题,其中城市道路环境问题尤为突出。城市道路环境面临治理难的问题,仅仅依靠政府部门的治理已经远远跟不上步伐。因此需要发动市民的力量来治理城市道路环境。随着智能手机的普及,这一构想正在变成现实,基于城市道路环境改善APP的出现有利于让市民参与到城市的治理之中,提高治理的效率,让市民为城市建设贡献一份自己的力量。

本团队经过对此问题进行了详细的分析决定本系统采用C/S结构即客户端服务器结构,客户端基于安卓与IOS平台手机APP。服务器端为Java服务器。本文为服务器端程序,其主要负责接受客户端传来的相关信息,对相关信息进行处理,反馈给有关部门,为市民与相关机构建起一种交流的通道。本文主要针对Java服务器程序各种模块的设计与开发做了详尽的介绍,研究了Socket连接的方式,MySQL数据库连接,特性同时正对服务器程序中的关键技术做了深刻的探讨。

关键词:城市道路环境改善 Java Socket连接 MySQL数据库

ABSTRACT

With the development of social economy, the urbanization process advance rapidly and the population has been poured into the city, expanding the size of cities. It cause a series of problems, especially the problem of urban road and environment.It is very difficult to governance the problem of urban road and environment.It is above of the government’s ability to governance the problem.We need citizen’s help to solve the problems.With the popularity of smart phones,the idea is becoming a reality.The emergence of app about the governance of urban road environment make for the citizen taking part in the governance of city and contribute their own strength.

Our team decide use C/S structure to develop the system after detailed survey.Client based on Android and IOS platform .The server is developed by Java.The context is about the server,it is responsible for receiving information,dealing information and sending information.It build a channel for citizen and government.I research the socket and MYSQL,the context describe the design of the Java server in detail.

KEYWORDS:Improvement of urban road environment; Java socket connect; MYSQL database;

目 录

摘要 I

ABSTRACT II

第一章 绪论 1

1.1 课题背景及意义 1

1.2 项目介绍 2

1.3 本文主要研究工作 2

第二章 平台技术 4

2.1 Java NIO连接技术 4

2.2 Java 多线程技术 8

2.3 Java 线程池技术 10

2.4 数据库连接池技术 12

第三章 需求分析与部分模块设计 14

3.1系统需求分析 14

3.2 网络模块 16

3.3 数据处理模块 17

3.4 数据库模块设计 21

第四章 服务器程序主要代码 26

4.1Java NIO连接的主要代码 26

4.2 信息处理模块代码 27

4.3数据库连接池主要代码 28

第五章 程序测试及测试结果 32

5.1服务器开启测试 32

5.2 数据库连接池测试 32

5.3用户相关功能测试 33

5.4工作人员相关功能测试 36

5.5领导相关功能测试 37

第六章 总结与展望 39

6.1 本文工作总结 39

6.2 展望 39

绪论

本章主要介绍项目的开发背景,对整个项目进行总体性的介绍以及描述了本文主要的研究工作。本章分为3节,分别为课题背景,项目介绍和本文主要研究工作。

1.1 课题背景及意义

近年来中国经济迅速发展,城市化进程正以前所未有的速度快速推进,大量人口涌入城市造成城市的急剧膨胀,城市规模迅速扩大带来了一系列负效应,在这些问题中城市道路环境问题尤为突出。城市的道路环境问题如果仅依靠政府部门的治理已经远远满足不了城市环境治理的需求,而且面临治理效率低,开销大等问题,中国的城市道路环境面临严峻的考验。

在要改善城市环境,提高城市环境道路的治理效率方面,发动的市民的力量,让市民参与到城市的治理中是一个非常好的措施。发动市民参与城市道路环境的治理可以极大的减轻相关部门的压力,弥补治理部门在信息采集方面的的劣势。

随着智能手机的普及,让市民参与到城市的环境管理中正由构想变成了现实。借助智能手机的定位,拍照等强大功能,市民可以实时的向治理部门提供道路环境的相关信息。

借鉴移动网络社交平台的巨大成功,利用移动网络社交平台的成功经验,开发一款移动手机APP,让市民参与到城市的治理之中。通过专业的手机APP,市民可的随时向治理部门反应城市道路环境问题,治理部门通过对市民上传的信息的分析与处理可以及时的了解整个城市的道路环境状况,弥补自己在信息收集上的短处。借助市民的力量,管理部门可以迅速收集大量城市道路环境问题,工作人员可以快速赶到相关地点做出相应的处理,减轻治理部门的压力,提高治理效率。让城市环境变得更加美好。

1.2 项目介绍

本项目分为两大部分,其分别为客户端程序开发和服务器端程序开发。客户端为基于安卓和IOS平台的手机APP,客户端主要负责信息的采集,信息的上传和信息查看三大功能。服务器端的主要功能是进行信息接受,信息处理,信息存储,信息反馈,为市民和工作人员构建其交流的通道。

客户端:客户端那具有用户登录,用户注册,用户信息上传,用户查询反馈信息,信息再举报,工作人员登录,工作人员查看城市道路信息,工作人员对进行信息处理,领导登录查看统计信息等功能。用户的注册登录功能,工作人员登录和领导登录功能是使用者输入用户名和密码,客户端将用户输入的用户名和密码数据上传服务器,服务器端查询数据库查看用户是否已经注册,然后服务器传回来一个反馈信息以确定相关状态。用户信息上传功能为当用户处于已经登录状态的时候,用户向服务器端上传城市道路环境问题的相关信息,相关信息包括用户名,地点,经纬度,图片,信息说明五个部分。在用户上传完相关信息后会从服务器端收到反馈信息,标志是否上传成功等。用户查询反馈信息功能为用户处于登录状态的时候向服务器端发送请求,查看上传的城市道路环境问题是否已被处理,服务器会根据预定义好的应用层协议返回服务器的处理结果,然后客户端再根据预定义好的协议解析服务器端传回的信息并将相关信息在屏幕上展示给用户。用户工作人员信息交流功能为用户和工作人员对已处理的问题是否满意进行相关的交流。

服务器端:接受客户端传来的命令,根据预先定义好的协议对传来的数据进行解析,对信息进行相关的处理。主要分为用户注册,用户登录,城市道路环境信息的接收,查寻已经处理的用户信息并发送到客户端,接受客户端的对处理信息的反馈。工作人员进行登录,工作人员对用户上传的城道路信息的查看,工作人员对用户反馈的处理。

1.3 本文的主要研究工作

本系统采用传统C/S结构即客户端服务器的设计结构,本文是主要针对服务器端设计思路以及详细设计过程进行相关的说明。服务器端主要负责接收客户端的信息,对信息进行相关解析处理,主要研究在大量连接的情况下,保证服务器的高效与正确运行。具体研究内容如下:

  1. 网络模块的设计:服务器端程序应该具有较高,能同时处理多个客户端的请求,而服务器采用何种连接模式对服务器的性能有较大的影响。
  2. 对预先定义好的应用层协议进行解析:预先定义好应用层协议,客户端与服务器按照预先定义好协议进行数据的交流,服务器端要有能正确解析客户端发来命令的能力
  3. 信息处理模块设计:服务器端需要有足够能力承载大量客户端发送来的数据请求并且对其进行处理。服务器程序需要采用多线程处理模式来以提高整个系统的运行速度和运行的性能。系统在同一时刻可以开启多个线程对不同用户上传信息同时进行处理以加快系统的响应速度,充分的利用多核处理的性能,但是采用多线程模式需要面临一些问题,如采用多线程模式需要研究线程同步等问题来确保程序的正确运行。
  4. 数据库的设计:客户端传来的信息需要存储在数据库中,因此服务器端需要与数据库进行大量的交互,如何设计客户端与数据库的连接影响整个系统的性能。

本章小结:本章主要介绍了整个项目的的开发背景是城市道路环境治理面临巨大的压力,对整个项目进行了总体性的介绍,简要的说明了本文所需要研究的主要工作。

开发平台与实现技术

本章主要介绍项目开发中服务器端锁用到的技术以及对这些相关技术进行了详细的介绍。本章分为4节,分别为:Java NIO连接技术,Java多线程技术,Java连接池技术和数据库连接池技术。

2.1 Java NIO连接技术

Socket是程序间通过双向连接进行信息通讯实现数据的交互的一端。Socket是连接通信双方进行数据交互的主要途径,Socket是基于TCP/IP协议实现,Socket是由IP地址和用户端口号来进行唯一确定。在Java编程中,Socket的使用有两种模式,其分别为阻塞连接方式(Java BIO)和非阻塞连接方式(Java NIO)。

两者的差异:

(1)Java NIO编程和Java BIO编程之间主要区别为BIO的连接模式是基于字节流的,NIO连接模式是基于缓冲区的。Java BIO每次从字节流中读取的数据是无法被缓存的,所以Java BIO模式下需要一次性读取完所有的数据。在Java BIO模式下,无法移动流中的数据,如果需要对其中的数据进行移动操作,则需要将数据存入一个缓冲区然后再缓冲区中对其进行操作。 Java NIO的处理方式与Java BIO模式不同,Java NIO会将数据读取到缓冲区中等待进一步的处理,数据在缓冲区中可以对其进行前后移动操作。Java NIO的连接模式可以在网络连接情况下增加数据处理过程中的灵活性,便于对数据进行各种操作。但Java NIO需要对数据缓冲区进行监测以确定需要的数据确实存放在缓冲区之中,除此以外,当有大量数据传输的时候,需要确保缓冲区没有溢出或未被处理的数据没有被覆盖。

(2)Java BIO的各种流为阻塞模式。当线程调用Java BIO模式下的read()函数或者accept()函数的时候,线程会一直处于阻塞状态直到数据已经完全读取或者有连接请求,该线程在此期间无法进行任何处理。 Java NIO非阻塞模式下,线程请求读取某个Channel中的数据,选择器select会监测此channel中否有可读取数据,如果有则读取数据,如果没有可读数据则不作任何处理,线程不会处于阻塞状态。Java NIO模式下线程是不会处于阻塞的,线程会在没有数据可以读取的情况下进行其他的处理。 Java NIO模式中的写入数据也是如此,当线程请求写入一些数据到某个channel不需要像Java BIO模式下需要将数据一次全部写入,在数据写入的中间过程中还可以进行其他处理。 在一般的程序设计中,Java NIO模式下一个线程可以对多个输入和输出通道(channel)进行管理,线程的时间被分配在各个通道的输入输出和监测连接上。

BIO模式分析:

Java的BIO模式下提供了Socket和ServerSocket接口。在Java BIO模式下,如果程序调用InputStream.read()函数来读取数据,这将会导致线程阻塞,直到有数据传来之前整个线程都会阻塞状态。同样,在Java BIO模式下我们调用ServerSocket.accept()函数监听客户端连接时,线程将会处于阻塞状态直到有客户端进行连接请求,这时候阻塞的线程才会被唤醒。在Java BIO连接模式下,当客户端向服务器请求建立连接后,服务器会创建一个新的单独线程去处理该客户端传来的数据请求。图2.1为阻塞I/O的通信。

图2.1

BIO通信模式下存在一些缺点:

  1. 当有数量众多的客户端连接服务器并且向服务器发送请求或者传输数据的时候,服务器端会创建大量的处理线程来处理每个客户端的请求。每个线程需要占用一些内存空间和处理器时间,这回给服务器程序带来巨大的压力,当系统中线程过多的时候,由于线程间的频繁切换可能会造成整个服务器性能的下降。
  2. 在Java BIO连接模式下线程会经常阻塞等待相关事件的发生,而线程阻塞可能带来上下文切换,且大量的切换毫无意义,这样会造成服务器性能的浪费。

NIO模式分析

在NIO模式下采用的是Java提供的SocketChannel和ServerSocketChannel接口。SocketChannel和ServerSocketChannel有两种模式,其可以设置为阻塞状态,在这种状态下和普通的Socket和ServerSocket具有相同的机制,也可以将其设置为非阻塞模式,在非阻塞模式下,Java NIO的服务器端只需启动一个专门的线程来处理所有的 IO 事件,这样的处理模式将会大大的减少线程阻塞的发生次数,减少了系统开销,提高了整个服务器的性能。图2.2为Java NIO模式下非阻塞通信。

图2.2

在NIO中有几个比较关键的概念:Channel(通道),Buffer(缓冲区),Selector(选择器)。Channel与传统的BIO模式下的Stream相似。但在Java BIO模式下Stream为单向的,只能是一方向一方传送数据,如InputSrtream和OutputStream都只能单一的用来接收和发送数据,而Java NIO模式下的Channel是可以进行双向传输,既可以从通道中读取数据,也能向其中写入数据。

缓冲区:Buffer在Java NIO连接中占有非常重要的地位,所有数据的读取与写入都是围绕着缓冲区来进行的。在Java BIO连接中数据的读取是通过byte数组来实现的,而在Java NIO连接中,Buffer是作为数据的唯一容器的,同样地,数据的写入也是通过Buffer来进行的。客户端向服务器端发送数据的时候需要通过Buffer来进行,客户端必须先将需要发送的数据写入数据缓冲区Buffer之中,然后将缓冲区中的内容写入Channel发送给服务器端。服务端接受客户端传来的数据也必须通过Buffer来进行,服务器端接收数据必须从Channel中读取客户端传来的数据并且将其放入数据缓冲区中,服务器程序在数据进入Buffer后再从Buffer中提取出需要处理的数据。图2.3为数据传输。

图2.3

NIO中最核心部分:Selector。Selector是用来监听注册的通道channel,在发现通道中有感兴趣的事件发生后,selector将获取感兴趣的事件然后进行相关的处理。在一般的Java网络程序中,往往会使用用一个单线程来处理Selector,通过Selector.select()获取通道感兴趣的事件,服务器程序在获取了相关事件后程序就可以对这些事件做出不同的处理。一个单独的Selector能够同时对多个通道进行监听,监测通道是否有感兴趣事件的发生。如果有注册的感兴趣事件发生,Selector便调用相关方法获取每个事件然后根据程序设计针对每个不同的感兴趣事件进行不同的处理操作。在Java NIO模式,往往只需要使用一个单线程就可以对多个通道进行监听管理,也就是一个单线程可以对多个连接进行管理。在此模式下,只需要在真正需要读或者写的情况下才会调用相关函数,减少了系统开销,只要在必要的情况下才会为连接创建单独的线程,减少了系统中的线程数量,提高系统性能。图2.4为整个主线程监听器的运行模式。

图2.4

2.2 Java多线程技术

现在绝大多数操作系统都是是多任务操作系统,支持多任务处理,能同时处理多个任务,如windows,linux等,多线程是操作系统实现多任务处理的常见形式。

线程是程序执行的基本单位,一个进程中可以存在多个线程,进程中的线程之间共享同一个地址空间并且多个线程可以读写相同的变量和数据结构。最初,只有负责程序装配的程序员才会在工作中会使用到线程,一些老的开发语言,如PL/ I支持线程的并发性,但是较新的语言,如C和C 库使用代替。直到最近,编程语言再次开始建立直接线程的支持。 在Java编程语言中并发模型依赖于两个实体,其分别为线程和同步对象。每个线程有其自己的内容,其中包括一个程序计数器来指示线程下一步必须执行的指令还有一个栈反应现在正在执行的方法和必须返回的方法。

线程之间对CPU的使用顺序可以通过线程之间优先级来确定,高优先级的线程可以先占有CPU的处理时间。处理器运行一个新的线程时候从哪里开始操作,并使用它的上下文被称为上下文切换。一个线程可以通过放弃对处理器的控制强制进行上下文切换,例如交换机,通过调用sleep。

多线程设计的程序可以利用多核处理器来提高整个程序的运行速度。线程同样可以提高程序在单处理器上的运行速度,当一个线程进程计算而另一个线程等待外部输入的时候。

共享对象是多个线程可以共同访问的资源,为了保证数据的一致性,多线程在访问时候必须进行同步。Java可以利用synchronized来实现排斥性的同步访问以达到线程安全的目的,即一个时刻只有一个线程可以对同步的部分进行访问。 Java也提供了条件同步方法。它是线程必须等待特定条件发生后才可以执行的同步方法。区别两种不同形式的同步方式对于正确编程十分重要,许多java线程方面的错误都是由于将两者混淆而造成的。

由于多线程应用程序会将整个程序划分成多个独立的任务,程序在运行的时候会在进程中创建多个独立运行的线程,因此可以在以下方面提高性能: 
(1)在进行其他处理的时候,用户处理界面不会阻塞,其会处于活动状态,这回事程序拥有更高的响应速度。

(2)可以提高cpu的利用效率,在线程不需要进行数据处理的时候,线程会让出cpu,处于阻塞状态,有利于其他线程进行相关处理。

(3)提高处理器调度的灵活性,在进行占用大量处理时间的任务的时候可以灵活分配处理器。

(4)可以随时停止任务。

由于服务器的特性,服务器需要有很高的吞吐量及强大的处理能力,服务器程序使用多线程技术可以有效的提高系统性能,带来更好的用户体验。多线程设计也存在许多缺点 ,多线程设计会带来更高的复杂度并使得程序的逻辑更加的复杂,在设计多线程程序的时候需要格外小心。多线程的主要缺点包括: 
(1)在多个线程竞争独占性资源的时候,只有一个线程能拥有此资源,其他线程需要处于阻塞状态,可能会导致程序运行变慢。

(2)当系统中存在过多的线程的时候,可能会导致频繁的上下文切换,上下文切换需要消耗cpu的处理时间,当线程多到一定程度的时候,会到系统性能的明显下降。

(3)线程的死锁。线程有能会由于不当的资源分配而导致其一直处于阻塞状态,无法唤醒,最终导致程序运行出错。

(4)对公有变量的同时读或写。对公有变量的读写是非原子性的,可能随时会被其他线程打断,由于线程执行顺序的不确定性将导致公有变量中存储的的值也存在不确定性即不同时刻运行一个程序可能会得到不同的结果。图2.5为线程的状态转化。

图2.5

2.3 Java线程池技术

像数据库服务器、文件服务器等许多服务器处理的任务主要都是一些比较短的任务,处理很简单,不需要进行大量的计算,但是请求的数量巨大。对于这类服务器有一个非常简单的服务器程序模型是为每个发送来的请求去创建一个单独的线程进行相关的数据处理并在处理结束后销毁此线程。但是这个服务器模型有很严重的缺点,就是当有大量请求并发访问时,服务器不断的循环创建和销毁线程将会明显的降低服务器的运行效率。在这种情况下,如果需要提高服务器的处理能力,除了增加硬件外还可以通过减少服务创建和销毁的次数来提高性能。这样就引入了“池”的概念,“池”的概念使得人们可以定制一定量的资源,对这些资源进行复用,而不是频繁的创建和销毁。

线程池是一种预先创建线程的资源池技术,线程池会在数据处理尚未开始之前创建一定量的线程并且将这些线程放入资源池中。这些预先创建好的线程都是处于睡眠状态并不运行,只需要消耗一部分内存空间,并不占用处理器的运行时间。在处理请求到来之后,缓冲池会根据请求为其分配一个可用线程,程序将会把该请求传入此线程中运行,通过此线程对请求进行相关的处理。当传来的请求数量过多,先前创建的线程数量已经满足不了处理需求的时候即预先创建的线程都处于运行状态。这时候线程池中没有可以利用的空闲线程,线程池可以根据系统中参数设定再次创建一定数量的新线程并且将这些线程放入线程池中以用于处理更多的请求。如果请求数量很少,系统任务很轻,系统预先建立的线程完全没有被使用的时候也可以适当的减少线程池中线程数量。可以根据系统的配置及其硬件的性能,自动或手动设置线程数量,可以达到系统运行的最佳效果。除此以外,我们还可以利用线程池来控制系统中的线程数量。在线程池中,一个任务执行完后,线程池会从队列的最前面取出一个任务来执行,若队列为空,线程池将会处于等待状态。当有一个新的任务需要运行时,如果线程池中有空闲的线程可以分配给此任务时,此任务可以立即投入运行,否则此任务会进入等待队列。Java里提供了线程池的接口ExecutorServic,方便线程池的实现,简化了开发的复杂度,在Java编程中只需要将需要运行的Java线程放入线程池即可运行。图2.6为线程池运行模式。

图2.6

2.4 数据库连接池

一个简单应用程序并不需要经常性的对数据库进行访问。在程序需要对数据库进行操作的时候新建立一个数据库连接并且在访问完数据库后销毁此数据库连接,这样做对系统性能并不会有明显的影响。但一个复杂的数据库应用中程序采用这种策略需要频繁的建立和销毁数据库连接,这会降低系统效率,形成整个系统性能瓶颈并且造成系统整体性能的下降。资源池对于共享资源来说是一个很著名的设计。数据库连接池技术就是像线程池的设计那样,在任务到达之前建立一个资源池将预先创建好的数据库连接放入连接池中并且通过数据库连接池对数据库连接进行管理。通过建立数据库连接池的方式实现连接复用并且减少系统中数据库连接建立与销毁的次数,提高整个系统的运行效率。数据库连接池的基本策略是预先在池中建立一定的数据库连接,为外部提供相关接口,便于外部获取数据库连接和释放连接,对连接进行复用。

数据库连接池技术带来的优势:

1. 资源重用

采用数据库连接池技术可以减少系统中数据库连接创建和销毁的次数,提高系统的运行效率并增强整个系统的数据处理能力。数据库连接池的使用除了提高整个系统效率之外,还有利于减少系统中的内存碎片,通过减少临时的数据库连接线程的数量和数据库连接线程的创建与开销次数以提高整个系统运行的平稳性。

2. 更快的系统响应速度

数据库连接池的建立会提高了整个系统的响应速度。数据库连接池初始时候会创建一定数量的数据库连接并将其放入连接池当中,当有程序需要操作数据库时候程序可以直接从数据库连接池中获取数据库连接,跳过了数据库连接创建和销毁的过程。

  1. 新的资源分配手段

在数据库连接池创建的时候可以设置相关的参数来限制连接池中数据库连接的最大数量以此避免造成系统中数据库连接过多而导致出现整个系统性能下降的问题。

4. 避免数据库连接的泄漏

可以在数据库连接池中设置数据库连接使用的最大时间。在程序使用数据库连接到达规定的最大时间后之数据库连接池将强行收回此连接以避免可能出现的资源泄露的问题。图2.7为数据库连接池的运行原理。

图2.7

本章小结:本章详细的介绍了服务器端程序开发所需要的主要技术,其包括Java NIO连接技术,Java多线程技术,Java线程池技术以及数据库连接池技术。详细的描述了各种技术的特性,以及应用在本程序中的优势。

需求分析与部分模块设计

本章主要对整体系统进行了需求分析,设计了系统中各个角色所具有的功能,详尽的描述了系统服务器端的设计。本章分为2节,分别为系统需求分析和部分模块详细设计。

3.1系统需求分析

本课题主要研究基于移动端的城市道路与环境移动APP开发,涉及信息采集,信息上传,信息存储,信息查看,信息交流。

请支付后下载全文,论文总字数:20349字

您需要先支付 80元 才能查看全部内容!立即支付

企业微信

Copyright © 2010-2022 毕业论文网 站点地图