记录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
原创粉丝点击