ajax交互servlet返回数据和jdbc模糊查询-中文-已经设置了UTF-8和解决了乱码

1.编码是将字符按一定翻译方式转换成字节存储在内存或外存中,解码是按照一定翻译方式将存储中的字节转换成字符。

2.ASCII是单字节,最高位总为0,相当于只占用了一个字节的7位,2^7=128个字符,相当于键盘上的128个键,有大小写因为字母,有*,%¥#@!+....等这些可显示字符,也有不可以显示的控制符F1,ctr。。。

 而ISO-8859-1是启用了ASCII码的最高位,理论上是能再多128位,实际上没用掉这么多,至于多了那些,你们自己查下表

UTF-8是可变长的,具体中文几个字节,怎么传输,怎么区分是ASCII还是什么的你们自己去查看,这个应该是熟悉的,万国码。

3.web中,在浏览器有表单通过URL,AJAX等传递数据方式,这个时候就有了编码的地方,比如你表单数据用get方式传,这个参数是怎么编码的呢,然后到后台服务端,我们要接收那个参数,接收时候,我们要把那个参数从内存中拿出来,这个时候我们又该把它编码成什么,然后到数据库,数据库又是怎么比较和编码数据的。当这3个地方有时候有了区别就会导致乱码。这个解决乱码,网上方案到处都是,你也可以搜索“java 模糊查询 中文”等看看。

4.当你可以打印那些sql语句看看是否有乱码,如果没有了,但是比如在“jdbc 模糊查询时用statement去执行查询”就会有bug,你获取不到结果的,rs.next()总是false,解决就是用preparestatement 替代statement。一下子还没出来的话,清理下浏览器和工程,重启下eclipse。

5.ajax交互servlet返回数据给ajax。

在Servlet编程中,经常需要通过response对象将一些信息返回给浏览器,给我们的客户端,而我们在服务器端显示的中文,但是响应给客户端浏览器却是乱码,这主要是由于response对象的getWriter()方法返回的PrintWriter对象默认使用“ISO-8859-1”字符集编码进行Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中文字符,所以Java在进行转换的时候会将无效的字符编码输出给客户端,于是便出现了乱码,为此ServletResponse接口中便定义了setCharacterEncoding、setContentType等方法来指定getWriter方法返回的PrintWriter对象所使用的字符集编码,所以我们在写Servlet程序中,在调用getWriter方法之前设置这些方法的值。我们为了防止乱码,经常将以下两条语句一起写上:

response.setContentType(“text/html;charset=utf-8”);

response. setCharacterEncoding(“UTF-8”);

