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)