譬如一个搜索功能,你在一个有搜索功能的jsp页面里面输入中文的搜索内容,如何使后台的servlet类获取正确的信息?
现在我通过request.getParameter("searchtext");获得的是乱码?请问如何解决呢? 

解决方案 »

  1.   

    request.setCharacterEncoding("gbk"); 或者写个过滤器
      

  2.   

    用过滤器.
    在web.xml中
     <filter>
       <filter-name>encoding</filter-name>
       <filter-class>filter.Encoding</filter-class>
       <init-param>
       <param-name>charset</param-name>
       <param-value>utf8</param-value>
       </init-param>
      </filter>
      
      <filter-mapping>
       <filter-name>encoding</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
    filter.Encoding.java中:
    package filter;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;public class Encoding implements Filter {
    private String charset = null; public void destroy() {
    // TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException {
    arg0.setCharacterEncoding(charset);
    arg1.setCharacterEncoding("text/xml;charset=" + charset);
    //System.out.println("filter被执行");
    arg2.doFilter(arg0, arg1); } public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub
    charset = arg0.getInitParameter("charset"); }}
      

  3.   

    我这里有对UTF-8请求和服务器端进行编码转换的方法,但是gb312的我不太清楚,只是做个参考,希望对你有用。 1、在JS里对中文参数进行两次转码 var login_name = document.getElementById("loginname").value;  
    login_name = encodeURI(login_name);  
    login_name = encodeURI(login_name); 2、在服务器端对参数进行解码 String loginName = request.getParameter("login_name");  
    loginName = java.net.URLDecoder.decode(loginName,"UTF-8");  
      

  4.   

    利用String的构造器 new String(bity[],String)来转码 如 
      new String(request.getParameter("searchtext").getBytes("iso-8859-1"),"UTF-8")得到一个转码后的string对象