锁定老帖子 主题:JavaBean编码问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-16
做第一个javabean就遇到了一个棘手的编码问题,哈哈,终于在大家的共同研究之下吧问题给解决了,这里做个小结,以便以后借鉴~!! 首先来看看我这个javabean购物车所牵涉到得文件: carts.html
<meta http-equiv="content-type" content="text/html; charset=utf-8"> <form action="carts.jsp" method="post"> 请选择: <select name="item"> <option>红糟肉5</option> <option>香喷鸭杂5</option> <option>荔枝肉5.5</option> <option>秋刀鱼5</option> <option>咖喱鸡饭65</option> </select> <input type=submit name="submit" value="add"> <input type=submit name="submit" value="remove"> </form>
注意,这里最上面加了一个meta用来设置编码格式
然后 carts1.html
<form action="carts.jsp" method="post"> 请选择: <select name="item"> <option>红糟肉5</option> <option>香喷鸭杂5</option> <option>荔枝肉5.5</option> <option>秋刀鱼5</option> <option>咖喱鸡饭65</option> </select> <input type=submit name="submit" value="add"> <input type=submit name="submit" value="remove"> </form>
这个carts1与carts不同的是没没有那个编码设置
再来看carts.jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'carts.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); %> <jsp:useBean id="mycarts" scope="session" class="com.mycompany.bean.MyCarts" /> <jsp:setProperty name="mycarts" property="*" /> <%mycarts.processRequest(request);%> <h5> 你的购物车: </h5> <hr /> <%--显示购物车中的商品--%> <% String[] items =mycarts.GetItems(); for(int i=0;i<items.length;i++) { out.println("<li>"+items[i]+"</li>"); } %> <hr /> <jsp:include page="carts1.html" /> </body> </html> 注意,include操作使用的是carts1.html而不是carst.html如果include使用carts.html就会出现编码问题.
下面来看我的javabean
package com.mycompany.bean; import javax.servlet.http.*; import java.io.UnsupportedEncodingException; import java.util.Vector; import java.util.Enumeration; public class MyCarts { Vector v =new Vector(); String submit=null; String item=null; private void addItem(String name) { if(name!=null) { v.addElement(name); } } private void deleteItem(String name) { if(name!=null) { v.removeElement(name); } } public void setItem(String s) { this.item=s; } public void setSubmit(String s) { this.submit=s; } public String[] GetItems() { //创建一个数组 String[] str =new String[v.size()]; v.copyInto(str); return str; } //处理用户的请求 public void processRequest(HttpServletRequest request) { //表示用户回车添加商品 if(submit==null) { addItem(item); } if(submit.equals("add")) { addItem(item); } if(submit.equals("remove")) { deleteItem(item); } reset(); } //当一次请求结束时,清空变量 private void reset() { submit=null; item=null; } } 没有特殊的地方,这里就不做解释了!
通过这个实例,我想说明几点: 一:首先我们必须要把各个页面的编码设置成统一格式,jsp一般都是utf-8,那又在那里设置呢?答案是在你的.jsp页面或.html右键单击,选择"References",如果你在jsp页面上单击的就选择"java",如果你在html页面上单击就选择"html",选择后你就会看到一个编码下拉框,这时你选择第一个(utf-8) 就可以了,所有向关联的页面都要这个统一设置哈! 二:当我这样设置后,还是解决不了问题,然后我就在.jsp页面的<body> 下方加入如下代码: <% 三:到此,问题解决了90%,还有一个问题没有解决,这就是为什么我要做两个html页面分别是carts.html 和 carts1.html 。其中,carts.html是启动显示页面,而carts1.html是用来嵌入carst.jsp页面的,因为这个页面的顶上没有设置编码,如果设置了编码又被嵌入到carts.jsp就会出现乱码了,因为carts.jsp被设置了两次编码了,我不知道是ub是这个原因,但我把carts1.html嵌入后就不会有乱码出现了。 还有一个问题,就是我在carts.html中加入了一个meta设置编码格式,这个也是必须加的,如果不加传递到javabean里的内容就不是utf-8编码了,当然显示出来就会是乱码了哈~!!! 所能总结的就是这么多了~~如果有没有提到的还希望大家提出!!!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-18
没有总结一下为什么会这样...
|
|
返回顶楼 | |
浏览 1735 次