首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于中文乱码有关问题?求大神帮小弟我瞧瞧

2014-01-22 
关于中文乱码问题?求大神帮我瞧瞧我JSP页面有一个表单,表单里可输入各种信息还要上传图片:点击提交到一个s

关于中文乱码问题?求大神帮我瞧瞧
我JSP页面有一个表单,表单里可输入各种信息还要上传图片:点击提交到一个servlet,但在servlet中接收值的时候有中文乱码
jsp页面中的表单:
<table >
    <form name="product_info" id="product_if" action="InsertProductServlet" method="post" enctype="multipart/form-data">
  <tr>
    <td id="tit">物品类别:</td>
    <td><select name="product_class" id="text">
    <option value="0">数码产品</option>
    <option value="1">家庭电器</option>
    <option value="2">鞋包配饰</option>
    <option value="3">汽车摩托</option>
    <option value="4">护肤彩妆</option>
    <option value="5">珠宝手表</option>
    </select></td>
  </tr>
  <tr>
    <td id="tit">物品名称:</td>
    <td><input name="productName" type="text" id="text"/></td>
  </tr>
  <tr>
    <td id="tit">底价:</td>
    <td><input name="productPrice" type="text" id="text"/></td>
  </tr>
  <tr>
    <td id="tit">价值:</td>
    <td><input name="productCost" type="text" id="text"/></td>
  </tr>
      <tr>
    <td id="tit">物品图片:</td>
    <td ><input name="upfile"  type="file" id="text" value="上传" style="width:228px;"/>
    </td>
  </tr>
        <tr>
    <td id="tit" align="left">截止日期:</td>
    <td><input name="productCloseTime" type="text" id="text"/></td>
  </tr>
  <tr>
    <td id="tit" valign="top">物品描述:</td>
    <td><textarea name="productDescribe" cols="" rows="" id="Describe"></textarea></td>
  </tr>
  <tr>
    <td colspan="2" align="center">
        <input type="hidden" name="user" value="${sessionScope.client.clientId}"/>
    <input type="submit" id="client_btn" value="提交"/>
    </td>
  </tr>
  </form>
</table>

用于接收值的servlet:

@WebServlet(name = "InsertProductServlet", urlPatterns = {"/InsertProductServlet", "/html/InsertProductServlet"})
@MultipartConfig
public class InsertProductServlet 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 {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //获取用户输入的数据
        PrintWriter out = response.getWriter();
        Part part = request.getPart("upfile");//根据请求头部名称取请求参数
        String header = part.getHeader("content-disposition");
        String fileName = this.parseFileName(header);
        String extName = this.parseExtensionName(fileName);
        String productImage = this.saveFile(request, part);
        String productName = getParameter(request, "productName");
        String classId = getParameter(request, "product_class");
        String clientId = getParameter(request, "user");
        String productPrice = getParameter(request, "productPrice");


        String productDescribe = getParameter(request, "productDescribe");
        String productCost = getParameter(request, "productCost");
        String productCloseTime = getParameter(request, "productCloseTime");
        String msg = "";
        //验证数据的有效性
        if (classId.isEmpty()) {
            msg = "数据提取遇到错误,请重试";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }
        if (clientId.isEmpty()) {
            msg = "数据提取遇到错误,请重试";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }
        if (productName.isEmpty()) {
            msg = "请输入商品名称";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }
        if (productPrice.isEmpty()) {
            msg = "请输入商品单价";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }
        if (productDescribe.isEmpty()) {
            msg = "请描述一下商品";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }
        if (productCost.isEmpty()) {
            msg = "请输入商品价值";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }
        if (productCloseTime.isEmpty()) {
            msg = "请输入截止时间";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }
        if (productImage.isEmpty()) {
            msg = "图片地址获取失败,请检查是否成功上传图片";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }

