本帖最后由 itelly 于 2012-11-27 13:16:12 编辑

解决方案 »

  1.   

    设置编码为utf-8 表单提交应该就不会出乱码吧ajax就会出问题
      

  2.   

    看下你编译器设置的格式  项目右击》》JAVA Editor 看下Text file eccoding 的Other 选的是不是UTF-8 
      

  3.   

    Request req=upload.getRequest();
    req.setCharacterEncoding("UTF-8");
    String name=req.getParameter("product");
    试试
      

  4.   


    先检查jsp,servlet编码格式是否统一,然后这样
    request.getParameter("product");
    product = new String(product.getBytes("UTF-8"));
      

  5.   

    你确定能获取汉字么,我记得这种情况会无法获取text参数的啊,结果是null为了传文件你设置了enctype="multipart/form-data"
    好像这样会使上传的参数失效,即使在调试器中看到报头中添加了参数但是获取的结果也为null如果获取null的话解决方法是使用两个表单,或者重写onsubmit方法,使用Ajax先传文字参数,再传图片,总之是要用两个Servlet
    如果是这种情况
      

  6.   

    结果为null 是由汉字乱码引起的。
      

  7.   


    呃……是么,英文也为null啊
      

  8.   


     只要是request请求 或者 请求在request作用域内 getParameter都是可以取到值的
      

  9.   

    index.html<!DOCTYPE HTML>
    <html lang="en-US">
    <head>
    <meta charset="UTF-8">
    <title></title>
    </head>
    <body>
    <form action="Test" method="post" enctype="multipart/form-data">
      goods:<input type="text" name="product">
      picture:<input type="file" name="myFile"/>
      <input type="submit" value="submit"/>
      </form>
    </body>
    </html>Test.java/*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;/**
     *
     * @author lisanhu-v570
     */
    @WebServlet(name = "Test", urlPatterns = {"/Test"})
    public class Test extends HttpServlet {    /**
         * Processes requests for both HTTP
         * <code>GET</code> and
         * <code>POST</code> methods.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                String str=request.getParameter("product");
                System.out.println(str);
                out.println(str);
            } finally {            
                out.close();
            }
        }    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
        /**
         * Handles the HTTP
         * <code>GET</code> method.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }    /**
         * Handles the HTTP
         * <code>POST</code> method.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }    /**
         * Returns a short description of the servlet.
         *
         * @return a String containing servlet description
         */
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    }
    在windows tomcat7 netbeansIDE
    结果为null
      

  10.   

    req.setCharacterEncoding("UTF-8");这个方法没有定义
      

  11.   

    Quote: 引用 10 楼 lisanhu2010 的回复:

    在windows tomcat7 netbeansIDE
    结果为null ......
    Quote:
    是的,为null才算正常,原因是:
    <form action="Test" method="post" enctype="multipart/form-data">
    表明该表单的数据为二进制数据,二进制数据必须用流(java.io.InputStream)的方式才能接收,
    request.getParameter(String param); 该方法返回的是String,接收不到流,结果为null 并非乱码引起的,你的编码貌似没什么问题,问题在于你取值的方式!
    如果你用了commons-fileupload-x.jar,就好办了,请看代码:
    List fileItems = upload.parseRequest(request);// 表单中的所有二进制数据   
                Iterator iter = fileItems.iterator();   
                while (iter.hasNext()) {   
                    FileItem item = (FileItem) iter.next();
                    if (!item.isFormField()) {
                          //文件流,把文件保存到服务器,代码就不贴了,你懂的
                    }else{
                           //非文件流 
                     String value=item.getString();
                        value = new String(value.getBytes("ISO-8859-1"),"UTF-8");// 这行代码根据服务器的编码格式来定
                       
                    }