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

简介: 1 response.setHeader("Content-type", "text/html;charset=UTF-8");//设置浏览器以什么编码显示数据,注意分号 response.setCharacterEncoding("UTF-8");2 Java中文使用Unicode编码。

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


目录
相关文章
|
1月前
|
Java 数据安全/隐私保护 索引
(Java)Java里JFrame窗体的基本操作(组件篇-3)
回顾 说过了下拉框和下拉列表,本篇内容将了解滚动面板和各类输入框 什么是组件? 如果不熟悉组件,可以将组件看作是某个Form表单中的表单元素,组件可以完善JFrame窗口的布局,以及一些功能; 本篇内容中所有的组件所用到的类全都来自于javax.swing这个包中,记得引入; 另:在使用组件前,请先将窗体中的内容类给实例化出来进行操作,代码如下: Container c = getContentPane(); JScollPane JScollPane类,说的就是滚动面板。它不同于其他组件,它是一个容器,
63 1
|
1月前
|
Java 索引 容器
(Java)Java里JFrame窗体的基本操作(组件篇-2)
回顾 这算是JFrame窗体基本操作的组件第二篇了,上一篇说过了单选框,复选框,按钮。 在这一篇中,我会说明下拉框和列表框 什么是组件? 自行百度:java中JFrame窗体里的组件是什么? 名字都给你想好了 ( :I ) JComBox下拉框 JComBox类,就是下拉框,实例化出来后,要填写泛型&lt;&gt;,添加是什么数据类型的内容,泛型中就写上该数据类型; JComboBox&lt;?&gt; combox = new JComboBox&lt;&gt;(); 以下实例化下拉框的时候我泛型写的全
72 0
|
1月前
|
Java 容器
(Java)Java里JFrame窗体的基础操作(组件-1)
如果不熟悉组件,可以将组件看作是某个Form表单中的表单元素,当然这只是在不熟悉组件的前提下。如果深入了解了组件,那么它有着非常多的组件,这些组件可以完善JFrame窗口的布局,以及一些功能; 本篇内容中所有的组件所用到的类全都来自于javax.swing这个包中,记得引入
49 1
|
2月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
335 1
|
2月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
291 0
|
3月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
223 7
|
5月前
|
Java 数据库连接 数据库
Java 组件详细使用方法与封装实战指南
本指南详解Java核心组件使用与封装技巧,涵盖跨平台开发、面向对象编程、多线程、数据库操作等关键内容,并提供工具类、连接池、异常及响应结果的封装方法。结合Spring框架、MyBatis、Spring Boot等主流技术,助你掌握高质量Java组件设计与开发实践。
190 2
|
3月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
282 1
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
460 0
|
Web App开发 JavaScript 前端开发
[译] 用 Web Worker 改善 Vue 组件性能
[译] 用 Web Worker 改善 Vue 组件性能