ajax异步文件上传,servlet处理,含demo

ajax上传组件源自于http://www.phpletter.com/Demo/AjaxFileUpload-Demo/,用的jquery

不过它服务器端用的是php,原理都是一样的,我改成了java版的

本文最下方有完整demo下载

 

用到两个jar包

commons-io-xx.jar

commons-fileupload-xx.jar

xx代表版本号

 

新建一个普通的java web工程

 

前端页面jsp代码:

[html]  view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Ajax File Uploader Plugin For Jquery</title>  
  8. <script type="text/javascript" src="jquery.js"></script>  
  9. <script type="text/javascript" src="ajaxfileupload.js"></script>  
  10. <script type="text/javascript">  
  11.     function ajaxFileUpload() {  
  12.         $("#loading").ajaxStart(function() {  
  13.             $(this).show();  
  14.         }).ajaxComplete(function() {  
  15.             $(this).hide();  
  16.         });  
  17.   
  18.         $.ajaxFileUpload({  
  19.             url : 'upload',// servlet请求路径  
  20.             secureuri : false,  
  21.             fileElementId : 'fileToUpload',// 上传控件的id  
  22.             dataType : 'json',  
  23.             data : {username : $("#username").val()}, // 其它请求参数  
  24.             success : function(data, status) {  
  25.                 if(data.msg) {  
  26.                     alert(data.msg);  
  27.                 }  
  28.             },  
  29.             error : function(data, status, e) {  
  30.                 alert('上传出错');  
  31.             }  
  32.         })  
  33.   
  34.         return false;  
  35.   
  36.     }  
  37. </script>  
  38. </head>  
  39.   
  40. <body>  
  41.     <h1>Ajax文件上传例子,JAVA版</h1>  
  42.     <img id="loading" src="loading.gif" style="display: none;">  
  43.     <form name="form" action="" method="POST" enctype="multipart/form-data">  
  44.         用户名:<input type="text" id="username" name="username"> <br>  
  45.         <input id="fileToUpload" type="file" size="45" name="fileToUpload"  
  46.             class="input">  
  47.         <button class="button" onclick="return ajaxFileUpload();">上传</button>  
  48.     </form>  
  49. </body>  
  50. </html>  


服务器端servlet核心代码:

[java]  view plain copy
  1. protected void doGet(HttpServletRequest request,  
  2.             HttpServletResponse response) throws ServletException, IOException {  
  3.         request.setCharacterEncoding("utf-8"); // 设置编码  
  4.         response.setCharacterEncoding("utf-8");  
  5.         response.setContentType("text/html;charset=UTF-8");  
  6.         // 获得磁盘文件条目工厂  
  7.         DiskFileItemFactory factory = new DiskFileItemFactory();  
  8.           
  9.         // 如果没以下两行设置的话,上传大的文件会占用很多内存,  
  10.         // 设置暂时存放的存储室 ,这个存储室,可以和最终存储文件的目录不同  
  11.         /** 
  12.          * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tmp 
  13.          * 格式的 然后再将其真正写到 对应目录的硬盘上 
  14.          */  
  15.         factory.setRepository(new File(TEMP_FOLDER));  
  16.         // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室  
  17.         factory.setSizeThreshold(1024 * 1024);  
  18.   
  19.         // 高水平的API文件上传处理  
  20.         ServletFileUpload upload = new ServletFileUpload(factory);  
  21.           
  22.         try {  
  23.             // 提交上来的信息都在这个list里面  
  24.             // 这意味着可以上传多个文件  
  25.             // 请自行组织代码  
  26.             List<FileItem> list = upload.parseRequest(request);  
  27.             // 获取上传的文件  
  28.             FileItem item = getUploadFileItem(list);  
  29.             // 获取文件名  
  30.             String filename = getUploadFileName(item);  
  31.   
  32.             System.out.println("存放目录:" + PATH_FOLDER);  
  33.             System.out.println("文件名:" + filename);  
  34.   
  35.             // 真正写到磁盘上  
  36.             item.write(new File(PATH_FOLDER, filename)); // 第三方提供的  
  37.                                 // 输出信息,前端页面获取,这里用的json格式             
  38.             PrintWriter writer = response.getWriter();  
  39.               
  40.             writer.print("{");  
  41.             writer.print("msg:\"文件大小:"+item.getSize()+",文件名:"+filename+"\"");  
  42.             writer.print("}");  
  43.               
  44.             writer.close();  
  45.           
  46.         } catch (FileUploadException e) {  
  47.             e.printStackTrace();  
  48.         } catch (Exception e) {  
  49.             e.printStackTrace();  
  50.         }  
  51.   
  52.     }  


别忘了web.xml配置servlet

[html]  view plain copy
  1. <servlet>  
  2.         <servlet-name>uploadProcessorServlet</servlet-name>  
  3.         <servlet-class>upload.UploadProcessorServlet</servlet-class>  
  4.     </servlet>  
  5.     <servlet-mapping>  
  6.         <servlet-name>uploadProcessorServlet</servlet-name>  
  7.         <url-pattern>/upload</url-pattern>  
  8.     </servlet-mapping>  


 

demo下载地址 : 点击进入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们要完成一个简单的异步交互效果:点击按钮后,从服务器获取一条随机的名言警句并在页面上显示。下面是使用原生AJAX和Java Servlet实现该效果的代码。 1. 创建一个Java Servlet类,名为QuoteServlet,用于处理AJAX请求并返回名言警句。 ```java import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class QuoteServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String[] quotes = { "The greatest glory in living lies not in never falling, but in rising every time we fall.", "The way to get started is to quit talking and begin doing.", "Your time is limited, don't waste it living someone else's life. Don't be trapped by dogma – which is living with the results of other people's thinking.", "If life were predictable it would cease to be life, and be without flavor.", "If you look at what you have in life, you'll always have more. If you look at what you don't have in life, you'll never have enough.", }; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.print(getRandomQuote()); out.flush(); } private String getRandomQuote() { Random random = new Random(); int index = random.nextInt(quotes.length); return quotes[index]; } } ``` 2. 在web.xml中配置Servlet,使其能够被访问。 ```xml <servlet> <servlet-name>QuoteServlet</servlet-name> <servlet-class>QuoteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>QuoteServlet</servlet-name> <url-pattern>/quote</url-pattern> </servlet-mapping> ``` 3. 在HTML页面中添加一个按钮和一个用于显示随机名言警句的文本框。 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Random Quote Generator</title> </head> <body> <h1>Random Quote Generator</h1> <button id="get-quote">Get a quote</button> <br><br> <textarea id="quote-text" rows="5" cols="60" readonly></textarea> </body> </html> ``` 4. 使用JavaScript代码监听按钮点击事件,并使用XMLHttpRequest对象从服务器获取名言警句。 ```javascript var button = document.getElementById("get-quote"); var quoteText = document.getElementById("quote-text"); button.addEventListener("click", function() { var xhr = new XMLHttpRequest(); xhr.open("GET", "quote", true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { quoteText.value = xhr.responseText; } }; xhr.send(); }); ``` 以上就是使用原生AJAX完成任意异步交互效果的完整代码。当用户点击“Get a quote”按钮时,JavaScript代码会向服务器发送一个AJAX请求,并在获取到响应后将随机名言警句显示在文本框中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值