关于中文乱码问题?求大神帮我瞧瞧
我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>
}