servlet檔案上傳2——複合表單提交(資料擷取和檔案上傳)

來源:互聯網
上載者:User

標籤: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——複合表單提交(資料擷取和檔案上傳)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.