        Product product = new Product();
        product.setClassId(Integer.valueOf(classId));
        product.setClientId(clientId);
        product.setProductName(productName);
        product.setProductPrice(Double.valueOf(productPrice));
        product.setProductDescribe(productDescribe);
        product.setProductCost(Double.valueOf(productCost));
        product.setProductCloseTime(productCloseTime);
        product.setProductImage(productImage);
        ProductDao productDao = new ProductDaoImpl();
        int ret = productDao.insertProduct(product);
        if (ret > 0) {
            response.sendRedirect("back_client_indexs.jsp");
        } else {
            msg = "商品信息添加失败";
            request.getRequestDispatcher("err.jsp?msg=" + msg).forward(request, response);
        }

    }

    private String getParameter(HttpServletRequest req, String name) throws IOException, IllegalStateException, ServletException {
        String retValue = null;
        Part part = req.getPart(name);


        BufferedReader br = new BufferedReader(new InputStreamReader(part.getInputStream()));
        retValue = br.readLine();
        return retValue;
    }

    public String saveFile(HttpServletRequest request, Part filePart) {
        String fileName = "";
        //1、取得文件名
        String header = filePart.getHeader("content-disposition");
        //使用系统毫秒字符串作为上传文件的名称
        fileName = this.parseFileName(header);
        String extName = this.parseExtensionName(fileName);
        String sysName = String.valueOf(System.currentTimeMillis());
        fileName = sysName + "." + extName;
        //2、取得保存路径
        String savePath = request.getServletContext().getRealPath("productImg");//获得Servlet上下文
        savePath = savePath + File.separator + fileName;
        try {
            //3、进行保存
            filePart.write(savePath);
        } catch (IOException ex) {
            Logger.getLogger(InsertProductServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        return fileName;
    }

    private String parseFileName(String header) {
        String str = header.substring(header.lastIndexOf("=") + 2, header.length() - 1);
        return str;
        //netbeans 7.3 以后版本
        //String str=header.substring(header.lastIndexOf("/")+1,header.length()-1);
    }

    private String parseExtensionName(String fileName) {
        return fileName.substring(fileName.lastIndexOf(".") + 1);
    }

    // <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>
}
[解决办法]
首先页面编码要设好
然后整个项目文件的编码要设好
数据库要设好
不知道你是在哪一步出的问题?
[解决办法]
你这个乱码无非就是 服务器tomcat的乱码问题,

String s=new String(request.getparameter("...").getBytes("iso8859-1"),"你的页面编码");
[解决办法]
你看一下那个  乱码是什么编码?  utf8三个字节一个汉字,,gbk好像两个
两个字节一个汉字,,你看看是什么编码?
[解决办法]
写个编码过滤器吧。。
[解决办法]
代码有够乱的。。
首先JSP页面编码和后台编码要一致。。。就那么简单
[解决办法]
表单的method改为get试一下
[解决办法]
在servlet乱码,说明页面编码设置出问题了三。
页面加上:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
[解决办法]
楼主,这种情况下你要保证以下几种编码一致:jsp文件本身编码设为UTF-8(Myeclipse环境下,就是右键--properties--text file encoding)、jsp文件中<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>、还有就是你代码里的request.setCharacterEncoding("utf-8");
[解决办法]
试着改下Tomcat 中的编码
在配置端口号的那里试着改成这样试试
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="utf-8" />
[解决办法]
用get提交,要不就用post的处理
[解决办法]
既然你接收端用request.setCharacterEncoding了,那有可能是这种情况(只是有可能):
jsp没用<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
然后右键打开jsp的属性property,看看jsp保存的格式是不是和pageEncoding一样,如果这两个分别是utf-8和gbk,有可能出现你的错误.
你页面中可以保存中文,说明应该没有用到iso编码.
[解决办法]
文件编码,项目编码 和文件中的charset,还有request的编码最好设置成一样。
[解决办法]
以前出现过这样的问题,其他地方都设置为utf-8编码,在页面输入中文是老报错,在tomcat下的server.xml中找到下面两段代码,加上URIEncoding="UTF-8"就解决了。
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8"/>
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8"/>
[解决办法]
u013432668 :回复的是可以解决的,一般都是tomcat设置的问题。
[解决办法]
post方式提交乱码应该是不关乎tomcat中的编码设置的,楼主应该看一下你整个项目jsp在提交之后是不是还走其他filter了
[解决办法]
你要保证JSP页面的编码格式和项目的编码格式是一致的,然后将Tomcat中的编码格式改成你的项目编码格式,应该就好了
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8"/>

[解决办法]
jsp页面编码 servlet中接受表单的编码 tomcat编码 一致才行

热点排行