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);
相当的经典
posted on 2017-09-19 11:14 luzhouxiaoshuai 阅读(605) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!