Android实现上传更新至服务器(一)服务器端
Android实现上传更新至服务器
预览
在手机APP上实现运维工单管理功能:创建、查看、执行、分享、删除……所有的数据(文本、图片)将实时更新至阿里云服务器中
服务器架构
服务器架构:Apache Tomcat+MySql,这部分是0基础,直接学习衷水木的系列技术完成服务器架构
【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器
数据库设计
在MySql中建立工单模型,使用Navicat for MySql工具可视化操作数据库。
名 | 类型 | 备注 |
---|---|---|
state | 工单状态 | 0→未完成;1→已完成 |
type | 工单类型 | 0→计划任务;1→异常维护;2→随工运维 |
image | 执行图片记录 | 只存图片地址,用";"分割 |
- 工单含3种状态:已完成;逾期(截止时间endtime已过);计划中(endtime未到)
- 在task(工单任务)、log(运维记录)、image(图片记录)中用“;”分割不同子项
后台服务设计
编程工具:Eclipse,基于Servlet开发,运行于Apache Tomcat上
工单模型
public class Workorder{
private String id;
private int woState;
private int woType;
private String title;
private String tasks;
private Date time;
private Date endTime;
private String location;
private String worker;
private String workLog;
private String workImageUrl;
private String woCreater;
//************************************************************
//*get and set block
//************************************************************
//由Json生成工单Workorder
public static Workorder initWithJson(JSONObject jsonObject) {
……
}
}
public class DBUtil {
public static String getQuerySqlById(String table,String id,String start,String end) {
……
}
public static String getInsertSql(String table,BaseModel model) {
……
}
public static String getUpdateSql(String table,BaseModel model) {
……
}
public static String getDeleteSql(String table,BaseModel model) {
……
}
//数据库连接
public static Connection getConnection() {
//注意加serverTimezone=GMT&useSSL=false防止出错
String url="jdbc:mysql://localhost:3306/eds_mysql_workorder?serverTimezone=GMT&useSSL=false";
Connection connection=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
//MySql中设定的用户名,密码
connection=(Connection)DriverManager.getConnection(url,"用户名","密码");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
return connection;
}
}
查询工单Servlet
@WebServlet("/QueryWorkorderServlet")
public class QueryWorkorderServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 解决中文格式乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String message=null;
String resultCode="0";
String id=request.getParameter("id");
String time=request.getParameter("time");
String endtime=request.getParameter("endtime");
Connection connection=DBUtil.getConnection();
if(!StringUtils.isNullOrEmpty(id)&&connection!=null){
try {
Statement statement=connection.createStatement();
String querySql=DBUtil.getQuerySqlById(DBUtil.TABLE_WORKORDER, id,time,endtime);
ResultSet resultSet=statement.executeQuery(querySql);
//返回Json数据
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("[");
while (resultSet.next()) {
stringBuilder.append("{");
stringBuilder.append("\"id\":\""+resultSet.getString("id")+"\",");
……
stringBuilder.append("},");
}
stringBuilder=MyStringUtil.removeLastStr(stringBuilder, ",");
stringBuilder.append("]");
message=stringBuilder.toString();
resultCode="1";
} catch (SQLException e) {
e.printStackTrace();
message=e.getMessage();
resultCode="-1";
}
}else {
message="id or mysql_connection is null";
resultCode="0";
}
HashMap<String,String> msgMap=new HashMap<>();
msgMap.put("resultCode", resultCode);
msgMap.put("message", message);
PrintWriter writer=response.getWriter();
writer.println(message);
writer.flush();
}
}
更新工单(增、改、删)Servlet
@WebServlet("/UpdateWorkorderServlet")
public class UpdateWorkorderServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//防止中文乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String message=null;
int resultCode=0;
//获取Json数据,生成工单对象
BufferedReader reader= request.getReader();
StringBuffer stringBuffer=new StringBuffer();
String line=null;
while((line=reader.readLine())!=null){
stringBuffer.append(line);
}
String jsonString=stringBuffer.toString();
JSONObject jsonObject=JSONObject.fromObject(jsonString);
Workorder workorder=Workorder.initWithJson(jsonObject);
Connection connection=DBUtil.getConnection();
if(!StringUtils.isNullOrEmpty(workorder.getId())&&connection!=null){
try {
Statement statement=connection.createStatement();
//查询此工单是否存在:分别执行删除(title为空),新增,更新等操作
String sqlQuery=DBUtil.getQuerySqlById(DBUtil.TABLE_WORKORDER, workorder.getId(),null,null);
ResultSet resultSet=statement.executeQuery(sqlQuery);
String sqlUpdate=null;
//title为空时执行删除工单
boolean isDelete=StringUtils.isNullOrEmpty(workorder.getTitle());
if(resultSet.next()){
sqlUpdate=isDelete?DBUtil.getDeleteSql(DBUtil.TABLE_WORKORDER, workorder):DBUtil.getUpdateSql(DBUtil.TABLE_WORKORDER,workorder);
}else {
sqlUpdate=isDelete?null:DBUtil.getInsertSql(DBUtil.TABLE_WORKORDER, workorder);
}
int update=sqlUpdate==null?0:statement.executeUpdate(sqlUpdate);
if(update==1){
message=String.format("update ID:%s success",workorder.getId());
resultCode=1;
}else {
message=String.format("update ID:%s failed",workorder.getId());
resultCode=-1;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
resultCode=0;
message=e.getMessage();
}
}else {
message="id or mysql_connection is null";
resultCode=0;
}
String result=String.format("{\"resultCode\":%s,\"message\":\"%s\"}",resultCode,message);
PrintWriter writer= response.getWriter();
writer.println(result);
writer.flush();
}
}
上传图片/文件Servlet
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
@SuppressWarnings("deprecation")
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String message=null;
int resultCode=0;
//图片将存放于upload文件夹中
DiskFileItemFactory factory=new DiskFileItemFactory();
String path=request.getRealPath("/upload");
File file=new File(path);
if(!file.exists()){
file.mkdirs();
}
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);
ServletFileUpload upload=new ServletFileUpload(factory);
try {
java.util.List<FileItem> list = (java.util.List<FileItem>)upload.parseRequest(request);
for(FileItem item:list){
String name=item.getFieldName();
if(item.isFormField()){
String value=item.getString();
request.setAttribute(name, value);
}else {
String value=item.getName();
int start=value.lastIndexOf("\\");
String fileName=value.substring(start+1);
request.setAttribute(name, fileName);
item.write(new File(path,fileName));
message="upload: "+fileName+" success.";
resultCode=1;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
message="upload failed.";
resultCode=-1;
}
String result=String.format("{\"resultCode\":%s,\"message\":\"%s\"}",resultCode,message);
PrintWriter writer= response.getWriter();
writer.println(result);
writer.flush();
}
}