JspSmartUpload是一个小巧简便的实现上传下载功能的组件,在表单中提交图片的时候,有以下注意点:
①表单设置:method="post" enctype="multiply/form-data"
②在Servlet中如果想要取得文本框提交的内容,不能使用request.getParameter(),因为这种提交方式是以二进制进提交的,所以使用以前的取值方法取到的都是null,这时候要使用 new SmartUpload.getRequest().getParameter("name");进行取值。
③在调用SmartUpload取值方法之前,一定先初始化上下文mySmartUpload.initialize(pageContext);,并要先调用upload()方法。
④我的处理上传图片是作为一个单独的类,这时候需要在类里面获取servlet、request、response、pageContext对象,而前三个参数都可以由Servlet在方法中通过参数传递过来,pageContext需要使用这种方法获取:
JspFactory jspFactory = JspFactory.getDefaultFactory();//取得JSP工厂类
//此处request、response由servlet中传递过来
PageContext pageContext = jspFactory.getPageContext(servlet,request,response,"",true,8192,true);//通过Jsp工厂类获取上下文环境
⑤中文乱码问题:如果文本框传递的是中文的话,那么需要使用这种方法:new String(new SmartUpload.getRequest().getParameter("name").getBytes("GBK"));,我的upload.jsp中编码是UTF-8,通过GBK转字节在我的应用中可以正确处理中文问题。
网上摘的解决乱码问题:
1:mySmartUpload.getRequest().getParameter("account") 获取值乱码问题
前台页面(form)传两个值到servlet,一个是文件,另一个是文字。
servlet接收文字的方法:
Request req = smart.getRequest();
account = new String(req.getParameter("account").getBytes("iso-8859-1"), "gb2312");
但得到的是乱码
解决:
这个问题分两个步骤解决:
首先,将前台JSP页面中
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
的UTF-8都改成GBK或GB2312
然后,在servlet中,在doGet或doPost方法中的第一行代码写
request.setCharacterEncoding("GBK");//或GB2312也行;
之后你创建smartUpload的对象..
得到request对象后正常获得JSP中form的各元素值就不会有问题,比如:
SmartUpload mySmartUpload = new SmartUpload();
String account = mySmartUpload.getRequest().getParameter("account");
System.out.println(account);//不会有乱码了;
2:mySmartUpload.getRequest().getParameter("account") 获取值
mySmartUpload.getRequest().getParameter("account");
account不能是文件类型的ID (如: <input type="file" name="file1"/>中的file1)