当前位置:  编程技术>综合
本页文章导读:
    ▪jquery ajax 与servlet间乱码解决方案      中文乱码问题,解决办法其实很简单,传之前encode,传之后decode。看相关源码片段: servlet /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(Htt.........
    ▪String,StringBuffer,StringBuilder的性能比较      首先看多次相加 String 循环10000次,后两者是100000,累加次数是String的10倍 long start = System.currentTimeMillis(); String result = ""; for (int i = 0; i < 10000; i++) { String s1 = "hello"; Str.........
    ▪下载文件      import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; public class DownLoadUtil { private stat.........

[1]jquery ajax 与servlet间乱码解决方案
    来源: 互联网  发布时间: 2013-11-10

中文乱码问题,解决办法其实很简单,传之前encode,传之后decode。看相关源码片段:

servlet

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		PrintWriter pw = response.getWriter();
		String userId = request.getParameter("userId");
		String vcard = VcardHandle.queryVcard(userId);
		pw.print(URLEncoder.encode(vcard, "UTF-8"));
		pw.close();
	}

JavaScript
	$.ajax({
		type : "POST",
		contentType : "application/x-www-form-urlencoded; charset=utf-8",
		async : false,
		url : "VcardServlet?userId=" + userId,
		dataType : 'text',
		success : function(result) {
			vcard = decodeURIComponent(result);
		}
	});


需要注意的是:JavaScript中encodeURI 不对下列字符进行编码:“:”、“/”、“;”和“?”,建议使用encodeURIComponent 


dml@2013.1.8






作者:duanml61 发表于2013-1-8 17:07:34 原文链接
阅读:4 评论:0 查看评论

    
[2]String,StringBuffer,StringBuilder的性能比较
    来源: 互联网  发布时间: 2013-11-10

首先看多次相加

String 循环10000次,后两者是100000,累加次数是String的10倍

		long start = System.currentTimeMillis();
		String result = "";
		for (int i = 0; i < 10000; i++) {
			String s1 = "hello";
			String s2 = "world";
			int s3 = 1000;
			result += s1;
			result += s2;
			result += s3;
		}
		System.out.println(System.currentTimeMillis() - start);
		
		
		start = System.currentTimeMillis();
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < 100000; i++) {
			String s1 = "hello";
			String s2 = "world";
			int s3 = 1000;
			sb.append(s1);
			sb.append(s2);
			sb.append(s3);
				
		}
		sb.toString();
		System.out.println(System.currentTimeMillis() - start);
		
		
		start = System.currentTimeMillis();
		StringBuffer sb2 = new StringBuffer();
		for (int i = 0; i < 100000; i++) {
			String s1 = "hello";
			String s2 = "world";
			int s3 = 1000;
			sb2.append(s1);
			sb2.append(s2);
			sb2.append(s3);
				
		}
		sb2.toString();
		System.out.println(System.currentTimeMillis() - start);

看下运行时间

结果是:

7549
36
33
比较稳定
6687
34
31


实际情况是,我们很少会对一个字符串累加那么多次吧!上百次应该都很少。

这是就先累加10次(内循环10次累加),但必须要循环执行多次(外循环)才能看出效果!这里循环10W次。,都一样。


		long start = System.currentTimeMillis();
		String s = "hello world";
		for (int i = 0; i < 100000; i++) {
			String result = "";
			for(int j=0; j<10; j++){
				result += s;
			}
		}
		System.out.println(System.currentTimeMillis() - start);
		
		
		start = System.currentTimeMillis();
		
		for (int i = 0; i < 100000; i++) {
			StringBuilder sb = new StringBuilder();
			for(int j=0; j<10; j++){
				sb.append(s);
			}
			sb.toString();
		}
		
		System.out.println(System.currentTimeMillis() - start);
		
		
		start = System.currentTimeMillis();
		
		for (int i = 0; i < 100000; i++) {
			StringBuffer sb2 = new StringBuffer();
			for(int j=0; j<10; j++){
				sb2.append(s);
			}
			sb2.toString();
		}
		
		System.out.println(System.currentTimeMillis() - start);

结果为:

304
88
117

如果,把累加次数改为20次(内循环,j<20)

806
164
209

30次, 性能提升还是比较大的。(当然是在循环10W的基础上)

1397
275
483


想起来以来看过的一篇帖子,比较的JSP和PHP运算字符串的能力。



看结果就知道用的是String累加的!这种比较没意思!




作者:gaotong2055 发表于2013-1-8 16:53:13 原文链接
阅读:13 评论:0 查看评论

    
[3]下载文件
    来源: 互联网  发布时间: 2013-11-10
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;


import javax.servlet.http.HttpServletResponse;


import org.apache.log4j.Logger;


public class DownLoadUtil {
	private static Logger logger = Logger.getLogger(DownLoadUtil.class);
	/**
	 * 下载文件
	 * @param name 用户下载的文件名(*****.***)
	 * @param filePath 文件路径
	 * @param response 
	 * @param fileType 文件类型
	 * @return
	 * @throws Exception
	 */
	public static boolean downLoadFile(String name,String filePath,
			HttpServletResponse response, String fileType)
			throws Exception {
		logger.info("start invoke downLoadFile,[filePath:"+filePath+" , fileType:"+fileType+"]");
		File file = new File(filePath);
		//设置文件类型
		if("pdf".equals(fileType)){
			response.setContentType("application/pdf");
		}else if("xls".equals(fileType)){
			response.setContentType("application/msexcel");
		}else if("doc".equals(fileType)){
			response.setContentType("application/msword");
		}
		response.setHeader("Content-Disposition", "attachment;filename=\""
				+ new String(name.getBytes("GB2312"), "ISO8859-1") + "\"");
		//response.setHeader("Content-Disposition", "attachment;filename=\""+ URLEncoder.encode(name, "UTF-8")+ "\"");
		response.setContentLength((int) file.length());
		byte[] buffer = new byte[4096];// 缓冲区
		BufferedOutputStream output = null;
		BufferedInputStream input = null;
		try {
			output = new BufferedOutputStream(response.getOutputStream());
			input = new BufferedInputStream(new FileInputStream(file));
			int n = -1;
			while ((n = input.read(buffer, 0, 4096)) > -1) {
				output.write(buffer, 0, n);
			}
			output.flush();
			response.flushBuffer();
		} catch (Exception e) {
			logger.error("exception when invoke downLoadFile",e);
			throw e;
		} finally {
			if (input != null)
				input.close();
			if (output != null)
				output.close();
		}
		logger.info("end invoke downLoadFile!");
		return true;
	}
}

 

   

调用 DownLoadUtil.java

 

public ActionForward downLoadExcelModel(ActionMapping actionMapping,
   ActionForm actionForm, HttpServletRequest request,
   HttpServletResponse response) throws Exception {
  String busType = request.getParameter("busType");
  String path = request.getSession().getServletContext().getRealPath(
    "/resources");
  String name = null;        
  String fileName = null;    //服务器上文件名
    fileName = "xxxl.xls";
    name = "xxxx.xls";
  }
  String filePath = path + System.getProperty("file.separator") + fileName;
  DownLoadUtil.downLoadFile(name,filePath, response, "xls");
  return null;
 }



 

作者:Heng_Ji 发表于2013-1-8 16:31:03 原文链接
阅读:38 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3