servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象。下面我实现了文件的上传以及将上传的文件显示在网页上(主要目的是实现本地文件在网页上的显示,我采取了先上传文件,在读取上传的文件,将读取的内容显示在网页上)。

Java代码实现:

 package FileUpload.servlet;

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part; /**
* Servlet implementation class FileUploadServlet
*/
//上传文件被保存的路径
@MultipartConfig(
location="E:\\eclipse\\workspace\\TestAceEditor\\FileUpload"
)
@WebServlet(urlPatterns={"/fileUpload"}) public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//private static final Log log = LogFactory.getLog(UploadFileAction.class);
//private String fileNameExtractorRegex = "filename=\".+\""; /**
* @see HttpServlet#HttpServlet()
*/
public FileUploadServlet() {
super();
// TODO Auto-generated constructor stub
} //获得指定文件的内容
private String getFileContent(String fileName){
File file = new File(fileName);
BufferedReader reader = null;
String ans = "";
try{
reader = new BufferedReader(new FileReader(file));
String tmpString = null;
//一行一行的读取文件里面的内容
while((tmpString = reader.readLine()) != null){
ans += tmpString + "\n";//保存在ans里面
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(reader != null)
{
try{
reader.close();
}catch(IOException e1){
e1.printStackTrace();
}
}
}
//返回获得的文件内容
return ans;
}
//获得上传文件的文件名
private String getFilename(Part part){ if(part == null){
return null;
}
//获得文件名的方法是根据一本书上的代码来的,忘记书名了,以后补上
String contentDispositionHeader = part.getHeader("content-disposition"); String fileName = null;
String[] elements = contentDispositionHeader.split(";");
for(String element:elements){
if(element.trim().startsWith("filename")){
fileName = element.substring(element.indexOf('=') + 1).trim().replace("\"", "");
break;
}
}
fileName = fileName.substring(fileName.lastIndexOf('\\') + 1);
// Pattern pattern = Pattern.compile(fileNameExtractorRegex);
// Matcher matcher = pattern.matcher(contentDispositionHeader);
// String fileName = null;
// if(matcher.find()){
// fileName = matcher.group();
// fileName = fileName.substring(10, fileName.length()-1);
// } return fileName;
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.getRequestDispatcher("fileUpload.jsp").forward(request, response);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//set the encoding
request.setCharacterEncoding("UTF-8"); //请求(form中为file类型的输入框的名字为filename)发送过来时,使用getPart()方法取得Part实现对象
Part part = request.getPart("filename");
String fileName = getFilename(part); if(fileName != null && !fileName.isEmpty()){
part.write(fileName);
} //从指定文件路径获得文件内容
String filePath = "E:\\eclipse\\workspace\\TestAceEditor\\FileUpload" + "\\" + fileName;
String fileContent = getFileContent(filePath); //write to browser
// response.setContentType("text/html");
// PrintWriter writer = response.getWriter();
// writer.print("<br/>Uploaded file name: "+ fileName);
// writer.print("<br/>Size: "+part.getSize());
//
// String author = request.getParameter("author");
// writer.print("<br/>Author: "+author);
//设置属性,在jsp文件中可以使用EL获得fileContent对象里的内容
request.setAttribute("fileContent", fileContent);
request.getRequestDispatcher("fileUpload.jsp").forward(request, response); } }

jsp代码如下:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>fileupload</title> <style type="text/css" media="screen">
body {
overflow: hidden;
} #editor {
margin: 0;
position: absolute;
top: 130px;
bottom: 0;
left: 0;
right: 0;
}
</style> </head> <body> <div style="margin:left">
<h1>editor my code</h1>
</div> <div style="background:#BFEFFF">
<form action="fileUpload" enctype="multipart/form-data" method="post">
Select file to show <input type="file" name="filename"/>
<input type="submit" value="Show"/>
</form>
</div> <div id="editor">
<!-- show the content in the uploading file -->
${fileContent}
</div> </body>
</html>

上传效果如下:

不用管里面说的图2(其实就是Java代码中说的MultipartConfig中的location),我把之前写文档的截图直接拿过来~

注意编码,统一utf-8吧,包括上传的文件的编码。

java servlet上传文件并把文件内容显示在网页中的更多相关文章

  1. JAVA servlet 上传文件(commons-fileupload, commons-io)

    <1>获取二进制文件流并输出 InputStream inputStream = request.getInputStream(); BufferedReader reader = new ...

  2. java servlet上传centos服务器

    前面一篇随笔说了Centos上架设javaWeb运行环境的方法,这篇主要讲打包上传服务器. 一.数据库连接文件.propeties 为了数据库安全,mysql3306端口访问我做了ip访问限制,由于m ...

  3. JAVA SERVLET上传文件的样码

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  4. Servlet上传文件

    Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...

  5. 原生Servlet 上传文件

    依赖jar <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons ...

  6. JSP && Servlet | 上传文件

    在WebContent下新建index.jsp 要点: 1.  表单 method 属性应该设置为 POST 方法,不能使用 GET 方法. 2.  表单 enctype 属性应该设置为 multip ...

  7. 使用Servlet上传文件

    使用浏览器向服务器上传文件其本质是打开了一个长连接并通过TCP方式传输数据.而需要的动作是客户端在表单中使用file域,并指定该file域的name值,然后在form中设定enctype的值为mult ...

  8. Servlet 上传下载文件

    上传文件 1)在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮 2)表单需要上传文件时,需指定表单 enctype 的值 ...

  9. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

随机推荐

  1. Redis内存使用优化与存储(转)

    Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部 ...

  2. jquery.cookie.js存与取以及过期时间设置

    $(function(){ $(".active_out .abtn").click(function(){ $(this).parents(".active_out&q ...

  3. jsch ssh服务器调用Linux命令或脚本的小问题

    代码如下: public static boolean execshell(String command, String user, String passwd, String host) throw ...

  4. LinkedHashMap的实现原理(复习)

    1. LinkedHashMap概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映 ...

  5. IGS_学习笔记10_IREP监控SOA Integration和日志设定(案例)

    20150506 Created By BaoXinjian

  6. OAF_架构MVC系列2 - Model的概述(概念)

    2014-06-22 Created By BaoXinjian

  7. curl 同时发送多个请求

    // 创建一对cURL资源 $ch1 = curl_init(); $ch2 = curl_init(); // 设置URL和相应的选项 curl_setopt($ch1, CURLOPT_URL, ...

  8. linux 命令(1)screen

    一.screen的安装和用法 Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,这意味着你能够使用一个单一的终端窗口运行多终端的应用. Screen中有会话的概念,用户可以在一个s ...

  9. 转载__UI之Frgment

    http://www.cnblogs.com/plokmju/p/3239265.html 前言 开门见山开篇名义,本篇博客将讲解一下Android中Fragment的内容,必要的地方会提供相应的演示 ...

  10. Spring中IoC的入门实例

    Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...