java servlet上传文件并把文件内容显示在网页中
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上传文件并把文件内容显示在网页中的更多相关文章
- JAVA servlet 上传文件(commons-fileupload, commons-io)
<1>获取二进制文件流并输出 InputStream inputStream = request.getInputStream(); BufferedReader reader = new ...
- java servlet上传centos服务器
前面一篇随笔说了Centos上架设javaWeb运行环境的方法,这篇主要讲打包上传服务器. 一.数据库连接文件.propeties 为了数据库安全,mysql3306端口访问我做了ip访问限制,由于m ...
- JAVA SERVLET上传文件的样码
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- Servlet上传文件
Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...
- 原生Servlet 上传文件
依赖jar <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons ...
- JSP && Servlet | 上传文件
在WebContent下新建index.jsp 要点: 1. 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法. 2. 表单 enctype 属性应该设置为 multip ...
- 使用Servlet上传文件
使用浏览器向服务器上传文件其本质是打开了一个长连接并通过TCP方式传输数据.而需要的动作是客户端在表单中使用file域,并指定该file域的name值,然后在form中设定enctype的值为mult ...
- Servlet 上传下载文件
上传文件 1)在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮 2)表单需要上传文件时,需指定表单 enctype 的值 ...
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
随机推荐
- storm概念学习及流处理与批处理的区别
在过去10 年中,随着互联网应用的高速发展,企业积累的数据量越来越大,越来越多.随着Google MapReduce.Hadoop 等相关技术的出现,处理大规模数据变得简单起来,但是这些数据处理技术都 ...
- spark单机模式简单搭建
待安装列表hadoophivescalaspark一.环境变量配置:~/.bash_profilePATH=$PATH:$HOME/bin export PATH JAVA_HOME=/usr/loc ...
- DBA_Oracle Erp中某个Form需进行升级Patch详解(案例)
2014-06-21 Created By BaoXinjian
- SPOJ 694. Distinct Substrings (后缀数组不相同的子串的个数)转
694. Distinct Substrings Problem code: DISUBSTR Given a string, we need to find the total number o ...
- jq鼠标点击滚动锚点
鼠标点击滚动锚点 //滚动锚点 $('.menus-c ul li a').click(function(){ //alert(); $('html, body').animate({ scrollT ...
- cookie和会话状态的工作原理
一:存在两种类型的cookie: 1>会话cookie (session cookie) 不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口, ...
- ubuntu 安装compiz后 黑屏无法进入处理
因为我们显卡的原因而出现不兼容,设置之后会出现菜单栏消失.窗口假死等现象,请保持平静心态,默默重启,如果发现进不去桌面了,可以试试Ctrl+Alt+F1进入字符界面,输入以下命令: dconf res ...
- 使用Jenkins搭建持续集成服务
1. 什么是持续集成 持续集成 (Continuous Integration, 简称 CI) 是软件工程中的一种实践, 用于将开发人员不同阶段的工作成果集成起来, 通常一天之中会进行多次. 持续集成 ...
- C++学习15 继承权限和继承方式
C++继承的一般语法为: class 派生类名:[继承方式] 基类名{ 派生类新增加的成员 }; 继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的).private(私有的)和 ...
- dropdownlist 控件的判断
问题: 三个级联 下拉框.在不点击第一级别直接点击第二级别时,弹出提示窗口."请先选择XXX"之类的,理想的结果是想要下图 这样的: 由于使用的微信公众号的内置浏览器,所以问题来了 ...