//ajax
<script type="text/javascript">
    function findsc(){
        $(‘#metable‘).empty();
        $.ajax({
            url: "find",
            type: "get",
            data:{
                key:$(‘#keywords‘).val()
            },
            success:function(data){
                alert(data);
                $(‘#metable‘).append(data);
            }
        });
    }

</script>
//servlet关键
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html;charset=utf-8");
        response. setCharacterEncoding("UTF-8");

        response.getWriter().append("Served at: ").append(request.getContextPath());
        MyServiceDao myServiceDao=new MyServiceDao();
        List<Sc> temp;
        PrintWriter outme=response.getWriter();
        outme.print("<tr><td style=‘background:#FFF68F;‘>学号</td><td style=‘background:#FFF68F;‘>姓名</td><td style=‘background:#FFF68F;‘>语文</td><td style=‘background:#FFF68F;‘>数学</td><td style=‘background:#FFF68F;‘>英语</td><tr>");
        try {
            temp=myServiceDao.getScByName(request.getParameter("key"));
            for(Sc sc : temp){
                outme.print(
                        "<tr><td style=‘background:#CAFF70;‘>"+sc.getId()
                        +"</td><td style=‘background:#CAFF70;‘>"+sc.getName()
                        +"</td><td style=‘background:#CAFF70;‘>"+sc.getYuwen()
                        +"</td><td style=‘background:#CAFF70;‘>"+sc.getShuxue()
                        +"</td><td style=‘background:#CAFF70;‘>"+sc.getYingyu()
                        +"</td><tr>"
                        );
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        outme.close();
    }
时间: 2024-10-08 03:35:22

ajax交互servlet返回数据和jdbc模糊查询-中文-已经设置了UTF-8和解决了乱码的相关文章

spring ajax提交并返回数据方式

jsp $('#userId').change(function() { $.ajax({ url: "${ctx}/test/checkUser.do", contentType: "application/json;charset=utf-8", type: "get", data:{ userId:$("#userId").val() }, success: function(data) { if(data!=''){

[转]IE9.0或者360下js(JavaScript、jQuery)不能正确执行(加载),按F12后执行正常;Firefox下ajax的success返回数据data(json、string)无法获取

兼容问题1: 页面的分享等插件加载不全,并无法点击. 兼容问题2: IE下页面选择器(#id..class.etc.)绑定click事件无法访问到,后台springmvc方法,也无法获取ajax的success方法返回值data. 兼容问题3: 在IE和Google下能够获取,ajax的success返回的数据data,但firefox下获取不到. 兼容问题4: 页面跳转,或url进入,js代码不能正确执行,如果按了F12后(开启F12),JavaScript(加载)事件可以正常响应,一切都正常

jdbc 模糊查询和prepareStatement中文乱码解决方案

1.最近因为写J2EE版本的书店管理系统,碰到了模糊查询的问题:因为我查询的关键字是中文,导致刚开始出现了很多问题:ResultSet rs-> 比如: select * from book where bookName = '操作系统';明明这条语句是可以在mysql数据库中查到的,但是 rs.next()却始终未false;这很奇怪,我唯一能想到的原因就是中文乱码问题;果然经过查阅资料;找到了解决方法; 就是你在写URL时要加上编码的格式: ->this.URL = "jdbc:

JDBC模糊查询参数的注入的注意点

笔者刚开始是这样写sql语句的String sql="SELECT * FROM bookBasicInfo,bookTypeInfo WHERE     bookBasicInfo.BelongType=bookTypeInfo.BookTypeID         AND bookBasicInfo.bookName like %?%";采用参数注入ps.setString(1,  bookName);但是在执行的过程中,java跑出如下异常java.sql.SQLExceptio

Django视图,与数据库交互并返回数据

环境:python 2.7.13  数据库:sqlite3(Django自带) 在学习Django的时候,遇到了困难.大概就是取到数据库数据后一直不能转成json数据.最后终于自己琢磨解决了. 要点就是在通过Django API与sqlite数据库做交互时,要看清楚返回的对象是什么类型. 首先,与数据库做交互,简单来说,无非就是增删改查.首先来说一说"查",以后会陆续更新其他 查 在网上查了几种比较常用的方法 models.UserInfo.objects.all() models.U

asp.net mvc 使用Ajax调用Action 返回数据【转】

使用asp.net mvc 调用Action方法很简单. 一.无参数方法. 1.首先,引入jquery-1.5.1.min.js 脚本,根据版本不同大家自行选择. <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 2.在Controllers中书写前台Ajax需要调用的Action,比如:

Asp.net mvc 使用Ajax调用Action 返回数据。

使用asp.net mvc 调用Action方法很简单. 一.无参数方法. 1.首先,引入jquery-1.5.1.min.js 脚本,根据版本不同大家自行选择. <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 2.在Controllers中书写前台Ajax需要调用的Action,比如:

select2 ajax加载数据,支持模糊查询(非本地)

$('#select_yx').select2({ placeholder: "----请选择院系----", width: "183px", allowClear: true, language: { noResults: function (params) { return "暂无数据"; } }, minimumResultsForSearch: -1, ajax: { url: apiaddress + '/Institute/GetIn

ajax请求、servlet返回json数据

ajax请求.servlet返回json数据 1.方式一 response.setcontenttype("text/html;charset=utf-8"); response.setheader("cache-control", "no-cache"); string str = "{'msg':'成功','success':'true'}"; out.print(str); out.flush(); out.close(