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. SQL 获取本年第几周

    根据输入的日期得出,算出是本年第几周 select datepart(week,getdate())

  2. 黄聪:查看mysql数据库真正的data目录

    终于找到了mysql数据库data目录在哪里! 用show variables like 'datadir',可查看真正的data目录 原文:http://blog.csdn.net/dmz1981/ ...

  3. c++学习-继承

    继承 #include <iostream> using namespace std; class father{ public: void getHeight(){cout<< ...

  4. phpStudy(lnmp)集成环境安装

    phpStudy phpStudy » PHP教程 » phpStudy for Linux (lnmp+lamp一键安装包) phpStudy for Linux (lnmp+lamp一键安装包) ...

  5. Rstudio匹配中文

    之前在操作csv文件时一般是将中文字符在excel或用Perl将其中的中文转换成对应的英文,但是最近碰到不得不在R里面进行中文符操作,发现R里面的匹配是无法识别的中文符的.比如: df <- r ...

  6. C语言位运算符及作用:与、或、异或、取反、左移和右移

    一.& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0应用:(1)清零 若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数 ...

  7. MongoDB Tool

    robomongo MongoBooster: [推薦]MongoChef:http://3t.io/mongochef/download/ MongoVUE 是个比较好用的MongoDB客户端,不过 ...

  8. win xp32位与64位怎么查看是多少位系统

    方法一: Windows XP/Server2003几乎都是32位的操作系统 1. 单击“开始”,然后单击“运行”. 2. 在“打开”框中,键入cmd(再键入systeminfo)或者winmsd.e ...

  9. 20145305 《Java程序设计》第4周学习总结

    教材学习内容总结 1.子类只能继承一个父类 2.检查多态语法逻辑是否正确,方式是从=号右边往左读:右边是不是一种左边(右边类型是不是左边类型的一种子类) 3.可以使用abstract标示该方法为抽象方 ...

  10. C Primer Plus(第五版)4

    第四章 字符串和格式化输入输出 4.2 字符串简介 字符串(character string)就是一个或多个字符的序列.下面是一个字符串的例子: “Zing went the strings of m ...