• java web 中文乱码问题,上传组件传参乱码解决


    1 response.setHeader("Content-type", "text/html;charset=UTF-8");//设置浏
    览器以什么编码显示数据,注意分号
     response.setCharacterEncoding("UTF-8");

    Java中文使用Unicode编码。在Cookie中使用Unicode字符时需要对Unicode字符进行编
    码,否则会乱码。
    编码使用java.net.URLEnoder类的encode(String str,String encoding)方法。
    解码使用java.net.URLDecoder类的decode(String str,String encoding)方法。


    看如下代码:
    List<FileItem> list =upload.parseRequest(request);

    Iterator<FileItem> it = list.iterator();
    String username=null;
    String password=null;
    while (it.hasNext()) {
     FileItem item = (FileItem) it.next();// 每一个item就代表一个表单输入项
           /*isFormField方法用于判断FileItem类对象封装的数据是否属于一个普通表单字段,还是属于一个文件表单字段,
     如果是普通表单字段则返回true,否则返回false。
     */
     if (item.isFormField()) {
      String name = item.getFieldName();// input的名称
      String value = item.getString();// input的值
      if(item.getFieldName().equals("username")){
      username=new String(item.getString().getBytes("iso-8859-1"),"utf-8"); //注意这里的username不能直接等于item.getString()会乱码的 因为文件上传组件的表单有个enctype="multipart/form-data"
     }
     if(item.getFieldName().equals("password")){
     password=new String(item.getString().getBytes("iso-8859-1"),"utf-8");//这里和前面username一样
     }
     } 
    4 URL传中文参数 和 表单传中文参数
    后者,如果是POST方法 则 只需在服务端写上request.setCharactorEncodeing("utf-8");即可(看JAVAWEB课件第三章是这么写的,不知道是不是仅仅如此就可以了)
    前者,需要对URL进行两次编码 如果是js则 encodeURI(encodeURI())即可 如果是服务器端  java.net.URLEncoder.encode()方法吧
    URL传中文参数 在 xmlHttpRequest.open()中,如果是GET方法,那么需要编辑,如果是POST好像不用编码吧,但我看课件有这么说的。

    /*发送包含用户输入信息的请求体
    encodeURIComponent() 函数可把字符串作为URI 组件进行编码。保证各种特殊字
    符能被正确发送。
    */
    xmlHttp.send("name=" + encodeURIComponent(name)+ "&value=" +
    encodeURIComponent(value));

    可能POST还需要编码,唉!

    1  DBConnection.class.getResourceAsStream("Conn.properties")

    地址怎么表示的呢? 是当前目录 还是什么的,为什么兰冬跑不出来。
    2  牢记 存入图片需要开户事务,并需要提交 才可以。先牢记吧。
    3   图片地址指向一个servlet,servlet转向图片,则原页面可以显示图片。

    4 <script type="text/javascript">

     var xmlHttp; //声明XMLHttpRequest对象
     
     /*创建XMLHttpRequest对象*/
     function createXMLHttpRequest() {
      if (window.ActiveXObject) { //IE浏览器
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } else if (window.XMLHttpRequest) { //非IE浏览器 
       xmlHttp = new XMLHttpRequest();
      }

      if (!(xmlHttp)) { //异常,创建对象失败
       window.alert("创建XMLHttpRequest异常!");
      }
     }
     
     /*输出验证结果*/
     function validateResult() { 
      //alert(xmlHttp.readyState); //输出状态码
      if (xmlHttp.readyState == 4) {
        //alert(xmlHttp.status); //输出响应代码
        if (xmlHttp.status == 200) {
        if (xmlHttp.responseText == "error") {
         alert("用户名已经存在!");
        }
        }
      }
     }
     
     /*执行Ajax验证*/
     function userNameValidate() { 
      
      createXMLHttpRequest(); //创建XMLHttpRequest对象
       
      var username = document.getElementById("username").value;
      
      xmlHttp.open("post", "RegisterServlet.servlet", true);//初始化XMLHttpRequest对象

      xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");//采用POST提交方式时要加上这句

      xmlHttp.onreadystatechange = validateResult; //设置回调函数
      
      xmlHttp.send("username="+username); //发送请求
     }

     注意ajax用post和get方式不一样 在于第三个函数里的 setRequestHeader和 传参的方式不一样send()里面写参数


    List<FileItem> list =upload.parseRequest(request);

       Iterator<FileItem> it = list.iterator();
                String username=null;
                String password=null;
       while (it.hasNext()) {
        FileItem item = (FileItem) it.next();// 每一个item就代表一个表单输入项
                    /*isFormField方法用于判断FileItem类对象封装的数据是否属于一个普通表单字段,还是属于一个文件表单字段,
        如果是普通表单字段则返回true,否则返回false。
        */
        if (item.isFormField()) {
         String name = item.getFieldName();// input的名称
         String value = item.getString();// input的值
         if(item.getFieldName().equals("username")){
         username=new String(item.getString().getBytes("iso-8859-1"),"utf-8"); //注意这里的username不能直接等于item.getString()会乱码的 因为文件上传组件的表单有个enctype="multipart/form-data"
         
         }
         if(item.getFieldName().equals("password")){
          password=new String(item.getString().getBytes("iso-8859-1"),"utf-8");//这里和前面username一样
         }
        }

        
    6
    response.setContentType("image/jpeg"); 图片输出时设置

    document.getElementById("").style.display="block";可以但不能写成document.getElementById("").style="display:block"因为style是个样式对象,但是在火狐里就可以 悲催了。。

    AJAX

    1
    /*执行Ajax验证*/
     function userNameValidate() { 
      
      createXMLHttpRequest(); //创建XMLHttpRequest对象
       
      var username = document.getElementById("username").value;
      
      xmlHttp.open("post", "RegisterServlet.servlet", true);//初始化XMLHttpRequest对象

      xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");//采用POST提交方式时要加上这句

      xmlHttp.onreadystatechange = validateResult; //设置回调函数
      
      xmlHttp.send("username="+username); //发送请求
     }
    注意POST方法提交时,需要加上xmlHttp.setRequestHeader();方法



    转自 csdn http://blog.csdn.net/frona_lee/article/details/7939520


  • 相关阅读:
    【luogu】 P1433 吃奶酪
    【noip 2016】 组合数问题(problem)
    【清北学堂】 死亡(death)
    【noip 2004】 合并果子
    微信小程序:每个邮箱仅能申请一个小程序
    Babel-polyfill 的作用
    react.js中模拟事件总线,子组件调用父组件时,发挥作用
    多行文本溢出显示省略号(…) text-overflow: ellipsis ------------- webkit-line-clamp 多行文字溢出...
    es6-class
    ES6--promise
  • 原文地址:https://www.cnblogs.com/ae6623/p/4416592.html
Copyright © 2020-2023  润新知