您的位置:首页 > 其它

解决Servlet中,中文乱码的问题

2017-12-21 14:35 351 查看
接收前台的值,获取二进制流然后再以UTF-8的格式输出

String name=new String(request.getParameter("nameP").getBytes("ISO-8859-1"),"UTF-8")

1、如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding("UTF-8"))

  2、如果提交方式为get,设置request对象的编码是无效的,request对象还是以默认的ISO8859-1编码接收数据,因此要想不乱码,只能在接收到数据后再手工转换,步骤如下:

  1).获取获取客户端提交上来的数据,得到的是乱码字符串,data="???è?????"

   String data = request.getParameter("paramName"); 

  2).查找ISO8859-1码表,得到客户机提交的原始数据的字节数组

   byte[]
source = data.getBytes("ISO8859-1"); 

  3).通过字节数组以指定的编码构建字符串,解决乱码

   data = new String(source,
"UTF-8"); 

  通过字节数组以指定的编码构建字符串,这里指定的编码是根据客户端那边提交数据时使用的字符编码来定的,如果是GB2312,那么就设置成data = new String(source, "GB2312"),如果是UTF-8,那么就设置成data
= new String(source, "UTF-8")


Request对象实现请求转发


请求转发的基本概念

  请求转发:指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。

  请求转发的应用场景:MVC设计模式

  在Servlet中实现请求转发的两种方式:

  1、通过ServletContext的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。

例如:将请求转发的test.jsp页面

1 RequestDispatcher reqDispatcher =this.getServletContext().getRequestDispatcher("/test.jsp");
2 reqDispatcher.forward(request, response);


  2、通过request对象提供的getRequestDispatche(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。

例如:将请求转发的test.jsp页面

1 request.getRequestDispatcher("/test.jsp").forward(request, response);


  request对象同时也是一个域对象(Map容器),开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。

request对象作为一个域对象(Map容器)使用时,主要是通过以下的四个方法来操作
setAttribute(String name,Object o)方法,将数据作为request对象的一个属性存放到request对象中,例如:request.setAttribute("data", data);
getAttribute(String name)方法,获取request对象的name属性的属性值,例如:request.getAttribute("data")
removeAttribute(String name)方法,移除request对象的name属性,例如:request.removeAttribute("data")
getAttributeNames方法,获取request对象的所有属性名,返回的是一个,例如:Enumeration<String> attrNames = request.getAttributeNames();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: