xutils工具上传日志文件--后台服务器的搭建
在上一篇文章中使用xutils将手机上保存的日志上传到后台服务器中,现在我们来讲后台服务器是如何搭建的
后台服务器采用jsp+sevlet+mysql的框架
首先讲mysql数据库的表的建立

在file_upload_download_exercise数据库中建立了一个表upfiles
表的结构如下所示
mysql> desc upfiles;
+-----------------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+-------+
| id | varchar(100) | NO | PRI | NULL | |
| uuidname | varchar(100) | YES | | NULL | |
| filename | varchar(50) | YES | | NULL | |
| savepath | varchar(150) | YES | | NULL | |
| uploadtime | varchar(32) | YES | | CURRENT_TIMESTAMP | |
| description | varchar(255) | YES | | NULL | |
| username | varchar(10) | YES | | NULL | |
| imei | varchar(255) | YES | | NULL | |
| phoneNumber | varchar(100) | YES | | NULL | |
| tfCardNumber | varchar(100) | YES | | NULL | |
| phone_model | varchar(100) | YES | | NULL | |
| app_versionName | varchar(100) | YES | | NULL | |
| app_versionCode | varchar(100) | YES | | NULL | |
| appPackageName | varchar(100) | YES | | NULL | |
| download_url | varchar(360) | YES | | NULL | |
+-----------------+--------------+------+-----+-------------------+-------+
15 rows in set

