Java Servlet 图片上传与显示教程
"Java Servlet实现图片上传到特定文件夹,并在新页面显示" 在Java Web开发中,Servlet常用于处理动态请求,包括文件上传。本示例将详细讲解如何使用Servlet来实现用户从客户端上传图片至服务器指定文件夹,并在另一个页面上显示该图片。 首先,我们关注的是上传图片的前端页面,即`uploadphoto.jsp`。在这个页面中,我们需要创建一个表单让用户输入英雄名称,并选择要上传的图片文件。关键在于`<form>`标签的设置,其`method`属性应为`post`,因为文件上传不支持`GET`方式。同时,`enctype`属性必须设为`multipart/form-data`,这样才能正确地处理二进制文件数据。代码如下: ```html <form action="uploadPhoto" method="post" enctype="multipart/form-data"> 英雄名称: <input type="text" name="heroName" /><br><br> 上传头像: <input type="file" name="filepath" /><br><br> <input type="submit" value="上传"> </form> ``` 接下来,我们需要创建处理上传请求的Servlet,这里叫做`UploadPhotoServlet`。在Servlet中,我们需要导入Apache Commons IO和FileUpload库,这两个库提供了方便的文件上传处理功能。在Maven项目中,可以在`pom.xml`中添加依赖: ```xml <dependencies> <!-- Apache Commons IO --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> <!-- Apache Commons FileUpload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> </dependencies> ``` 在`UploadPhotoServlet`中,我们需要解析请求中的文件数据,将其保存到服务器的指定目录(例如`D:/image`)。这通常涉及以下几个步骤: 1. 检查请求是否包含文件项。 2. 创建一个DiskFileItemFactory实例,用于处理文件项。 3. 使用ServletFileUpload工具类解析请求。 4. 遍历解析后的文件项,保存文件到服务器。 5. 设置响应,以便在上传成功后重定向到显示图片的页面。 以下是一个简单的`doPost`方法实现: ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 创建DiskFileItemFactory DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置临时存储路径 factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); // 创建ServletFileUpload对象 ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大上传文件大小,单位为字节 upload.setSizeMax(10 * 1024 * 1024); // 10MB try { // 解析请求 List<FileItem> items = upload.parseRequest(request); String heroName = ""; File uploadedFile = null; for (FileItem item : items) { if (item.isFormField()) { // 处理普通表单字段,如heroName if ("heroName".equals(item.getFieldName())) { heroName = item.getString("UTF-8"); } } else { // 处理文件字段,如filepath uploadedFile = new File("D:/image/" + item.getName()); item.write(uploadedFile); } } // 设置响应,重定向到显示图片的页面 response.sendRedirect("displayImage.jsp?filename=" + URLEncoder.encode(uploadedFile.getName(), "UTF-8")); } catch (Exception e) { e.printStackTrace(); // 处理错误,例如文件过大、无法写入等 } } ``` 最后,我们需要创建一个`displayImage.jsp`页面,用于展示上传的图片。这个页面可以简单地通过读取并输出文件内容来实现: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>显示图片</title> </head> <body> <h1>已上传的图片</h1> <img src="${pageContext.request.contextPath}/showImage?filename=<%=request.getParameter("filename")%>" alt="上传的图片"> </body> </html> ``` 同时,需要创建一个`ShowImageServlet`来处理图片的显示,通过获取请求参数中的`filename`,读取对应文件并以流的形式返回给客户端: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = request.getParameter("filename"); File file = new File("D:/image/" + filename); if (file.exists() && file.isFile()) { response.setContentType("image/jpeg"); // 根据实际文件类型调整 FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) != -1) { os.write(buffer, 0, len); } fis.close(); os.flush(); os.close(); } else { response.getWriter().write("图片未找到"); } } ``` 以上就是使用Java Servlet上传图片到服务器指定文件夹,并在新页面显示的完整流程。通过这个过程,你可以理解到文件上传的核心技术和注意事项,包括前端表单设置、Servlet处理文件上传以及如何在新的页面中展示上传的文件。这个例子不仅有助于深入理解Servlet的工作原理,也为实际项目中的类似需求提供了参考。
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 10
- 资源: 947
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构