`
wantingqiang
  • 浏览: 23525 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JavaBean编码问题

阅读更多

      做第一个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> 下方加入如下代码:

      <%
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
      %>

  三:到此,问题解决了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编码了,当然显示出来就会是乱码了哈~!!!

      所能总结的就是这么多了~~如果有没有提到的还希望大家提出!!!

 

 

分享到:
评论
1 楼 xjlnjut730 2009-05-18  
没有总结一下为什么会这样...

相关推荐

Global site tag (gtag.js) - Google Analytics