博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单实现的Servlet文件上传,并显示
阅读量:6434 次
发布时间:2019-06-23

本文共 3931 字,大约阅读时间需要 13 分钟。

hot3.png

大部分情况,会从HttpServletResponse取得PrintWriter实例,使用println()对浏览器进行字符输出。然而有时候,需要直接对浏览器进行字节输出,这时可以使用HttpServletResponse的getOutputStream()方法取得ServletOutputStream实例,它是OutputStream的子类。

如图,我们希望让浏览器直接输入PDF文件。

import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** *  输出二进制字符 * @author Barudisshu */@WebServlet(name = "Download", urlPatterns = {"/download.do"})public class Download extends HttpServlet {    protected void processRequest(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        String password = request.getParameter("password");        if ("123456".equals(password)) {            //设置MIME(Multipurpose Internet Mail Extensions)类型            response.setContentType("application/pdf");            //获取输入流对象            InputStream in = getServletContext().getResourceAsStream("/WEB-INF/jdbc.pdf");            //获取输出流对象            OutputStream out = response.getOutputStream();            //读取PDF并输出至浏览器            writeBytes(in, out);        }    }    private void writeBytes(InputStream in, OutputStream out)            throws IOException {        byte[] buffer = new byte[1024];        int length = -1;        while ((length = in.read(buffer)) != -1) {            out.write(buffer, 0, length);        }        in.close();        out.close();    }}

上传文件,并显示在客户端。

代码清单1:upload.xhtml (上传表单)

            上传文件                        

代码清单2:UploadServlet.java (获取请求,并输入到服务器目录)

/** * Function 负责文件的上传,并返回结果 * @author Barudisshu */@MultipartConfig@WebServlet(name = "UploadServlet", urlPatterns = {"/upload.do"})public class UploadServlet extends HttpServlet {    private String contextPath;    @Override    public void init() throws ServletException {        contextPath = getServletContext().getRealPath("/");    }    protected void processRequest(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        request.setCharacterEncoding("utf-8");        Part part = request.getPart("picture");        String fileName = getFileName(part);        writeTo(fileName, part);        //forward到显示        request.setAttribute("fileName", fileName);        request.getRequestDispatcher("show.jsp").forward(request, response);    }    //取得上传文件名    private String getFileName(Part part) {        String header = part.getHeader("Content-Disposition");        String fileName = header.substring(header.indexOf("filename=\"") + 10,                header.lastIndexOf("\""));        return fileName;    }    //存储文件    private void writeTo(String fileName, Part part) throws IOException, FileNotFoundException {        InputStream in = part.getInputStream();        OutputStream out = new FileOutputStream(contextPath + fileName);        byte[] buffer = new byte[1024];        int length = -1;        while ((length = in.read(buffer)) != -1) {            out.write(buffer, 0, length);        }        in.close();        out.close();    }}

这里有很多限制,这使用的是Servlet 3.0 新的特征标注(Annotaion)类描述部署,一些低版本的服务器需要使用标准依赖部署描述文件(web.xml)来部署,另外Part也是Java EE 6.0新增的类,Part是一个接口继承于javax.servlet.http,代表一部分表单项目接收来自multipart/form-data的POST的请求。

 

代码清单3:show.jsp (显示类)

<%@page contentType="text/html" pageEncoding="UTF-8"%>            
JSP Page

图片显示

${fileName}

这里使用EL表达式描述,优化了代码。

下面给出效果链接……

转载于:https://my.oschina.net/Barudisshu/blog/157481

你可能感兴趣的文章
用什么软件可以修改PDF文件,软件的操作方法
查看>>
如何精简企业主数据“裹脚布”
查看>>
& 号和管道符号(|)在不同场景下的使用方法
查看>>
curl 浏览器模拟请求实战
查看>>
多个VLAN中的vrrp备份组配置举例
查看>>
运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(六)
查看>>
interlib在tomcat7.0的安装
查看>>
水晶报表在大型WEB内部管理系统里的滑铁卢
查看>>
我的友情链接
查看>>
Git学习
查看>>
trove 基于 centos7 制作 mysql5.6 镜像
查看>>
结合i节点和数据块分析linux中软链接和硬链接的区别
查看>>
Heartbeat crm的配置
查看>>
Stream
查看>>
我的友情链接
查看>>
Windows Server 2012_Install_Guide
查看>>
ISA Server搭建站点对站点×××
查看>>
我的友情链接
查看>>
超大规模数据中心:给我一个用整机柜的理由先
查看>>
执行命令取出linux中eth0的IP地址
查看>>