黑马程序员技术交流社区

标题: jsp传过来的中文,在servlet中接收乱码了 [打印本页]

作者: CrazyProgram    时间: 2013-4-27 17:10
标题: jsp传过来的中文,在servlet中接收乱码了
本帖最后由 CrazyProgram 于 2013-4-27 22:38 编辑
  1. package zhiwei.deng.web.bbs.control;

  2. import java.io.IOException;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.util.Enumeration;

  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;

  9. import zhiwei.deng.web.bbs.domain.User;
  10. import zhiwei.deng.web.bbs.form.RegisterForm;
  11. import zhiwei.deng.web.bbs.service.UserService;

  12. import com.sun.org.apache.commons.beanutils.BeanUtils;

  13. public class RegisterServlet extends HttpServlet {
  14.         public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
  15.                 doPost(request,response);
  16.         }
  17.         public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
  18.                 request.setCharacterEncoding("utf-8");
  19.                 Enumeration<String> enums = request.getParameterNames();
  20.                 User user = new User();
  21.                 while(enums.hasMoreElements()){
  22.                         String name = enums.nextElement();
  23.                         String[] values = request.getParameterValues(name);
  24.                         System.out.println(name);//username的参数
  25.                         System.out.println(request.getParameter(name));//这个显示乱码了é????????
  26.                         try {
  27.                                 BeanUtils.setProperty(user, name, values);
  28.                         } catch(Exception e) {
  29.                                 e.printStackTrace();
  30.                         }
  31.                 }
  32.                 //进入数据格式校验
  33.                 RegisterForm registerForm = new RegisterForm();
  34.                 boolean flag = registerForm.validate(user);
  35.                 if(flag){
  36.                         //校验通过
  37.                         try {
  38.                                 UserService userService = new UserService();
  39.                                 userService.addUser();
  40.                                 request.setAttribute("message", "用户注册成功");
  41.                                 request.getRequestDispatcher("/WEB-INF/jsp/message.jsp").forward(request, response);
  42.                         }catch (Exception e) {
  43.                                         e.printStackTrace();
  44.                                         request.setAttribute("message", "用户注册失败");
  45.                                         request.getRequestDispatcher("/WEB-INF/jsp/message.jsp").forward(request, response);
  46.                         }
  47.                         request.getRequestDispatcher("/WEB-INF/jsp/message.jsp").forward(request, response);
  48.                 }else{
  49.                         request.setAttribute("registerForm", registerForm);
  50.                         request.getRequestDispatcher("/WEB-INF/jsp/register.jsp").forward(request, response);
  51.                 }
  52.         }
  53. }
复制代码

作者: hyw840705183    时间: 2013-4-27 20:03
我一般都是用request.setCharacterEncoding("gb2312");意思就是说把你的request.setCharacterEncoding("utf-8");换成这个试下。
作者: CrazyProgram    时间: 2013-4-27 22:37
hyw840705183 发表于 2013-4-27 20:03
我一般都是用request.setCharacterEncoding("gb2312");意思就是说把你的request.setCharacterEncoding("utf ...

还是不行的。。不过我找到了,谢了·
作者: hyw840705183    时间: 2013-4-27 22:42
不用谢,你是用什么方法呢
作者: 曾德强    时间: 2013-4-27 22:47
  1. package util;
  2. import java.io.IOException;  

  3. import javax.servlet.Filter;  
  4. import javax.servlet.FilterChain;  
  5. import javax.servlet.FilterConfig;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletRequest;  
  8. import javax.servlet.ServletResponse;  

  9. public class CharacterEncodingFilter implements Filter {

  10.         @Override
  11.         public void destroy() {
  12.                 // TODO Auto-generated method stub
  13.                

  14.         }

  15.         @Override
  16.         public void doFilter(ServletRequest arg0, ServletResponse arg1,
  17.                         FilterChain arg2) throws IOException, ServletException {
  18.                 // TODO Auto-generated method stub
  19.                 arg0.setCharacterEncoding("utf-8");  
  20.                 arg2.doFilter(arg0, arg1);  
  21.         }

  22.         @Override
  23.         public void init(FilterConfig arg0) throws ServletException {
  24.                 // TODO Auto-generated method stub

  25.         }

  26. }
复制代码
设置过滤器,在过滤器里设置utf8,注意一定要和你的页面编码一直;
作者: CrazyProgram    时间: 2013-4-28 19:06
hyw840705183 发表于 2013-4-27 22:42
不用谢,你是用什么方法呢

  过滤器,,跟上面写的差不多




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2