`

使用servlet上传文件

阅读更多
--------------转载,以备查询之需----------------------
  在Web 应用程序中,用户向服务器上传文件是非常普遍的操作。使用Servlet 实现文件的上传是比较简单的。

  编程思路:下面的UploadServlet.java ,其主要功能为从InputStream 中读取文件内容,将上传文件保存在根目录下,且文件名与上传文件的文件名一致。

  UploadServlet.java 的源代码如下:(代码节选)

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class UploadServlet extends HttpServlet
{
//default maximum allowable file size is 1000k
static final int MAX_SIZE = 1024000;
//instance variables to store root and success message
String rootPath, successMessage;
/**
* init method is called when servlet is initialized.
*/
public void init(ServletConfig config) throws ServletException
{
super.init(config);
//get path in which to save file
rootPath = config.getInitParameter("RootPath");
if (rootPath == null)
{
rootPath = "/";
}
/*Get message to show when upload is complete. Used only if
a success redirect page is not supplied.*/
successMessage = config.getInitParameter("SuccessMessage");
if (successMessage == null)
{
successMessage = "File upload complete!";
}
}
/**
* doPost reads the uploaded data from the request and writes
* it to a file.
*/
public void doPost(HttpServletRequest request,
HttpServletResponse response)
{
ServletOutputStream out=null;
DataInputStream in=null;
FileOutputStream fileOut=null;

try
{
/*set content type of response and get handle to output
stream in case we are unable to redirect client*/
response.setContentType("text/plain");
out = response.getOutputStream();

//get content type of client request
String contentType = request.getContentType();
out.println("\ncontentType= " + contentType);

//make sure content type is multipart/form-data
if(contentType != null && contentType.indexOf(
"multipart/form-data") != -1)
{
//open input stream from client to capture upload file
in = new DataInputStream(request.getInputStream());
//get length of content data
int formDataLength = request.getContentLength();
out.println("\nContentLength= " + formDataLength);

//allocate a byte array to store content data
byte dataBytes[] = new byte[formDataLength];
//read file into byte array
int bytesRead = 0;
int totalBytesRead = 0;
int sizeCheck = 0;
while (totalBytesRead < formDataLength=
{
//check for maximum file size violation
sizeCheck = totalBytesRead + in.available();
if (sizeCheck > MAX_SIZE)
{
out.println("Sorry, file is too large to upload.");
return;
}

….
….
}
  编程技巧说明:

  首先定义上传文件最大字节为1024K(1M),上传文件保存在根目录(/)下,从请求的InputStream 读取实体数据,根据请求头Content-Type 和contenLength 等值,从实体数据中解析出表单Form 数据中的filename 和Content-Type 等值,然后将实体数据中真正属于上传文件的内容保存到服务器上的根目录文件中。

  其中用到涉及中文输出:
String fileStr=new String(dataBytes,"ISO8859_1");
fileOut=new FileOutputStream(rootPath+fileName);
fileOut.write(fileStr.getBytes("ISO8859_1"),0,fileStr.legth());


  UploadFile.html 的源代码如下:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<title>Upload a File</title>
</head>
<body>
<h1>文件上传 </h1>
<h2>提示:您的浏览器必须能支持文件上传!</h2>
<form action="servlet/uploadServlet" method="POST" enctype="multipart/form-data">
<div align="left">
<pre>发送文件:<input type="file" size="40" name="upl-file"> </BR>
<input type="submit" value="开始发送" now>
<input type="reset" value="重 设"></pre>
</div>
</form>
</body>
</html>


  小结:

  (1) Servlet 编程要求读者已经掌握了Java 语言程序设计,最好对面向对象也有一定的了解。Java 语言程序设计最主要的是对Java 的类库的使用,同样掌握Servlet 编程也要求熟练使用Sun 公司提供的JSDK。

  (2) 一个好的Servlet 程序必须要考虑得全面。由于Servlet 在服务器上执行,为客户提供服务,有时可能会有多个客户同时向一个服务器发请求,这就要求Servlet 程序必须能够保证良好的并发性。允许Servlet 并发执行,就要解决Servlet 中变量和同步访问以及共享的问题,尤其要特别注意服务器的一些昂贵的资源。另一方面,Servlet 要把处理结果返回给客户,要求Servlet 充分考虑响应的速度和响应结果的简洁明了,同时对客户的错误请求有一定的容错性。

  (3) 解决Servlet 中文输出问题

  当Servlet 输出的文档中有中文时,需要在Servlet 中使用下面的语句来指明:
response.setContentType("text/html;charset=gb2312");

  在JSP中使用:
<%@page contentType="text/html;charset=gb2312"%>

  这两者是等效的。

  如果在Servlet 中文显示有问题,可从以下几方面来考虑:

  * 修改区域设置---在控制面板中选择区域设置,如设为英语(美国)。

  * 在编译Servlet 时加入代码选项,如:javac -encoding iso8859-1 ghqServlet.java

  * 在源程序中加入编码转换函数,如:out.println(new String("请输入用户名").getBytes("GBK"),"ISO8859_1"));

  或者使用下面的方法:
String Str="请输入用户名";Byte[] tempByte=Str.getBytes("ISO8859_1");String tempStr=new String(tempByte);

  这样tempStr 中的中文就可以正确显示了。

  由于Servlet 采用不同的引擎,其中文的解决方法可能不同;因此,当出现中文显示问题时,建议一定要多实验,最终总会得到解决。

  (4) Java Servlet 程序弥补了 Applet 程序的不足, Servlet 主要应用在HTTP Servlet 接收请求(HttpServletRequest接口)和产生响应(HttpServletResponse接口)、使用Cookies 及会话管理(HttpSession 接口)应用、Java Servlet 在网络上的编程应用如利用Servlet 上传和下载文件、Servlet 的数据库编程、在Servlet 中发送和接受邮件以及Java Servlet 在RMI和XML等方面的应用,因此Servlet 的编程应用还是比较广泛的。

  通常 Servlet 可以使用以下的方法调用:

  * 客户通过访问 Servlet 产生的文档来调用

  Server 得到一个访问文档的请求后,查找配置参数,就会发现所需文档不是一个静态文档,而是由 Servlet 对象产生的,于是服务器就会把请求传给 Servlet,Servlet 调用 "service" 方法产生输出。这种方法与传统的调用 CGI 的方法类似。

  * 直接通过 URL 调用 Servlet

  客户(浏览器)使用以下格式的 URL 调用:

http://Servlet_Host_Name/servlet/<servlet URL>

<servlet URL>是指向 Servlet 位置的普通的URL,它的格式如下所示:

name?para1=value1&para2=value2...

  其中,name 是 Servlet 的名字,"?" 后面跟的是一串参数,para1 是第一个参数名,value1是它的值,para1 是第二个参数名,value2是它的值,以此类推。通常Servlet 存放的位置可能与服务器不在同一台机器上,这时服务器就要动态加载、初始化和执行Servlet 类。

  * 通过 SSI(Server-Side Includes) 标志调用

  任何一个以.sthml 为扩展名的文件都是服务器要分析的文件。在该文件中,如果出现了Servlet标志,那么服务器就会运行该Servlet,并把它的输出结果插入标志所指示的地方。

  * 把 Servlet 放在/servlet/目录下

  如果一个 Servlet 的类文件被放在/servlet/目录下,那么就可以直接使用它的类名调用它。

  * 通过 Filter Chain 调用

  这种方法一般要把 Servlet 配置成当一个特定的 MIME 类型被设置为响应时再调用。

  但Servlet 也有它的缺点:

  * 在复杂的HTML 网页中,加入的动态部分如果用Servlet 来处理的话,那对程序员来说简直是一场噩梦。

  * Servlet 要进行编译、放入执行码等复杂的调用过程。

  正是由于Servlet存在的缺点,才出现使用JSP 技术来解决上面的问题,这也正是JSP 的优点。

分享到:
评论

相关推荐

    servlet 上传文件流保存到数据库

    以上就是使用Servlet上传文件流并保存到数据库的基本流程。实际应用中可能还需要处理一些额外的问题,比如错误处理、文件大小限制、文件类型检查等。同时,为了提高性能和安全性,可以考虑使用连接池管理数据库连接...

    基于servlet的简易文件上传(带进度条)

    同时,需要设置`enctype="multipart/form-data"`,因为这是上传文件所必需的MIME类型。 接下来,我们需要在Servlet中解析请求的多部分数据。Java标准库提供了一个名为`javax.servlet.http.Part`的接口,它代表了...

    servlet 文件上传下载例子

    在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...

    ajax异步文件上传,servlet处理

    在现代Web应用中,用户经常需要上传文件,如图片、文档等。为了提供更好的用户体验,开发者通常会采用AJAX(Asynchronous JavaScript and XML)技术实现异步文件上传,避免传统方式下页面刷新带来的中断感。AJAX允许...

    异步servlet上传文件,解决网速慢以及大文件,耗完线程问题

    假如一个场景,用户上传文件,某些用户网速较慢,同时存在100个这样的用户,如果BIO且最大线程设为100会导致线程用完。NIO怎么来解决这个问题? 本实例采用tomcat8作为容器,开启异步servlet读写事件,解决高并发IO...

    servlet实现文件上传下载

    本教程将详细讲解如何使用Servlet实现文件的上传和下载功能,其中涉及到的主要技术点包括Servlet API、Multipart解析以及文件流操作。 首先,我们需要了解Servlet在文件上传中的作用。Servlet在接收到客户端(通常...

    JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao、service、servlet 这三层是主要的结构,类似 MVC ...

    利用COS Servlet上传文件

    总的来说,利用COS Servlet上传文件涉及到客户端的表单提交和服务器端的Servlet处理,需要对HTTP协议、文件上传、MultipartRequest以及可能的业务逻辑有深入理解。同时,确保在实现过程中充分考虑安全性,以提供健壮...

    jsp与servlet 上传文件 javaBean上传文件

    本篇文章将深入探讨如何使用JSP与Servlet进行文件上传,并特别关注如何解决中文文件名乱码的问题。 首先,我们需要理解文件上传的基本流程。当用户在JSP页面上选择文件并提交表单时,JSP会将文件数据封装到HTTP请求...

    jsp,servlet上传下载文件

    2. 服务器端处理上传文件:在服务器端,使用 servlet 处理上传的文件,并将其存储到指定的位置。 3. 文件下载:在服务器端,提供文件下载的接口,客户端可以通过该接口下载文件。 jsp 页面的实现 在 jsp 页面中,...

    Servlet上传文件并显示进度条

    "Servlet上传文件并显示进度条"这个主题涵盖了如何在用户上传大文件时提供实时进度反馈,以增强用户体验。在这个过程中,我们需要处理以下几个核心知识点: 1. **Multipart解析器**:Servlet 3.0及以上版本引入了...

    使用Servlet实现文件的上传与下载

    3. **文件存储**:`FileItem`对象包含上传文件的信息,如文件名、内容等。我们需要将其内容保存到服务器的某个位置,可以选择临时目录或指定的存储路径。 **文件下载:** 1. **HTTP响应准备**:在Servlet中,我们...

    Java 文件上传的实例详解

    在本文中,我们将详细介绍 Java 文件上传的实例详解,包括使用 JSmartUpload 组件上传文件、使用 Servlet 上传文件等方法。 1. 使用 JSmartUpload 组件上传文件 JSmartUpload 是一个流行的 Java 文件上传组件,...

    JAVA_servlet的文件上传案例

    在`doPost`中,我们可以遍历`HttpServletRequest`的`Part`对象集合,获取每个上传文件的信息。以下是一个基本示例: ```java @Override protected void doPost(HttpServletRequest request, HttpServletResponse ...

    CKEditor 上传文件(Servlet实现)

    - "CKEditor上传文件Servlet版本1.0"这个压缩包可能包含了CKEditor的示例配置、Servlet的Java源代码、HTML页面和可能的web.xml配置文件。解压并根据这些文件进行部署和测试。 通过以上步骤,你可以成功地在...

    基于servlet的文件上传

    本示例基于Servlet和Apache Commons FileUpload库实现了一个简单的文件上传系统。下面将详细介绍这个过程及其涉及到的关键知识点。 首先,`servlet`是Java EE(企业版)的一部分,它是一种用于扩展Web服务器功能的...

    servlet上传下载文件

    总结来说,"servlet上传下载文件"是一个使用Java Servlet实现的Web应用程序,允许用户上传文件至服务器,并能够从服务器下载这些文件。这个系统的核心在于Servlet的`doPost`或`doGet`方法,它们处理HTTP请求,读取或...

    servlet上传文件详细解析

    servlet上传文件详细解析 大家好好看

    servlet实现的上传文件实例

    在这个"Servlet实现的上传文件实例"中,我们将深入探讨如何使用Servlet来处理客户端上传的文件。上传文件是Web应用程序中常见的功能,例如用户提交简历、上传图片或者共享文档等。以下是关于这个主题的详细知识点: ...

    文件上传与下载servlet

    - **大小限制**:设置上传文件大小限制,避免过大文件导致服务器资源耗尽。 - **多线程处理**:对于大文件,可以考虑使用多线程处理,提高性能。 - **安全检查**:验证上传文件的类型和内容,防止恶意文件(如病毒)...

Global site tag (gtag.js) - Google Analytics