jsp提交页编码是UTF-8,MYSQL库也是UTF-8,为什么提交了中文字符在数据库里变成乱码了呢?这种问题怎么解决?谢谢另外,JSP弹出对话框(比如弹出“XXX审核通过”下面跟确定按钮)和返回上一页以及转到新URL应该怎么写呢?谢谢

解决方案 »

  1.   

    jsp提交到得servlet中的doPost或是doGet方法中,取参数之前先执行request.setCharacterEncoding("UTF-8");
    第二点可以用js解决 alert("*****");location.href="******"
    返回上一页 在servlet里面可以response.sendRedirect(request.getRequestURL());
              在jsp里面可以用 js: history.go(-1)
      

  2.   

    1.jsp页面上应该是类似这样的格式:
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ page import="java.sql.*" import="java.lang.*" %><%@page  contentType="text/html; charset=UTF-8"%><html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title></title></head><body><%request.setCharacterEncoding("UTF-8");%></body></html>
    2.数据库编码
    CREATE TABLE `user` (  `id` int(11) NOT NULL auto_increment,  `username` varchar(50) NOT NULL,  `password` varchar(100) NOT NULL,
      PRIMARY KEY  (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    3.连接数据库编码
    <%   Class.forName("org.gjt.mm.mysql.Driver").newInstance();   String url="jdbc:mysql://localhost/yourtable?user=root&password=root&useUnicode=true&characterEncoding=UTF-8";   Connection conn=DriverManager.getConnection(url);   Statement stmt=conn.createStatement(); %>
    4.jsp弹出对话框可以使用js实现。主题是window.alert()的应用。
    5.返回上一页 <a href="javascript:history.back(-1)">返回上一页</a>
    6.转到新url window.redirect(“你的页面”)注意绝对和相对路径
    祝你好运!
      

  3.   

    1.你先确定mysql的设置字符集是UTF-8,重新设置就要重新建表
       每个jsp制定页面编码,<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
       加这句:request.setCharacterEncoding("UTF-8");
       连接数据库url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
     
       看看上面几个环节有没有漏的,或者错的2.javascript 里面 弹带确定的框 confirm(”你确定??“);3. 转向eg:response.sendRedirect("*.jsp") 
                  or  <jsp:forward page="*.jsp" />.
      

  4.   

    你要先确定乱码发生在哪个阶段,哪种情况
    先在servlet中看看取到的是不是乱码servlet的中文乱码
    响应编码,(输出编码)
    默认response.setContentType("text/html");
    没有设置编码,所以出现中文时会出现乱码
    解决办法:response.setContentType("text/html;charset=utf-8");通过jsp页面,html页面或者servlet中的表单元素提交参数给对应的jsp页面或servlet
    而jsp和servlet接收的参数产生中文乱码,在接收post提交的参数之前,使用request.setCharactEncoding("utf-8")
    设定接收参数的内容使用"utf-8"编码,更好的解决办法是添加过滤器使用表单传递参数可以通过get和post方式传递参数,也可以通过连接的方式传递参数,这个传递参数的方式实际上就是get方式传递参数
    这种方式传递中文也可以产生乱码
    解决方法:修改服务器的<Connector URIEncoding="utf-8">
      

  5.   

    大家说的都非常对,我感觉你可能有两个地方需要注意:
    1,String url="jdbc:mysql://localhost/yourtable?user=root&password=root&useUnicode=true&characterEncoding=UTF-8";驱动的链接有没有加utf-8
    2,在request里取参数前是否加了request.setCharacterEncoding("UTF-8");
      

  6.   

    servlet中:
    request.setCharacterEncoding("UTF-8"); 
    response.setContentType("text/html;charset=utf-8"); 
    jsp页面中:
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      

  7.   

    乱码问题就是编解码所用的字符集不一致引起,所以要保证传送的时候和读取的时候都是使用同一种编码,就能彻底解决乱码问题。<%@page contentType="text/html;charset=gb2312"%>
    <%@page pageEncoding="gb2312"%>
    <%request.setCharacterEncoding("gb2312");%>
      

  8.   

       mysql中文乱码问题有很多的解决方法 楼主可以到网上搜索一下 并根据自己的情况进行相应的设置
      

  9.   

    编码问题。把所有的东东都改成utf-8,
      

  10.   

    jsp页面改成utf-8
    数据库表改成utf-8
    数据库连接参数改成utf-8
    web服务器里也要改成utf-8
      

  11.   

    谢谢楼上各位朋友的热心帮助,回答的朋友都有分!!!第二第三个问题可否直接给出代码呢??非常感谢。,谢谢!我需要第二第三个问题的源代码另外,JSP弹出对话框(比如弹出“XXX审核通过”下面跟确定按钮)和返回上一页以及转到新URL应该怎么写呢?谢谢
      

  12.   

    把所有的都改成utf-8,当然,这样还是会有乱码,问题在哪呢?就在1\6楼说的那些地方.第一种办法就是和一楼说的那样,加request.setCharacterEncoding("UTF-8"); 第二种办法就是和4楼说的那样,加过滤器.个人认为过滤器效果要好很多,省的每个页面都要写了.
    加过滤器:
    首先在web.xml下加这段:
    <filter>  
            <filter-name>Encoding</filter-name>  
            <filter-class>  
                AAA.SetCharacterEncodingFilter
            </filter-class>  
            <init-param>  
                <param-name>encoding</param-name>  
                <param-value>UTF-8</param-value>  
            </init-param>  
    </filter>
    <filter-mapping>  
            <filter-name>Encoding</filter-name>  
            <url-pattern>/*</url-pattern>  
    </filter-mapping>
    这个地方是可以改成你需要的
    <init-param>  
          <param-name>encoding</param-name>  
          <param-value>UTF-8</param-value>  
    </init-param> 注意,请把配置加在web.xml的最前面,否则可能不起作用.从上面的配置可以看出,我用了一个SetCharacterEncodingFilter类(实现Filter接口),这个类的写法:
    package AAA;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 SetCharacterEncodingFilter implements Filter {   
      
        protected String encoding = null;   
      
        protected FilterConfig filterConfig = null;   
      
        protected boolean ignore = true;   
      
        /*  
         * (non-Javadoc)  
         *   
         * @see javax.servlet.Filter#destroy()  
         */  
        public void destroy() {   
      
            this.encoding = null;   
            this.filterConfig = null;   
      
        }   
      
        /*  
         * (non-Javadoc)  
         *   
         * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,  
         *      javax.servlet.ServletResponse, javax.servlet.FilterChain)  
         */  
        public void doFilter(ServletRequest request, ServletResponse response,   
                FilterChain chain) throws IOException, ServletException {    
           
            if (ignore || (request.getCharacterEncoding() == null)) {   
                String encoding = selectEncoding(request);   
                if (encoding != null)   
                    request.setCharacterEncoding(encoding);   
            }     
            
            chain.doFilter(request, response);   
        }   
      
        /*  
         * (non-Javadoc)  
         *   
         * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)  
         */  
        public void init(FilterConfig filterConfig) throws ServletException {   
      
            this.filterConfig = filterConfig;   
            this.encoding = filterConfig.getInitParameter("encoding");   
            String value = filterConfig.getInitParameter("ignore");   
            if (value == null)   
                this.ignore = true;   
            else if (value.equalsIgnoreCase("true"))   
                this.ignore = true;   
            else if (value.equalsIgnoreCase("yes"))   
                this.ignore = true;   
            else  
                this.ignore = false;   
      
        }   
      
        /*  
         *   
         */  
        protected String selectEncoding(ServletRequest request) {   
      
            return (this.encoding);   
      
        }   
      
    }
      

  13.   

    1,教你一个很简单易懂的方法
    在servlet中 
    String name=request.getParmerter("name(表单参数)");
    name=new String(name.getByte("iso-8859-1"),"gbk");
    2,直接加过滤器,就不用转码了!
      

  14.   

    还有一个不能忽略的问题 就是你看看你的  WEB-INF\lib\  下的连接数据库的那个驱动 的版本和你的tomate对应不驱动的版本太低  也会出现问题我也出现过和你一样的问题  我的什么码都转了 过滤器也加了,可是还是加到数据库的时候乱码。汗那       最后发现时 驱动的版本太低,按说 应该报错的呀说驱动不行的啊,可它就是不报错。
      

  15.   

    从页面到数据库统一用utf-8,web.xml中加上字符集过滤器,OK
      

  16.   

    中文乱码问题,分两种:
    一、POST方式提交
        这种方式下,需要修改tomcat下server.xml配置文件<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="8443" />修改为<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="8443" URIEncoding="GBK" />二、GET方式提交
        这种方式下,用Filter过滤即可解决。