JSP程序设计实例教程第16讲 文件上传和-发送邮
用JSP实现拖拽上传文件和文件夹
用JSP实现拖拽上传文件和文件夹JSP(JavaServer Pages)是一种动态网页技术,允许将Java代码嵌入到HTML页面中。
拖拽上传文件和文件夹是一种常见的网页交互功能,可以使用JSP来实现。
在实现拖拽上传文件和文件夹功能之前,首先需要了解一下拖拽上传的基本原理。
在HTML中,可以通过Drag and Drop API来获取拖拽的文件和文件夹。
然后,可以使用JavaScript将拖拽的文件和文件夹发送到服务器端,服务器端可以使用JSP来处理这些文件和文件夹。
以下是一个基本的实现拖拽上传文件的JSP页面的示例:```htmlpageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>拖拽上传文件</title><script>function handleDrop(event)event.preventDefault(; // 禁止浏览器打开文件var files = event.dataTransfer.files;//遍历上传的文件for (var i = 0; i < files.length; i++)var file = files[i];// 创建FormData对象,用于发送文件到服务器var formData = new FormData(;formData.append("file", file);// 创建一个XMLHttpRequest对象,发送文件到服务器var xhr = new XMLHttpRequest(;xhr.open("POST", "upload.jsp", true);xhr.onreadystatechange = functioif (xhr.readyState == 4 && xhr.status == 200)//上传成功console.log(xhr.responseText);}};xhr.send(formData);}}</script></head><body ondragover="event.preventDefault(;"ondrop="handleDrop(event);"><h1>拖拽上传文件</h1><p>将文件拖拽到此处上传</p></body></html>```当文件被拖拽到页面的时候,`handleDrop(`函数会被调用。
JSP实用教程:文件的上传
<% SmartUpload su = new SmartUpload();
catch (Exception e){ %> <script language=javascript>
alert("只允许上传.jpg/.gif/.png/.bmp类型图片文件");
window.location='upload_image.html'; </script>
<%
su.initialize(pageContext); // 上传初始化
try{
// 设定允许上传的文件(通过扩展名限制)
su.setAllowedFilesList("jpg,png,gif,bmp");
su.upload(); // 上传文件 su.save(“/upload”); // 设置保存目录 }
上传文件处理页面:new_upload.jsp
文件上传成功 文件长度:28376 文件名:9.jpg 文件扩展名:jpg
文件上传页面:upload_new.html
<form method="post" action="new_upload.jsp" enctype="multipart/form-data" > <input type="file" name="file"> <input type="submit" name="Submit" value="上传"> </form> 知识点:表单中enctype=“multipart/form-data” 的意思,是设置表单的MIME编码。默认情况,这个编 码格式是application/x-www-form-urlencoded,不能用 于文件上传;只有设置为multipart/form-data,才能完 整的传递文件数据
jsp之文件上传
很多初学jsp的同志都在实现文件上传到服务器这方面不是很了解,今天在这里我会帮助大家慢慢的实现这一功能。
准备工作:1.到网上下载两个包第一个叫做commons-fileupload-1.2.1.jar第二个叫做commons-io-1.3.2.jar2. 建一个项目用来实现文件上传我创建的Web项目名为fileUpload,截图如下3.我们把从网上下载下来的包copy到WebRoot目录下Web-INF下的子目录lib目录里然后打开Referenced Libraries,你会看见两个包已经存在于里面了。
下面我们开始实现文件上传1. 首先我们创建一个名为uploadFile.jsp的页面,如下图:点击浏览,可以出现以下画面源代码如下:<%@page language="java"import="java.util.*"pageEncoding="UTF-8"%> <%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+ ":" +request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>实现文件上传到服务器</title><meta http-equiv="pragma"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="0"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"> <meta http-equiv="description"content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form action="doFileUpload.jsp"method="post"enctype="multipart/form-data">文件:<input type="file"name="chooseFile"/></br>姓名:<input type="text"name="userName"/></br><input type="submit"value="提交"></form></body></html>注意:form表单里的enctype=”multipart/form-data”这一属性一定要写,这是用来标明此表单的类型是文件类型的。
jsp实现文件上传和下载(代码及说明)
特点:1.可以多文件上传;2.返回上传后的文件名;3.form表单中的其他参数也可以得到。
先贴上传类,JspFileUploadpackage com.vogoal.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Hashtable;import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; /** vogoalAPI 1.0* Auther SinNeR@* by * mail: vogoals@*//*** JSP上传文件类** @author SinNeR* @version 1.0*/public class JspFileUpload {/** request对象*/private HttpServletRequest request = null;/** 上传文件的路径*/private String uploadPath = null;/** 每次读取得字节的大小*/private static int BUFSIZE = 1024 * 8;/** 存储参数的Hashtable */private Hashtable paramHt = new Hasptable();/** 存储上传的文件的文件名的ArrayList */private ArrayList updFileArr = new ArrayList();/*** 设定request对象。
JSP实现文件上传功能
JSP实现⽂件上传功能本⽂实例为⼤家分享了JSP实现⽂件上传功能的具体代码,供⼤家参考,具体内容如下⼀、准备部分需要fileupload.jar与io.jar包共同完成。
构建完成路径后可继续。
⼆、页⾯部分<form action="UploadServlet" method="post" enctype="multipart/form-data">学号:<input type="text" name="sno"/><br/>姓名:<input type="text" name="sname"/><br/>上传照⽚:<input type="file" name="spicture"/><br/><input type="submit" value="注册"/></form>注意:1.⽂件上传必须要使⽤post,以避免⽤get⽅法时传输总量超过搜索框所能承载最⼤字符数。
2.必须加⼊enctype="multipart.form-data"字段3.⽂件处需⽤“file”三、Servlet部分package webtest;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import mons.fileupload.FileItem;import mons.fileupload.FileItemFactory;import mons.fileupload.FileUploadBase;import mons.fileupload.FileUploadException;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;/*** Servlet implementation class UploadServlet*/@WebServlet("/UploadServlet")public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");// 请求编码处理,传输时response.setCharacterEncoding("utf-8");// 响应编码处理,传输时response.setContentType("utf-8");// 响应编码处理,显⽰时boolean isMultipart = ServletFileUpload.isMultipartContent(request);// 判断是否有entype="multipart/form-data"部分if (isMultipart) {try {FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);//设置上传时的内存缓冲区⼤⼩,超出时写⼊临时⽂件 10kb((DiskFileItemFactory) factory).setSizeThreshold(10240);//单位byte//设置临时⽂件⽬录,防⽌系统空间不⾜((DiskFileItemFactory) factory).setRepository(new File(request.getSession().getServletContext().getRealPath("Uploadtemp")));//动态获取Uploadtemp⽂件夹位于该项⽬中的位置 //控制上传单个⽂件的最⼤值 20kbupload.setSizeMax(20480);//单位byteList<FileItem> items = upload.parseRequest(request);// 解析form中的所有请求字段,并保存在item中Iterator<FileItem> iter = items.iterator();while (iter.hasNext()) {// 解析时⽆顺序,因此需根据名字查找FileItem item = iter.next();if (item.isFormField()) {//⾮⽂件数据String itemName = item.getFieldName();//获取⾮⽂件的范围数据名if (itemName.equals("sno")) {int sno = -1;sno = Integer.parseInt(item.getString("utf-8"));}else if (itemName.equals("sname")) {String sname = null;sname = item.getString("utf-8");}else {System.out.println("其他字段...");}} else {//⽂件上传String fileName = item.getName();//获取⽂件范围数据。
文件上传讲解
文件上传讲解文件上传是指将本地的文件上传至服务器的过程。
在Web开发中,常常需要实现文件上传功能,如用户头像、音频文件等的上传。
在前端开发中,使用POST方法来实现文件上传是最常见的方式之一实现文件上传功能常常涉及到两个关键环节:前端页面的设计和后端服务器的处理。
下面将详细讲解文件上传的实现过程。
一、前端页面的设计1.HTML表单在HTML中,可以使用<input type="file">元素来创建文件上传表单。
该元素可以让用户选择本地文件,并将其路径保存在表单的value属性中。
```html<form action="upload.php" method="post"enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="上传文件"></form>```需要注意的是,表单中的enctype属性必须设置为"multipart/form-data",以正确处理文件上传。
2. JavaScript代码为了提升用户体验,可以使用JavaScript进行文件路径的显示和预览。
```javascriptvar fileInput = document.querySelector('input[type="file"]');var fileNameDisplay = document.querySelector('#file-name-display');fileInput.addEventListener('change', function(event)fileNameDisplay.textContent =event.target.value.split('\\').pop(;});```以上代码通过监听文件选择框的change事件,获取用户选择的文件路径,然后通过字符串操作,截取文件名并显示在页面中。
JSP上传文件
UploadExample.jsp<%@ page contentType="text/html;charset=gb2312"%> <html><title><%= application.getServerInfo() %></title><body>上传文件程序应用示例<form action="doUpload.jsp" method="post"enctype="multipart/form-data"><%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。
--%>请选择要上传的文件<input type="file" name="upfile" size="50"><input type="submit" value="提交"></form></body></html>doUpload.jsp<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.io.*"%><%@ page import="java.util.*"%><%@ page import="javax.servlet.*"%><%@ page import="javax.servlet.http.*"%><html><head><title>upFile</title></head><body bgcolor="#ffffff"><%//定义上载文件的最大字节int MAX_SIZE = 102400 * 102400;// 创建根路径的保存变量String rootPath;//声明文件读入类DataInputStream in = null;FileOutputStream fileOut = null;//取得客户端的网络地址String remoteAddr = request.getRemoteAddr();//获得服务器的名字String serverName = request.getServerName();//取得互联网程序的绝对地址String realPath = request.getRealPath(serverName);realPath =realPath.substring(0,stIndexOf("\\"));//创建文件的保存目录rootPath = realPath + "\\upload\\";//取得客户端上传的数据类型String contentType = request.getContentType();try{if(contentType.indexOf("multipart/form-data") >= 0){ //读入上传的数据in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength();if(formDataLength > MAX_SIZE){out.println("<P>上传的文件字节数不可以超过" + MAX_SIZE + "</p>");return;}//保存上传文件的数据byte dataBytes[] = new byte[formDataLength];int byteRead = 0;int totalBytesRead = 0;//上传的数据保存在byte数组while(totalBytesRead < formDataLength){byteRead =in.read(dataBytes,totalBytesRead,formDataLength); totalBytesRead += byteRead;}//根据byte数组创建字符串String file = new String(dataBytes);//out.println(file);//取得上传的数据的文件名String saveFile =file.substring(file.indexOf("filename=\"") + 10); saveFile = saveFile.substring(0,saveFile.indexOf("\n")); saveFile = saveFile.substring(stIndexOf("\\") + 1,saveFile.indexOf("\""));int lastIndex = stIndexOf("=");//取得数据的分隔字符串String boundary = contentType.substring(lastIndex + 1,contentType.length());//创建保存路径的文件名String fileName = rootPath + saveFile;//out.print(fileName);int pos;pos = file.indexOf("filename=\"");pos = file.indexOf("\n",pos) + 1;pos = file.indexOf("\n",pos) + 1;pos = file.indexOf("\n",pos) + 1;int boundaryLocation = file.indexOf(boundary,pos) - 4; //out.println(boundaryLocation);//取得文件数据的开始的位置int startPos = ((file.substring(0,pos)).getBytes()).length; //out.println(startPos);//取得文件数据的结束的位置int endPos =((file.substring(0,boundaryLocation)).getBytes()).length; //out.println(endPos);//检查上载文件是否存在File checkFile = new File(fileName);if(checkFile.exists()){out.println("<p>" + saveFile + "文件已经存在.</p>"); }//检查上载文件的目录是否存在File fileDir = new File(rootPath);if(!fileDir.exists()){fileDir.mkdirs();}//创建文件的写出类fileOut = new FileOutputStream(fileName);//保存文件的数据fileOut.write(dataBytes,startPos,(endPos - startPos)); fileOut.close();out.println(saveFile + "文件成功上载.</p>");}else{String content = request.getContentType();out.println("<p>上传的数据类型不是multipart/form-data</p>");}}catch(Exception ex){throw new ServletException(ex.getMessage());}%></body></html>。
jsp的文件上传
lushengdi手把手教Jsp上传文件(FileUpload+Servlet)转载于/read.php?tid=7130本教程以Apache组织的commons项目中的FileUpload项目做为jsp的文件上传组件,FileUpload项目完全尊守RFC1867规范中关于在HTTP request 中通过Post方法提交文件的规范,该项目性能稳定快速,易于部署和使用.本次教程以前端jsp + 后端servlet的方式上传文件,你也可以完全在jsp中实现而不用servlet. 在开始之前你要准备以下几个东西:1. commons-FileUpload 1.2 包下载地址:/commons/fileupload/2. commons-IO 1.3.1 包下载地址:/commons/io/3. Commons-BeanUtils 1.7 包下载地址:/commons/beanutils/有了上面这些东西我们就可以开始了====================================================================== =========1. 新建一个叫upload的WEB项目(我用的是Lomboz3.2开发环境)2. 把上面下载下来的包分别解压并拷贝*.jar的文件到上面那个项目的WEB-INF/lib目录中3.接下来我们要准备一份如下内容的upload.jsp文件,用来选择要上传的文件,<html><head><title>Jsp+Servlet upload file</title></head><body><form name="upform" action="UploadServlet" method="POST" enctype="multipart/form-data"><input type ="file" name="file1" id="file1"/><br/><input type ="file" name="file2" if="file2"/><br/><input type ="file" name="file3" id="file3"/><br/><input type="submit" value="Submit" /><br/><input type="reset" /></form></body></html>上面文件中有几个需要注意的地方就是1. action="UploadServlet" 必须和后面的web.xml配置文件中对servlet映射必须保持一致.2. method="POST" 这里必须为"POST"方式提交不能是"GET".3. enctype="multipart/form-data" 这里是要提交的内容格式,表示你要提交的是数据流,而不是普通的表单文本.4. file1,file2,file3表示你要3个文件一起上传,你也可以一次只上传一个文件.====================================================================== =============接下来我们要写一个与上面这个upload.jsp配套的servlet程序,就叫做UploadServlet.java吧以下是该servlet的详细代码:看上去有点长,不过并不复杂,很容易明白的.import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import mons.fileupload.DefaultFileItemFactory;import mons.fileupload.FileItemFactory;import mons.fileupload.FileItemIterator;import mons.fileupload.FileItemStream;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;import mons.fileupload.util.Streams;/*** Servlet implementation class for Servlet: UploadServlet**/public class UploadServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {File tmpDir = null;//初始化上传文件的临时存放目录File saveDir = null;//初始化上传文件后的保存目录public UploadServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try{if(ServletFileUpload.isMultipartContent(request)){DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象dff.setRepository(tmpDir);//指定上传文件的临时目录dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byteServletFileUpload sfu = new ServletFileUpload(dff);//创建该对象sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸FileItemIterator fii = sfu.getItemIterator(request);//解析request 请求,并返回FileItemIterator集合while(fii.hasNext()){FileItemStream fis = fii.next();//从集合中获得一个文件流if(!fis.isFormField() && fis.getName().length()>0){//过滤掉表单中非文件域String fileName = fis.getName().substring(fis.getName().lastIndexOf(""""));//获得上传文件的文件名BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+fileName)));//获得文件输出流Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹}}response.getWriter().println("File upload successfully!!!");//终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗}}catch(Exception e){e.printStackTrace();}}public void init() throws ServletException {/* 对上传文件夹和临时文件夹进行初始化**/super.init();String tmpPath = "c:""tmpdir";String savePath = "c:""updir";tmpDir = new File(tmpPath);saveDir = new File(savePath);if(!tmpDir.isDirectory())tmpDir.mkdir();if(!saveDir.isDirectory())saveDir.mkdir();}}====================================================================== ==================================upload.jsp文件有了,配套的servlet也有了,现在最后剩下的就是怎么让它们配合工作了,接着我们把WEB-INF/web.xml文件请出来,并在该文件中加入以下内容:<servlet><servlet-name>UploadServlet</servlet-name><servlet-class>UploadServlet</servlet-class></servlet><servlet-mapping><servlet-name>UploadServlet</servlet-name><url-pattern>/UploadServlet</url-pattern></servlet-mapping>写好以后再点击"保存"====================================================================== ====================================把你的upload项目整个拷贝到tomcat的webapps目录下,启动tomcat.打开IE浏览器在地址栏中输入链接怎么样看到上传文件的输入框了吗? 什么,没有看到,出错了! 你仔细检查一下步骤有没有对. 好了,现在我们点击页面上的"浏览"按钮,找到我们要上传的文件,最后点击"Submit",太激动了,还不看一下你的c:"updir里面有没有你要的东西.。
jsp用户上传头像、上传图片、邮件上传附件代码
jsp用户上传头像、上传图片、邮件上传附件代码jsp教程用户上传头像、上传图片、邮件上传附件代码2. 页面表单的实现文件上传表单和普通表单有两个区别1) 需要文件上传字段<input type=”file” />2) form 表单的 enctype 属性需要指定为 multipart/form-data3. 服务器端解析request在 Servlet 中通过 request.getInputStream 获得表单上传数据,会发现数据是分段发送的由于自己写程序解析有难度,我们可以使用Apache 开发的开源组件Commons-fileupload需要导入 jar 包Commons-fileupload 和Commons-io4 . UploadServlet 中处理文件上传程序// 1. 创建工厂类DiskFileItemFactory factory = new DiskFileItemFactory();// 2. 创建FileUpload对象ServletFileUpload upload = new ServletFileUpload(factory);// 3. 判断是否是上传表单boolean b = upload.isMultipartContent(request);if(!b) {// 不是文件上传request.setAttribute("message", "对不起,不是文件上传表单!");request.getRequestDispatcher("/message.jsp").forward(requ est, response);return;}// 是文件上传表单// 4. 解析request,获得FileItem项List<FileItem> fileitems = upload.parseRequest(request); // 5. 遍历集合for(FileItem item : fileitems) {// 判断是不是普通字段if(item.isFormField()) {String name = item.getFieldName();String value = item.getString();// 手工的转换了value = new String(value.getBytes("iso-8859-1"),"utf-8"); System.out.println(name + "=" + value);} else {// 文件上传字段// 获得文件名String filename = item.getName();System.out.println(filename);filename = filename.substring(stIndexOf("")+1);System.out.println(filename);// 创建文件ServletContext context = getServletContext();String dir = context.getRealPath("WEN-INF/upload");File file = new File(dir, filename);file.createNewFile();// 获得流,读取数据写入文件InputStream in = item.getInputStream(); FileOutputStream fos = new FileOutputStream(file);int len;byte[] buffer = new byte[1024];while((len=in.read(buffer))>0)fos.write(buffer,0,len);fos.close();in.close();item.delete(); // 删除临时文件}二、文件上传处理细节1. 中文乱码问题1) 文件名中文乱码问题,解决办法:告诉文件上传组件以什么编码方式来解码文件名ServletUpload.setCharacterEncoding(“utf-8”);request. setCharacterEncoding(“utf-8”);2) 普通字段中文乱码问题fileitem.getString(“utf-8”);2. 临时文件对于大文件不能缓存在内存,需要缓存到硬盘,为了方便管理,我们需要设置临时文件存放目录// 设置临时文件的存放位置factory.setRepository(new File("d:/temp"));文件上传完毕需要删除临时文件,否则会导致服务器存在两份上传文件// 注意,需要先将流进行关闭,否则会导致临时文件无法删除out.close();in.close();// 删除临时文件fileitem.delete();3. 文件存放目录1) 目录需要隐藏,禁止外界直接访问2) 文件名需要保证不重复3) 文件应该分目录存放三、上传进度条1. 实现进度监听需要实现对文件上传进度的监听,需要给FileUpload 对象添加ProgressListener在upload方法中对与进度相关的数据进行处理upload.setProgressListener(new ProgressListener() {long num = 0;public void update(long bytesRead, long contentLength, int items) {long progress = bytesRead*100/contentLength;if(progress==num)return;num = progress;System.out.println("上传进度:" + progress + "%");// request.getSession().setAttribute("progress", progress);}});2. 在 jsp 页面显示进度实验:1) 使用 iframe 发送请求,请求一个Servlet, 在Servlet 中返回响应,发送自增的num此时会发现 iframe 会不停第想Servlet发送请求2) 点击文件上传按钮后,iframe立刻停止刷新,直至上传完毕页面跳转至新页面3)为了观察实验结果,将form 的target 指定为iframe,UploadServlet回送上传完毕的结果4) 出现上述问题的原因,浏览器不支持多线程同时访问服务器只能同时发送一个请求,这样的访问方式为同步访问5) 要在文件上传的同时在iframe中实现进度访问,就需要ie浏览器与服务器进行异步交互此时就需要 XMLHttpRequest 对象在网页特效中可以直接使用XMLHttpRequest 对象与服务器进行异步通信获得XmlHttpRequest 对象的方式有两种ie7以上版本var xhr = null;if(window.XMLHttpRequest)xhr = new XMLHttpRequest();ie7以下版本if(window.ActiveXObject)xhr = new ActiveXObject(“Microsoft.XMLHTTP”);获得对象后需要调用open方法输入请求地址注意请求方式,地址的输入,并且需要设置为true 指定异步访问该地址xhr.open(“get”,”/upload/servlet/UploadServlet”, false)// 调用send 方法发送请求,post方式需要发送消息体,get方式则不用直接传入null值xhr.send(null);// 访问 responseT ext 属性获得 Servlet 回送的数据document.write(xhr.responseText);四、 api方法1. DiskFileItemFactory 对象设置缓冲区大小,字节为单位,默认为10K,一般不用修改factory.setSizeThreshold(1000);设置临时文件存放目录factory.setRepository(file);2. ServletFileUpload 对象判断是否为文件上传表单boolean b = upload.isMultipartContent(request);解析request对象List<FileItem> list = upload.parseRequest(request);设置上传文件的最大值setFileSizeMax(long fileSizeMax)设置上传文件总量的最大值setSizeMax(long sizeMax)设置编码格式setHeaderEncoding(ng.String encoding)注册进度监听器setProgressListener(ProgressListener pListener)3. FileItem 对象获得表单字段的属性名item.getFieldName();获得普通字段的值item.getString(charsetName)获得文件上传字段的文件名item.getName()获得文件上传的流item.getInputStream()文件上传时需要注意的问题:1.如何设置上传文件最大值,并实现超出最大值时给用户一个友好提示upload.setFileSizeMax(1024*10); //设置最大值实现超出最大值时给用户一个友好提示:在程序中捕获FileUploadBase.FileSizeLimitExceededException只要程序抛出这个异常,代表用户上传的文件超出最大值2.上传过程中的乱码问题2.1 普通输入项的乱码item.getString("码表 ")2.2 上传文件名的乱码ServletFileUpload.setHeaderEncoding("码表")3.上传文件的安全性问题为防止用户直接上传文件,危害服务器安全,程序应禁止用户直接访问上传文件(即把上传文件保存在用户无法直接访问的目录)4.防止文件覆盖(UUID)5.文件打散存储(一个目录下面不能存超出1000个文件)用hash算法生成目录保存6.设置监听器,监听文件上传进度upload.setProgressListener(newProgressListener(){public void update(long arg0, longarg1, int arg2) {System.out.println("当前已上传" +arg0 + ",当前处理的文件总大小" + arg1);}});7.临时文件的删除问题处理完每一个文件上传后,一定要记得调用Fileitem.delete方法,删除临时文件8.限定上传文件类型判断上传文件后缀名。
JSP 通过Java Mail组件发送E-mail
JSP 通过Java Mail组件发送E-mail
Java Mail组件最常用的功能就是实现发送E-mail。
本节将通过一个具体的实例介绍应用Java Mail组件发送E-mail的方法。
下面是一个发送E-mail实例,代码如下所示。
发送Email页面email.htm
上述代码主要实现的功能是:提供表单,让用户选择要发送的邮件地址、主题和邮件内容,单击"发送"按钮执行发送邮件操作。
执行上述代码,在浏览器中输入
地址“http://wxb:8080/JSP/email.htm”,结果如图8-1所示。
图8-1 发送Email页面
上述代码中,主要实现的功能是对邮件进行处理。
首先使用request内置对象接收email.htm页面提交的数据。
然后声明一个Properties对象设置发件人用到的邮件服务器并用session对象进行引用。
最后声明一个MimeMessage对象设置要发送邮件的主题、内容并使用Transport类的sendMessage()方法发送邮件。
执行上述代码,结果如图8-2所示。
图8-2 执行结果。
用JSP实现上传文件的两种方法
用JSP实现上传文件的两种方法以前用cos作文件上传但是对于文件上传后的改名还需要借助其他的工具摘录如下:在用Java开发企业器系统的使用特别是涉及到与办公相关的软件开发的时候文件的上传是客户经常要提到的要求因此有一套很好文件上传的解决办法也能方便大家在这一块的开发首先申明该文章是为了自己记录一备以后开发需要的时候不用手忙脚乱哈哈现在在国内用的非常多的一般是两种方法解决来解决文件上传cos jar + uploadbean jar + filemover jar 这个是用的非常普遍的原因是因为他操作方便是我们不必再去关注那些文件的输入和输出流使我们从底层的流中解脱出来UploadFile UploadBean MultipartFormDataRequest<%@ page contentType="text/;charset=gb " %> <head> <title>fbysss UploadBean 示例</title> <! meta equiv="Content Type" content="text/; charset=iso " > <! meta equiv="Content Type" content="text/; charset=gb " > </head> <FORM name=form METHOD="POST" ACTION="sssupload jsp" ENCTYPE="multipart/form data"> <input name=title type= "text" value="中文字"> <td >附件</td> <td > <input name=attach type=FILE id="attach" size=" " > </td> <input name=ok type= "submit" value="提交"> </form>读取表单页面sssgetdata jsp<!//======================================== ================================== //文件UploadBean上传实例//功能解决中文乱码完成文件上传并提供上传改名解决方案//作者fbysss //msn:jameslastchina@hotmail//======================================== ================================== > <%@ page contentType="text/;charset=GBK" %> <%@ page language="java" import=" jsp *** art upload *"%> <%@ page import="java text SimpleDateFormat"%> <%@ page import="java io File"%> <%@ page import="java util *"%> <%@ page import="javazoom upload *"%> <%@ page import="uploadutilities FileMover"%> <head> <meta equiv="Content Type" content="text/; charset=gb "> </head> <%request setCharacterEncoding("GBK");//设置编码格式就不用一个个转码了 FileMover fileMover = new FileMover();//你也可以使用自带的实例中jsp:useBean的形式UploadBean upBean = new UploadBean(); MultipartFormDataRequest mrequest = null; Hashtable files = null;if (MultipartFormDataRequest isMultipartFormData(request)) { mrequest = new MultipartFormDataRequest(request null * * MultipartFormDataRequest COSPARSER "GBK");//注意这里也要设置编码参数String sTt = mrequest getParameter("title"); out println("<br>Title 是 "+sTt +"<br>"); String sTt = new String(sTt getBytes("ISO ") "GBK"); out println("<br>Title 是 "+sTt +"<br>"); //这里用来测试title参数是否正确调试的时候加一句if (true)return;即可 files = mrequest getFiles(); }//获取修改前的文件名String sOldFileName =mrequest getParameter("oldfilename"); out println("sOldFileName:"+sOldFileName); String sWebRootPath = request getRealPath("/");//得到你的web应用的根String sPath=sWebRootPath+"attach"; int iFileCount = ; String sServerFileName=""; String sLocalFileName = ""; //文件获取if ( (files != null) || (!files isEmpty()) ) {iFileCount = files size(); UploadFile file = (UploadFile) filesget("attach"); sLocalFileName=file getFileName(); out println("sLocalFileName:"+sLocalFileName); int ii= sLocalFileName indexOf(" "); //取文件名的后缀String sExt = sLocalFileName substring(ii sLocalFileName length()); //得到不重复的文件名java util Date dt = new java util Date(System currentTimeMillis()); SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS"); sServerFileName= fmt format(dt); sServerFileName =sServerFileName + sExt; //如果不存在该目录则新建一个 File dir =new File(sPath); if (!dir exists()){ dir mkdirs(); } upBean setFolderstore(sPath);//设置要上传的目录upBean addUploadListener(fileMover);//增加filMover监听fileMover setNewfilename(sServerFileName);//设置服务器上的文件名upBean store(mrequest "attach");//上传out println("file path is "+sPath+"/"+sServerFileName); }%>Demo注意事项 cos jar uploadbean jar filemover jar这几个包必须有必备下载地址UploadBean FileMover 参考下载地址ChinesUpload例子参考了fbysss的一篇文章 apache struts upload FormFile Struts 的 apache struts upload FormFile类很方便不用自己写也不用写一个jsp调用jsp *** artupload就可以搞定选择上传文件页面 selfile jsp<%@ taglib uri="/WEB INF/struts tld" prefix=""%> <:> <:form action="/uploadsAction do" enctype="multipart/form data"> <:file property="theFile"/> <:submit/> </:form> </:> UpLoadAction java import java io *; import javax servlet *; import apache struts action *; import apache struts upload FormFile;/** *//** * <p>Title:UpLoadAction</p> * <p>Description: QRRSMMS </p> * <p>Copyright: Copyright (c) jiahansoft</p> *<p>Company: jiahansoft</p> * @author wanghw * @version */ public class UpLoadAction extends Action { public ActionForward execute(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws Exception { if (form instanceof uploadsForm) {//如果form 是uploadsForm String encoding = request getCharacterEncoding(); if ((encoding != null) && (encoding equalsIgnoreCase("utf "))) { response setContentType("text/; charset=gb ");//如果没有指定编码编码格式为gb } UpLoadForm theForm = (UpLoadForm ) form; FormFile file = theForm getTheFile();//取得上传的文件try { InputStream stream = file getInputStream();//把文件读入String filePath = request getRealPath("/");//取当前系统路径ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream bos = new FileOutputStream(filePath + "/" + file getFileName());//建立一个上传文件的输出流//System out println(filePath+"/"+file getFileName()); int bytesRead = ; byte[] buffer = new byte[ ]; while ( (bytesRead = stream read(buffer )) != ) { bos write(buffer bytesRead);//将文件写入服务器} bos close(); stream close(); }catch(Exception e){ System err print(e); } //request setAttribute("dat" file getFileName()); return mapping findForward("display"); } return null; } }UpLoadForm javaimport javax servlet import apache struts action *; import apache struts upload *;/** *//** * <p>Title:UpLoadForm</p> * <p>Description: QRRSMMS </p> * <p>Copyright: Copyright (c) jiahansoft</p> * <p>Company: jiahansoft</p> * @author wanghw * @version */public class UpLoadForm extends ActionForm { public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = " apache struts webapp upload MaxLengthExceeded"; protected FormFile theFile; public FormFile getTheFile() { return theFile; } public void setTheFile(FormFile theFile) { this theFile = theFile; } public ActionErrors validate(ActionMapping mapping HttpServletRequest request) { ActionErrors errors = null; //has the maximum length been exceeded? Boolean maxLengthExceeded = (Boolean) request getAttribute(MultipartRequestHandlerATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded booleanValue())) { errors = new ActionErrors(); errors add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED new ActionError("maxLengthExceeded")); } return errors;} } //这是相对应的form 还有其他属性可以设置具体可以参考struts的上传例子struts config xmllishixinzhi/Article/program/Java/JSP/201311/20075。
使用JavaScript通过前端发送电子邮件
使⽤JavaScript通过前端发送电⼦邮件你为什么不通过发送电⼦邮件传输信息?不使⽤数据库就能接收到传⼊的消息,绝对是最佳选择,也是最⽅便⽤户的选择。
但问题来了—如何实现呢?你可能认为需要使⽤某种后端语⾔。
实际上,你不必使⽤任何如 php 或 python 这种后端语⾔,你甚⾄不需要⽤到 node.js!你需要的就是⼀个简单的EmailJS库。
本⽂将介绍下⾯两个重要功能:配置 emailjs 帐户使⽤ JS 发送电⼦邮件请注意,在我的项⽬中,我使⽤了 gulp 和 webpack,我在 src ⽂件夹存放源码,dist 存放最终发布版本的代码。
我将分 5 个步骤向你展⽰如何从头开始构建电⼦邮件发送器。
步骤1-⽤ HTML 创建表单⾸先需要创建⼀个 HTML 表单。
你不必放置像 required 或 max 这种验证属性,因为稍后,preventDefault() 函数将在你的提交事件上运⾏,它会让这些属性的处理失效。
表单中最重要的是为每个输⼊放置 name 属性,后⾯会⽤到。
我的⾮常简单的表单是这样的:src/html/index.html<form class="form"><input name='name' type="text" placeholder="Your name..."class="form__input" /><input name='topic' type="text" placeholder="Topic..."class="form__input" /><textarea name='message' type="text" placeholder="Your Message..."class="form__input"></textarea><input type="submit" value="send"class="form__input form__input--button"> </form>步骤2-注册成为 email ⽤户要配置你的电⼦邮件,你必须注册电⼦邮件服务。
JSP发送邮件的源码
二.程序源码:(1)发送文本类型信件.这种是接收者收到后打开信箱后直接显示在邮件正文的.它主要有两个程序: mailform.html and sendmail.jsp,另外三个程序为提交成功和不成功及发生内部错误的处理程序.mailform.html用来输入用户信息,然后提交表单给sendmail.jspsendmail.jsp 用来处理接收信息并处理信息,最后发送邮件.<%--mailform.html 的源代码--%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>mailform.html</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><form name="form1" method="post" action="sendmail.jsp"><p align="center">填写邮件内容</p><div align="center"><table width="75%" border="1"><tr><td><div align="center">收件人</div></td><td><div align="center"><input name="to" type="text" id="to" size="30" maxlength="30"></div></td></tr><tr><td><div align="center">发件人</div></td><td><div align="center"><input name="from" type="text" id="from" size="30" maxlength="30"></div></td></tr><tr><td><div align="center">抄送</div></td><td><div align="center"><input name="cc" type="text" id="cc" size="30" maxlength="100"></div></td></tr><tr><td><div align="center">暗送</div></td><td><div align="center"><input name="bcc" type="text" id="bcc" size="30" maxlength="100"></div></td></tr><tr><td><div align="center">主题</div></td><td><div align="center"><input name="subject" type="text" id="subject" size="30" maxlength="30"> </div></td></tr><tr><td colspan="2"><div align="center"><textarea name="body" cols="40" rows="10" id="body"></textarea></div></td></tr><tr><td colspan="2"><div align="center"><input type="submit" name="Submit" value="发送"> <input name="Reset" type="submit" id="Reset" value="清空"></div></td></tr></table></div><p align="center"> </p></form><p align="center"> </p></body></html><%--sendmail.jsp 的源代码--%><%@page contentType="text/html;charset=gb2312"%><%@page errorPage="errpage.jsp"%><%@page import="java.util.*"%><%@page import="javax.mail.*"%><%@page import="javax.mail.internet.*"%><%@page import="javax.activation.*"%><html><head><title>sendmail.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%//邮件服务器的IP地址,注意此时使用的是SMTP 邮件服务器//String host="202.102.240.76";//获取用户信息String to=request.getParameter("to");String from=request.getParameter("from");String cc=request.getParameter("cc");String bcc=request.getParameter("bcc");//结合本程序的第一句,共同起显示汉字体的功能String subject=request.getParameter("subject");subject = new ng.String(subject.getBytes("iso-8859-1"));//以上方法等同于以下两句,原理相同//byte[] subjectTemp=request.getParameter("subject").getBytes("ISO8859_1"); //String subject=new String(subjectTemp);byte[] messageTextTemp=request.getParameter("body").getBytes("ISO8859_1"); String messageText= new String(messageTextTemp);boolean sessionDebug = false;//验证所填写的邮件是否正确if((to.trim().indexOf("@")==-1)||(to.trim().length()<5)){%><jsp:forward page="err.jsp"/><%}if((from.trim().indexOf("@")==-1)||(from.trim().length()<5)){%><jsp:forward page="err.jsp"/><%}//获得系统属性对象,用下两句的任一句均可//Properties props = System.getProperties();Properties props=new Properties();//设置SMTP主机//以下一句是对任意的SMTP 邮件服务器均可,并且有了这一句,将不用设置传输协议了props.put("mail.smtp.host", "");//这样将确定接收方的邮件服务器主机,//props.put("mail.host",host);//设置邮件传输协议方式//props.put("mail.transport.protocol","smtp");//获取邮件会话对象Session mailSession = Session.getDefaultInstance(props,null); mailSession.setDebug(sessionDebug);try{//创建MIME邮件对象Message msg = new MimeMessage(mailSession);//设置发信人msg.setFrom(new InternetAddress(from));//设置收信人InternetAddress[] addressTo = {new InternetAddress(to)};msg.setRecipients(Message.RecipientType.TO,addressTo);//设置抄送人if(cc.trim().length()!=0){InternetAddress[] addressCc = {new InternetAddress(cc)};msg.setRecipients(,addressCc);}//设置暗送人if(bcc.trim().length()!=0){InternetAddress[] addressBcc = {new InternetAddress(bcc)};msg.setRecipients(Message.RecipientType.BCC,addressBcc);}msg.setSubject(subject);msg.setSentDate(new Date());msg.setText(messageText);//发送邮件Transport.send(msg);}catch(Exceptjsp如何实现发送电子邮件2007年11月07日星期三下午 11:35关键字:|发送到邮件功能实现|网站建设|功能组件|在线发邮件|文章发送到邮件|一、准备工作很麻烦整理:/start%5Flife1、下载javamail的包/products/javamail/downloads/index.html将 mail.jar 复制到 lib 目录中2、下载activation 包/products/javabeans/jaf/downloads/index.html将activation.jar复制到 lib 目录中3、再把服务器重启下二、下面是一个简单的发送文本内容的例子,直接在jsp中进行操作。
jsp文件上传简单实例
JSP文件上传简单实例1、index.html代码:<html><head><title>上传图片</title></head><body><form action="do_upload.jsp" method="post" enctype="multipart/form-data"><input type="file" name="Photo"><input type="submit" value="上传"></form></body></html>2、使用到的函数和类说明File类文件和目录路径名的抽象表示形式,File(parent,child)方法根据parent 抽象路径名和child 路径名字符串创建一个新File实例FileOutputStream文件输出流,InputStream输入流,将输入数据看成一根管道,可以形象的将输入流比喻成管道的入口,而输出流比喻成管道的出口。
read(byte[] b) 从此输入流中将最多b.length 个字节的数据读入一个字节数组中。
read() 从此输入流中读取一个数据字节。
write(int b) 将指定字节写入此文件输出流,write(byte[] b, int off, int len) 将指定字节数组中从偏移量off 开始的len 个字节写入此文件输出流。
write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中Random.readLine()逐行读入,Random.seek(int pos)设置到此文件开头测量到的文件指针偏移量,该位置发生下一个读取和写入操作,Random.getFilePointer()返回此文件当前偏移量,Random.readByte()此方法从该文件的当前文件指针开始读取第一个字节。