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

Daniel Mao 码农  2014-01-03 11:46:29
我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>
}
...全文
408 点赞 收藏 18
写回复
18 条回复
ziseyu1631 2014年01月14日
post方式提交乱码应该是不关乎tomcat中的编码设置的,楼主应该看一下你整个项目jsp在提交之后是不是还走其他filter了
回复 点赞
查看余e 2014年01月14日
jsp页面编码 servlet中接受表单的编码 tomcat编码 一致才行
回复 点赞
长腮的北极熊 2014年01月14日
你要保证JSP页面的编码格式和项目的编码格式是一致的,然后将Tomcat中的编码格式改成你的项目编码格式,应该就好了 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
回复 点赞
1057718341_h 2014年01月13日
u013432668 :回复的是可以解决的,一般都是tomcat设置的问题。
回复 点赞
勿忘2013 2014年01月12日
以前出现过这样的问题,其他地方都设置为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"/>
回复 点赞
zark 2014年01月11日
文件编码,项目编码 和文件中的charset,还有request的编码最好设置成一样。
回复 点赞
Boki 2014年01月10日
既然你接收端用request.setCharacterEncoding了,那有可能是这种情况(只是有可能): jsp没用<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 然后右键打开jsp的属性property,看看jsp保存的格式是不是和pageEncoding一样,如果这两个分别是utf-8和gbk,有可能出现你的错误. 你页面中可以保存中文,说明应该没有用到iso编码.
回复 点赞
梦飞灵 2014年01月10日
用get提交,要不就用post的处理
回复 点赞
暗冥惑 2014年01月10日
试着改下Tomcat 中的编码 在配置端口号的那里试着改成这样试试 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8" />
回复 点赞
dokia123 2014年01月09日
楼主,这种情况下你要保证以下几种编码一致:jsp文件本身编码设为UTF-8(Myeclipse环境下,就是右键--properties--text file encoding)、jsp文件中<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>、还有就是你代码里的request.setCharacterEncoding("utf-8");
回复 点赞
w星星b 2014年01月08日
在servlet乱码,说明页面编码设置出问题了三。 页面加上: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
回复 点赞
java-er 2014年01月07日
表单的method改为get试一下
回复 点赞
a156435646 2014年01月07日
代码有够乱的。。 首先JSP页面编码和后台编码要一致。。。就那么简单
回复 点赞
dai_jiawei 2014年01月05日
写个编码过滤器吧。。
回复 点赞
Daniel Mao 2014年01月04日
引用 2 楼 zhouren1314 的回复:
你这个乱码无非就是 服务器tomcat的乱码问题, String s=new String(request.getparameter("...").getBytes("iso8859-1"),"你的页面编码");
试了,但全是这种问号了?????????????
回复 点赞
乔不思 2014年01月04日
你这个乱码无非就是 服务器tomcat的乱码问题, String s=new String(request.getparameter("...").getBytes("iso8859-1"),"你的页面编码");
回复 点赞
coolbamboo2008 2014年01月04日
首先页面编码要设好 然后整个项目文件的编码要设好 数据库要设好 不知道你是在哪一步出的问题?
回复 点赞
乔不思 2014年01月04日
你看一下那个 乱码是什么编码? utf8三个字节一个汉字,,gbk好像两个 两个字节一个汉字,,你看看是什么编码?
回复 点赞
发动态
发帖子
Web 开发
创建于2007-09-28

5.2w+

社区成员

34.1w+

社区内容

Java Web 开发
社区公告
暂无公告