淘宝(阿里百川)手机客户端开发日记第十四篇 jsp提交含有上传控件表单乱码问题
今天我来总结昨天开发的一个简单的jsp web 应用程序时,在做一个调教表单,从servlet端获取数据,这个表单里含有上传文件控件。如果我们在测试的时候,获取数据的是乱码,这时,大家可以先去掉上传控件的,然后测试通过get请求向servlet传数据,通过
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
进行输出中文测试,如果出现乱码,自己去处理页面的编码,以及设置上面的编码方式;这个问题如果解决了,那么在把上传控件放到表单里,再测试!
大家知道,在jsp里,表单里含有上传文件控件的,在服务端,我们大部分采用这样的处理方式:先导入commons-fileupload-1.2.1.jar和commons-io-1.4.jar这两个Jar文件;然后在servlet里这样写:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
DiskFileUpload diskFileUpload = new DiskFileUpload();
diskFileUpload.setHeaderEncoding("utf-8");
diskFileUpload.setSizeMax(100 * 1024 * 1024);
diskFileUpload.setSizeThreshold(4096);
String savePath = this.getServletConfig().getServletContext().getRealPath("/") + "uploads\\";
diskFileUpload.setRepositoryPath(savePath);
try {
List fileItems = diskFileUpload.parseRequest(request);
Iterator iter = fileItems.iterator();
Ads model = new Ads();
PrintWriter writer = response.getWriter();
for (; iter.hasNext();)
{
FileItem fileItem = (FileItem) iter.next();
if (fileItem.isFormField()) { /* 一般的字段判断 */
if(fileItem.getFieldName().equalsIgnoreCase("catename"))
{
model.setCatename(fileItem.getString("utf-8"));
}
}
else {
/* 控件上传*/
if(fileItem.getFieldName().equalsIgnoreCase("cateicon"))
{
String fileName = fileItem.getName();
if(!StringUtil.isNullOrEmpty(fileName))
{
fileItem.write(new File(savePath + fileName));
model.setCicon(fileName);
}
} /* 如果表单中有多个控件,继续处理 */
else if(fileItem.getFieldName().equalsIgnoreCase("lefttop"))
{
String fileName = fileItem.getName();
if(!StringUtil.isNullOrEmpty(fileName))
{
fileItem.write(new File(savePath + fileName));
model.setLefttop(fileName);
}
}
}
}
model.setOrderid(1);
AdsDao.add(model);
writer.println("<script>alert('添加成功');location.href='/AdsList.jsp';</script>");
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
在上面,我标注一段用红色表示的
diskFileUpload.setHeaderEncoding("utf-8");
它一定要设置自己需要的编码方式,这样就不会出现问题了!
转载请注明http://www.cnblogs.com/yushengbo,否则将追究版权责任!
淘宝(阿里百川)手机客户端开发日记第十四篇 jsp提交含有上传控件表单乱码问题的更多相关文章
- 淘宝(阿里百川)手机客户端开发日记第十五篇 JSON解析(四)
解析一个从淘宝传递的JSON (大家如有兴趣可以测试下):{ "tae_item_detail_get_response": { "data": { " ...
- 淘宝(阿里百川)手机客户端开发日记第十二篇 mysql的认识
我这里用的是wamp,大家可以到网上去下载对应的包,自行安装,对于程序员来讲,安装软件大部分都应该不是问题的,所以我不去将具体安装的方法. wamp安装好后,在我们屏幕的右下角, 这样的图标,我们右键 ...
- 淘宝(阿里百川)手机客户端开发日记第十篇 阿里百川服务器环境介绍之API文档的快速链接(四)
个人感觉比较重要的快速链接: http://open.taobao.com/doc/detail.htm?id=102513 http://open.taobao.com/doc/detail.htm ...
- 淘宝(阿里百川)手机客户端开发日记第十一篇 JSP+Servlet
由于本人从事.net开发已有多年经验,今天由于工作需要,我只能学习下JSP+Servlet,至于java web提供了更好的开发框架MVC,现在由于时间关系,我只好用JSP+Servlet来搭建服务器 ...
- 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)
android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比 转载请注明http://w ...
- 淘宝(阿里百川)手机客户端开发日记第九篇 Looper详解
public final class Looper: 官方的API: Class used to run a message loop for a thread. Threads by default ...
- 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解
我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...
- 淘宝(阿里百川)手机客户端开发日记第十三篇 mysql的连接
首先,我建立了一个包,里面存放了三个类文件,这三个文件是我从网络中找的,经过自己的整理.(我刚才查找想把这三个文件传上去,可能是自己对cnblogs的博客不太熟悉吧,没有找到,我只好粘贴代码了) 三个 ...
- 淘宝(阿里百川)手机客户端开发日记第八篇 Handler的使用方法
首先,我们先看下API文档的说明: A Handler allows you to send and process Message and Runnable objects associated w ...
随机推荐
- 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- jquery selector 基础
转自:http://www.cnblogs.com/zwl12549/archive/2008/08/09/1264163.html query的这套选择符是比较帅气的,借用了XPath2.0和CSS ...
- web中异步和同步的理解
普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项. 同步:提交请求->等待服务器处理->处理完毕返回.这个期间客户端浏览器不能干任何事. 异步: ...
- js014-表单脚本
js014-表单脚本 本章内容: 理解表单 文本框验证与交互 使用其他表单控制 14.1 表单的基础知识 在HTML中,表单时由<form>元素来表示的,在JS中,表单对应的时HTMLFo ...
- IBatis分页显示
<select id="pagedListOrderOpen"> SELECT * FROM ( </select> <sql id="pa ...
- curl方式创建elasticsearch的mapping
curl方式创建elasticsearch的mapping curl -XPUT 'http://192.168.1.105:9200/bank/item2/_mapping' -d '{ " ...
- jquery特效收藏
js网址收藏: 懒人图库:www.lanrentuku.com 懒人之家:http://www.lanrenzhijia.com/jquery/list_5_2.html 1.UI下载:http:// ...
- RobotFramework——介绍篇
1.简介Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次很多的验 ...
- 用实例揭示notify()和notifyAll()的本质区别
用实例揭示notify()和notifyAll()的本质区别 收藏 notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法.两者的最大区别在于: notif ...
- 新浪微博客户端(59)-hitTest withEvent方法的使用说明
iOS中的触摸事件总是由最顶层的View首先得到的,当这个View得到该触摸事件的时候可以选择通过 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEv ...