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 ...
随机推荐
- 黄聪:Discuz自制模板带jquery时与discuz本身冲突解决办法
由于JQuery的效果很好,在制作模板时难免会用到各种jquery效果.可是做过模板的人就会发现加上自己的juery代码后,discuz自带的一些下拉功能就不可以使用了,其实原因就是discuz和JQ ...
- BIP_开发案例03_将原有Report Builer报表全部转为XML Publisher形式(案例)
2014-05-31 Created By BaoXinjian
- CE_现金账户转账汇入汇出交易(案例)(未完成)
2014-07-15 BaoXinjian 一.摘要 二.案例 通过 Oracle Payments 结算事务处理 通过付款模板 事物处理子类型 已验证 -> 正在结算中 ->
- 3. Windows根据端口查进程---ADB 相关报错 ADB server didn't ACK cannot bind ':5037'
1.ADB server didn't ACK,一般报ADB相关的错误,大部分是端口被占用了 处理方法: 在命令行输入>adb nodaemon server 如果返回: cannot bind ...
- memcache 内部原理实现
Lazy Expiration memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期.这 种技术被称为 lazy(惰性)expiration.因此,mem ...
- Input gameobject vector3 c#
Input类中的常用方法 bool w=Input.GetKey(KeyCode.W);//检测是否按下键盘W Input.GetKeyDown(KeyCode.W);//表示检测按下时 Input. ...
- SAR命令
前面已经介绍了 vmstat和top命令的解析及使用,下面我们来学习一个更重要的命令sarsar命令可以通过参数单独查看系统某个局部的使用情况 sar 命令行的常用格式: sar [options] ...
- java虚拟机参数设置
-Xms8000M 初始化的堆大小 -Xmx8000M 堆的最大值 -XX:+HeapDumpOnOutOfMemoryError 堆溢出时Dump出当前内存堆转储快照以便事后分析 -XX:P ...
- 彻底删除mysql服务
http://wenku.baidu.com/link?url=XEOFkNXElJV6FoBDOs7m7BlDUv9-ZuLbRbeVwbMa7AXa8ukZ6oIpiYYy3gNnITmP911M ...
- DELPHI下的SOCK编程(转)
DELPHI下的SOCK编程 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为 ...