標籤:time vax 技術分享 單詞 bean nts 格式 dispatch logs
上傳檔案時表單enctype屬性必須要更改為<enctype=‘multipart/form-data‘>;採用post提交表單,元素需要有name屬性;
利用第三方jar包(commons-fileupload-1.2.1.jar commons-io-1.3.2.jar )進行普通資料擷取和檔案上傳;普通文本需要用getString("編碼格式")方法擷取,否則漢字會出現亂碼,最開始我一直用的getString()擷取,發現傳到資料的資料全是亂碼,查看流浪器的裡面的請求和響應全是正常的,百度了半天也沒找到真正的解決方案,無意間發現第三方包裡面的FileItem還有一個重載的getString(String args)方法,但是不曉得參數傳什麼;後來發現這個getString(String args)方法會拋一個
UnsupportedEncodingException異常,英語也不好,百度單詞的意思吧,什麼不支援的編碼異常,到此終於發現這個是設定編碼的方法;所以呢,寫方法;寫類;寫變數;寫參數時,能讓人見文知意是多麼重要;要是這個方法直接這樣寫的getString(String charset)一看就知道是設定編碼格式的方法了把。
添加商品的Servlet:
package ni.jun.yang.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import ni.jun.yang.service.KindService;@WebServlet("/AddGoodsServlet")public class AddGoodsServlet extends HttpServlet {private static final long serialVersionUID = 1L; public AddGoodsServlet() { }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//響應編碼格式response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();//遍曆類型的集合,得到下拉框選項List<String> list = new ArrayList<>();String sql = "Select * from kind";list = new KindService().select(sql);out.println("<html><head><meta charset=‘utf-8‘><title>添加商品</title>");out.println("</head>");out.println("<body>");//上傳檔案的提交方式out.println("<form action=‘AddResultServlet‘ method=‘post‘ enctype=‘multipart/form-data‘>");out.println("<table>");out.println("<tr>");out.println("<td>名稱:</td>");out.println("<td><input type=‘text‘ name=‘mingzi‘></td>");out.println("</tr>");out.println("<tr>");out.println("<td></td>");out.println("<td><input type=‘file‘ name=‘filename‘></td>");out.println("</tr>");out.println("<tr>");out.println("<td>介紹:</td>");out.println("<td><input type=‘text‘ name=‘jieshao‘></td>");out.println("</tr>");out.println("<tr>");out.println("<td>售價:</td>");out.println("<td><input type=‘text‘ name=‘shoujia‘></td>");out.println("</tr>");out.println("<tr>");out.println("<td>分類:</td>");out.println("<td>");out.println("<select name=‘fenlei‘>");//遍曆類型的集合,得到下拉框選項for (int i = 0;i<list.size();i++) {out.println("<option value="+(i+1)+">");out.println(list.get(i));out.println("</option>");}out.println("</select>");out.println("</td>");out.println("</tr>");out.println("<tr>");out.println("<td> </td>");out.println("<td><input type=‘submit‘ value=‘添加‘></td>");out.println("</tr>");out.println("</table>");out.println("</form>");out.println("</body>");out.println("</html>");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
處理提交資料的Servlet:
package ni.jun.yang.servlet;import java.io.File;import java.io.IOException;import java.util.Date;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import ni.jun.yang.bean.Goods;import ni.jun.yang.service.GoodsService;@WebServlet("/AddResultServlet")public class AddResultServlet extends HttpServlet {private static final long serialVersionUID = 1L; public AddResultServlet() { }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(1024*1024*5);ServletFileUpload upload = new ServletFileUpload(factory);List<FileItem> fileItems = null;Goods goods = new Goods();try {//請求資料返回FileItem類型的數組 fileItems = upload.parseRequest(request);} catch (FileUploadException e) {e.printStackTrace();}//上傳的檔案存放路徑String path = getServletContext().getRealPath("/image");File f = new File(path);//沒有此路徑就建立if(!f.exists()){f.mkdirs(); }//遍曆請求資料的集合進行資料的擷取和檔案的上傳for (FileItem x : fileItems) { try {uploading(x, goods, path);} catch (Exception e) {e.printStackTrace();} }//普通資料存入資料庫,頁面跳轉if(new GoodsService().add(goods)){request.getRequestDispatcher("success.html").forward(request, response);}else{response.sendRedirect("lose.html");}}/** * 資料的擷取和檔案上傳 * @param fileItem * @param goods待添加的商品 * @param path上傳的路徑 * @throws Exception */private void uploading (FileItem fileItem,Goods goods,String path) throws Exception{//普通文本資料 //只能擷取字串,其他的資料需要通過封裝類的方法轉化得到if(fileItem.isFormField()){if(fileItem.getFieldName().equals("mingzi")){//擷取普通的文本資料利用getString("utf-8"),設定編碼格式。否則會出現漢字亂碼goods.setName(fileItem.getString("utf-8"));}else if(fileItem.getFieldName().equals("jieshao")){goods.setExplain(fileItem.getString("utf-8"));}else if(fileItem.getFieldName().equals("shoujia")){//字串轉Doublegoods.setPrice(Double.parseDouble(fileItem.getString()));}else if(fileItem.getFieldName().equals("fenlei")){String type = fileItem.getString();goods.setType(Integer.parseInt(type));}}else{// 檔案類型String fileName = fileItem.getName();//System.out.println(fileName);//設定上傳的檔案名稱字,利用時間返回毫秒數,保證上傳的檔案不重名String path1 = new Date().getTime()+"_"+fileName;String fileName2= path+"\\"+ path1;File file = new File(fileName2);//資料只存放檔案名稱字goods.setPhoto(path1);//System.out.println(fileName2);try {fileItem.write(file);} catch (Exception e) {e.printStackTrace();}}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
:
完整項目網盤地址:http://pan.baidu.com/s/1boWm05T 密碼:blqh
servlet檔案上傳2——複合表單提交(資料擷取和檔案上傳)