这些字段对应表的id,上传日志的名字,上传日志对应的时间,上传日志手机终端的imei,电话号码等字段
CREATE TABLE `upfiles` (
`id` varchar(100) NOT NULL,
`uuidname` varchar(100) DEFAULT NULL,
`filename` varchar(50) DEFAULT NULL,
`savepath` varchar(150) DEFAULT NULL,
`uploadtime` varchar(32) DEFAULT 'CURRENT_TIMESTAMP',
`description` varchar(255) DEFAULT NULL,
`username` varchar(10) DEFAULT NULL,
`imei` varchar(255) DEFAULT NULL,
`phoneNumber` varchar(100) DEFAULT NULL,
`tfCardNumber` varchar(100) DEFAULT NULL,
`phone_model` varchar(100) DEFAULT NULL,
`app_versionName` varchar(100) DEFAULT NULL,
`app_versionCode` varchar(100) DEFAULT NULL,
`appPackageName` varchar(100) DEFAULT NULL,
`download_url` varchar(360) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这是对应的建表语句,但是存在优化的空间,因为我们不涉及到事务的操作,我们可以将表的存储引擎从Innodb改成myisam,可以大大提高效率
如果我们在表中经常使用select * from upfiles where uploadtime > "2017-10-04 10:05:20";经常通过日志上传日志的字段查询日志记录信息,我们可以给uploadtime字段设置一个普通索引
,这样可以大大的提供效率
终端app上传的路径是
http://10.12.8.8:8080/UpLoad_file/upload
对应的后台的项目名称是
UpLoad_file,对应的servlet是upload
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.itheima.file.web.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
UploadServlet的作用作用就是:接受客户端上传的文件,将上传的文件保存到工程的web-inf/upload/目录下,然后将对应的日志记录插入到对应的数据库表中
不清楚的可以看视频D:\学习视频资料\【外来文件非密】黑马程序员android 第62期完整版\62期安卓视频教程\【非密】day20_filter_upload
整个流程就是按照视频

需要用到的libs如下

讲讲项目中的几个重要的流程:
1、首先客户输入http://localhost:8080/UpLoad_file/login.jsp

当用户输入用户名和密码之后就会跳转到

loginServlet对用户的输入名和密码进行判断,如果用户名和密码正确做下面的两个操作
1、把当前的用户名保存到session中;
2、跳转到upload_main.jsp中

接下来终端讲解下upload_main.jsp
upload_main.jsp是一个控制器,控制页面的跳转
主要干了下面的两个事情
<%
String username=(String)session.getAttribute("username");
if (username==null){
response.sendRedirect("login.jsp");
}
String mainPage=(String)request.getAttribute("mainPage");
if(mainPage==null || mainPage.equals("")){
mainPage="common/upload_default.jsp";
}
%>
首先判断当前的session中是否存在了username,如果没有没有登录就跳转到登陆界面
第二个从session中获得mainPage,就是mainPage就是要跳转到的那个页面
如果没有设置就跳转到
common/upload_default.jsp,这个页面的默认样式就是
<body>
<div class="container">
<jsp:include page="common/upload_head.jsp"></jsp:include>
<jsp:include page="<%=mainPage %>"></jsp:include>
</div>
</body>
uplod_main.jsp首先加载common/upload_head.jsp,然后加载mainPage,
第二个从session中获得mainPage,就是mainPage就是要跳转到的那个页面
如果没有设置就跳转到
common/upload_default.jsp,这个页面的默认样式就是

我们来梳理下下面的流程
当点击upload_head.jsp上面的栏目日志信息维护的时候,就会调用

在ListFilesServlet中就会分页去查询数据库中的记录,然后在页面上显示出来
List<Upfile> upfiles = us.findUpfilesBylimit(pageNumber, pageSize);
request.setAttribute("pageNumber",pageNumber);
request.setAttribute("pageCount",pageCount);
// 存到 request域, 转发到jsp去显示
request.setAttribute("upfiles", upfiles);
String mainPage="showlogs.jsp";
request.setAttribute("mainPage", mainPage);
request.getRequestDispatcher("/upload_main.jsp").forward(request, response);
首先将查询的数据存储在session中
然后将mainPage的值设置成showlogs.jsp,然后跳转到upload_main.jsp中,到了upload_main.jsp中首先从
session获得mainPage的值是showlogs.jsp,就跳转到该页面
在showlogs.jsp中就将分页查询的数据显示出来
<c:forEach items="${upfiles }" var="upfile">
<tr>
<td>${upfile.filename }</td>
<td>${upfile.uploadtime}</td>
<td>${upfile.imei }</td>
<td>${upfile.phoneNumber }</td>
<td>${upfile.tfCardNumber }</td>
<td>${upfile.phone_model }</td>
<td>${upfile.app_versionName }</td>
<td>${upfile.app_versionCode }</td>
<td>${upfile.download_url }</td>
<td>${upfile.description }</td>
<td>
<a href="${pageContext.request.contextPath }/download?id=${upfile.id}">下载</a>
<li><a href="${pageContext.request.contextPath }/PreServlet?id=${upfile.id}&&method=addRemark&&remark=${upfile.description}"></i>添加备注 </a></li>
</td>
</tr>
</c:forEach>
我们来看下运行的效果

3、按照起始时间和截止时间进行查找,因为数据量很大的时候,查询很慢,所以这里需要将数据库的uploadtime字段添加索引,提供查询的效率
点击查询的时候到

SearchByDateServlet进行处理,通过起止时间进行查询获得查询结果
List<Upfile> upfiles = us.findUpfilesByTimes(start_time, end_time);
System.out.println("findUpfilesByTimes upfiles:"+upfiles.toString());
request.setAttribute("upfiles", upfiles);
String mainPage="show_query_logs.jsp";
request.setAttribute("mainPage", mainPage);
request.getRequestDispatcher("/upload_main.jsp").forward(request, response);
在show_query_logs.jsp将查询的结果显示出来相当的经典 4、点击添加备注的业务流程分析
当点击备注的时候会调用一个/PreServlet?id=${upfile.id}&&method=addRemark

PerServlet的方法,该方法首先会通过传递过来的method来判断当前用户的操作是添加备注,还是添加记录,还是删除记录
如果是添加备注执行
public void remarkAdd(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String mainPage = "remarkAdd.jsp";
String id = request.getParameter("id");
UpfileDao daoImpl = new UpfileDaoImpl();
Upfile fileInfo = daoImpl.getFileInfo(id);
System.out.println("fileInfo is :"+fileInfo.toString());
request.setAttribute("fileInfo", fileInfo);
request.setAttribute("mainPage", mainPage);
RequestDispatcher dispatcher = request.getRequestDispatcher("upload_main.jsp");
dispatcher.forward(request, response);
}
首先通过传递过来的id查找到需要添加备注的文件信息,然后跳转到remarkAdd.jsp添加记录

当点击提交的时候
跳转到
addRemarkServlet进行处理
将用户添加的信息update到数据库中
/**
* 更新数据库
* 跳转到ListFileServlet中重新显示数据
* */
UpfileDaoImpl dao = new UpfileDaoImpl();
dao.updateFileLogs(stId, remark);
request.getRequestDispatcher("listfiles").forward(request,
response);
相当的经典
xutils工具上传日志文件--后台服务器的搭建的更多相关文章
- xutils工具上传日志文件
首先下载xutils java包: 添加到项目的工程中: 第二在新建一个类继承application package logback.ecmapplication.cetcs.com.myapplic ...
- xutils工具上传日志文件--使用https并且带进度条显示
package logback.ecmapplication.cetcs.com.myapplication; import android.app.Activity; import android. ...
- 自实现input上传指定文件到服务器
遇到问题,解决问题,记录问题,成长就是一步一步走出来的. 一.添加 input 标签 我的工作中遇到了,需要上传pdf文件到服务器的需求,而且只能上传pdf文件,accept指定了 pdf 类型. & ...
- SSH 远程上传本地文件至服务器
使用SSH命令行传输文件到远程服务器 以前一直在windows下用SSH Secure Shell连接远程服务器,它自带了一个可视化的文件传输工具,跟ftp差不多 但是它也存在一个缺陷,不支持编码 ...
- [SecureCRT]通过SFTP方式上传本地文件到服务器
1.在本地建一个文件夹,如:d:\My Documents,在此目录下,放入我们需要上传的文件,如:nmon_linux_x86_64 2.然后打开我们的SecureCRT工具,一次选择Options ...
- 关于ajax 异步文件上传 node 文件后台接口
<body> <img src="" alt="" id="img"> <input type="f ...
- 通过WebService跨平台上传大文件到服务器
好长时间没写博客了,对最近工作中遇到的大文件上传和下载的代码贴出来和大家分享一下. 大文件的上传的和下载是C++的平台通过调用WebService实现文件上传和下载到服务器 /// <summa ...
- ubuntu使用ssh远程登录服务器及上传本地文件到服务器
1. ubuntu 远程登录 首先你的ubuntu要能够支持ssh,如果不能,自行百度! 打开终端,输入 ssh root@115.159.200.13(你的服务器的IP地址) 回车就会让你输入 ...
- Azure IoT Hub 十分钟入门系列 (4)- 实现从设备上传日志文件/图片到 Azure Storage
本文主要分享一个案例: 10分钟内通过Device SDK上传文件到IoTHub B站视频:https://www.bilibili.com/video/av90224073/ 本文主要有如下内容: ...
随机推荐
- 【MOOC操作系统】测试题大题-进程调度 先入先服务算法例题 【某多道程序系统供用户使用的主存为100K,磁带机2台,打印机1台,采用可变分区存储管理,静态方式分配外围设备(进程获得所需全部设备才能进入内容),忽略用户作业的I/O时间。采用动态分区、首次匹配法(从低地址区开始)分配主存,一个作业创建一个进程,且运行中不紧缩内存。作业调度采用FCFS算法,在主存中的进程采用剩余时间最短调度算法。】
分析图: 答案: (1) 8 : 00作业1到达,占有资源并调入主存运行. 8: 20作业2和3同时到达,但作业2因分不到打印机,只能在后备队列等待.作业3资源满足,可进主存运行,并与作业1平分CPU ...
- Springboot之actuator未授权访问
copy 子杰的哈,懒的写了 0x01 未授权访问可以理解为需要授权才可以访问的页面由于错误的配置等其他原因,导致其他用户可以直接访问,从而引发各种敏感信息泄露. 0x02 Spring Boot ...
- Rocket - diplomacy - ValName
https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ 简单调试ValName实现: 1. 使用 Desugar之后如下: ...
- Java实现 蓝桥杯 算法提高 判断名次
算法提高 判断名次 时间限制:1.0s 内存限制:256.0MB 问题描述 某场比赛过后,你想要知道A~E五个人的排名是什么,于是要求他们每个人说了一句话.(经典的开头---_-!)得了第1名的人23 ...
- Java实现 蓝桥杯VIP 算法提高 林丹大战李宗伟
问题描述 我们用0表示林丹,1表示李宗伟. 输入数据中每行会给出一个0或者1,表示对应选手得1分. 当一方得分达到21分时,只要该方与对方分差超过1分,该方即胜出. 你需要输出最后获胜选手的代号. 输 ...
- Java实现 蓝桥杯VIP 算法提高 士兵排队问题
算法提高 士兵排队问题 时间限制:1.0s 内存限制:256.0MB 试题 有N个士兵(1≤N≤26),编号依次为A,B,C,-,队列训练时,指挥官要把一些士兵从高到矮一次排成一行,但现在指挥官不能直 ...
- Java实现 LeetCode 105 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中 ...
- Java实现 LeetCode 39 组合总和
39. 组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字 ...
- java实现最近距离
已知平面上的若干点的位置,存入一个List中.现在需要计算所有这些点中, 距离最近的两个点间的最小距离.请补全缺失的代码. 把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的&quo ...
- Java实现第八届蓝桥杯方格分割
方格分割 题目描述 6x6的方格,沿着格子的边线剪开成两部分. 要求这两部分的形状完全相同. 如图:p1.png, p2.png, p3.png 就是可行的分割法. 试计算: 包括这3种分法在内,一共 ...