记录java接口开发
来源:互联网 发布:淘宝模特怎么入行 编辑:程序博客网 时间:2024/06/01 07:26
**最近项目需要写web接口对外客户端提供服务,百度了很多发现没有比较实用的,自己摸索了半天终于写出来了,不容易,自己做了一个记录,大神勿喷。我自己理解的接口就是客户端通过访问服务器获取数据。我这里是用http协议实现的接口,实现了很多,如用户查询,插入,头像上传等等,在这就说下头像上传吧。先上代码packageimport java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public abstract class BaseServlet extends HttpServlet { private static final long serialVersionUID = 7900894904189731562L; //这个类主要是实现HttpServlet,做一个统一父类,以便于其他类继承 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override // 统一做一些事情 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { long starttime = System.currentTimeMillis(); req.setCharacterEncoding("UTF-8"); post(req, resp); } // 实现post的方法 protected abstract void post(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;}//package 这里是包位置 是自己的项目而定import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintWriter;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.Random;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import net.sf.json.JSONObject;public class FileUploadAction extends BaseServlet { private static final long serialVersionUID = -168772768724854574L; Logger logger = Logger.getLogger(FileUploadAction.class); //实现父类的post方法, @Override protected void post(HttpServletRequest req, HttpServletResponse resp) { String result = null; PrintWriter out = null; Map<String, Object> map = new HashMap<String, Object>(); //得到上传文件的保存目录,用来存放上传的图片 String savePath = req.getServletContext().getRealPath("/commonfile"); //获取文件的后缀名 String ext = req.getParameter("ext"); if (ext != null) { String fileExtName = ext.substring(ext.lastIndexOf(".") + 1); String saveFilename = makeFileName(fileExtName); result = writeTo(req, saveFilename, makePath(savePath), savePath); if (result != null) { map.put("信息:", "上传成功"); } else { map.put("error","未检测到数据"); } } else { map.put("error","传入文件为空"); } resp.setContentType("text/html"); resp.setCharacterEncoding("UTF-8"); try { out = resp.getWriter(); out.write(JSONObject.fromObject(map).toString()); out.flush(); out.close(); } catch (IOException e) { logger.info(e + "连接异常"); } finally { out.flush(); out.close(); } } public String writeTo(HttpServletRequest req, String saveFilename, String Path, String savePath) { ServletInputStream is = null; FileOutputStream out = null; try { is = req.getInputStream(); out = new FileOutputStream(savePath + "/" + Path + "/" + saveFilename); byte buffer[] = new byte[1024]; int length = -1; while ((length = is.read(buffer)) != -1) { out.write(buffer, 0, length); } is.close(); out.close(); return "commonfile/" + Path + "/" + saveFilename; } catch (IOException e) { logger.info(e + "写入异常"); } finally { try { is.close(); out.close(); } catch (IOException e) { logger.info(e + "流关闭异常"); } } return null; } private String makeFileName(String filename) { Date date = new Date(); DateFormat format = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); String time = format.format(date); Random random = new Random(); String result = ""; for (int i = 0; i < 6; i++) { result += random.nextInt(10); } filename = time + "_" + result + "." + filename; return filename; } private String makePath(String savePath) { String dir = null; File f1 = new File(savePath); if (!f1.exists()) { f1.mkdirs(); } File[] f2 = f1.listFiles(); if (f2.length != 0) { String f3 = f2[f2.length - 1].getName(); File f4 = new File(savePath + "/" + f3); File[] f5 = f4.listFiles(); int a = f2.length; if (f5.length <= 10000) { dir = a + ""; } else { dir = (a + 1) + ""; File file = new File(savePath + "/" + dir); if (!file.exists()) { file.mkdirs(); } } } else { dir = 1 + ""; File file = new File(savePath + "/" + dir); if (!file.exists()) { file.mkdirs(); } } return dir; }}代码写完之后则要在web.xml中配这个接口web.xml文件如下://<!DOCTYPE web-app PUBLIC//"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"// "http://java.sun.com/dtd/web-app_2_3.dtd" >//<web-app>//<display-name>Test</display-name>//<servlet>//<servlet-name>fileupload</servlet-name>//<servlet-class>test.FileUploadAction</servlet-class>//</servlet>//<servlet-mapping>//<servlet-name>fileupload</servlet-name>//<url-pattern>/file/upload</url-pattern>//</servlet-mapping>//</web-app>不知道为啥不能全部显示,粘贴去掉注释就好配完之后写个测试类试试import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.net.HttpURLConnection;import java.net.URL;public class MyTest {public static void main(String[] args) {String str = "http://localhost:8080/test/file/upload?ext=jpg";String fileName = "D:\\1.jpg";try {URL url = new URL(str);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setDoInput(true);connection.setDoOutput(true);connection.setRequestMethod("POST");connection.setRequestProperty("content-type", "text/html");BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream());// 读取文件上传到服务器File file = new File(fileName);FileInputStream fileInputStream = new FileInputStream(file);byte[] bytes = new byte[1024];int numReadByte = 0;while ((numReadByte = fileInputStream.read(bytes, 0, 1024)) > 0) {out.write(bytes, 0, numReadByte);}out.flush();fileInputStream.close();// 读取URLConnection的响应DataInputStream in = new DataInputStream(connection.getInputStream());} catch (Exception e) {e.printStackTrace();}}}测试时先将FileUpload运行在server上,然后执行mytest。**
1 1
- 记录java接口开发
- Java开发WebService接口记录
- PHP开发APP接口 记录
- java webservice接口开发
- 短信JAVA开发接口
- java 短信接口开发
- java支付接口开发
- shgsdhgsdsdl-Java接口开发
- 工商银行接口开发-java
- JAVA JSON 开发记录
- Java开发记录
- Java开发技巧记录
- java开发记录
- Java开发经验记录
- java开发记录
- java开发规范记录
- Java 实现Comparable接口踩坑记录
- Java记录 -16- 抽象类及接口
- 结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)
- LeetCode 264: Ugly Number II
- 由于ptrace.h文件导致的内核编译出错的解决方法
- java序列化
- svn分支开发操作步骤
- 记录java接口开发
- UITextField使用注意事项——最左侧/右侧添加图片
- Golang中的interface
- Hibernate关联操作、查询操作、高级特性、并发处理机制
- 使用MyBatis(12)动态SQL 完成分页查询
- ucosiii 软定时
- Java多线程-Executor框架:CompletionService
- C# 如何利用反射,将字符串转化为类名并调用类中方法
- MapReduce:详解Shuffle过程