Student.javapackage test8;
public class Student{
String name=null;
long number;
double height,weight;
public String getName(){
try{
byte b[]=name.getBytes("gbk2312");
name=new String(b);
return name;
}
catch(Exception e){
return name;
}
}
public void setName(String newName)
{
name=newName;
}
public long getNumber()
{
return number;
}
public void setNumber(long newNumber)
{
number=newNumber;
}
public double getHeight()
{
return height;
}
public void setHeight(double newHeight)
{
height=newHeight;
}
public double getWeight()
{
return weight;
}
public void setWeight(double newWeight)
{
weight=newWeight;
}
}student.jsp<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="test8.Student"%>
<html>
<body bgcolor="#00FFFF">
<font size="10">
<jsp:useBean id="zhang" class="test8.Student" scope="page"></jsp:useBean>
<jsp:setProperty name="zhang" property="name" value="张三"/>
<p>名字是:<jsp:getProperty name="zhang" property="name"/>
<jsp:setProperty name="zhang" property="number" value="11100"/>
<P>学号是:<jsp:getProperty name="zhang" property="number"/>
<% double height=1.70;%>
<jsp:setProperty name="zhang" property="height" value="<%=height+0.05%>"/>
<p>身高是:<jsp:getProperty name="zhang" property="height"/>米
<jsp:setProperty name="zhang" property="weight" value="67.29"/>
<p>体重是:<jsp:getProperty name="zhang" property="weight"/>公斤
</p>
</p></P></p></font></body>
</html>student2.jsp<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="test8.Student"%>
<html>
<body>
<form action="" method="post">
<p>输入学生的姓名:<input type="text" name="name" ></p>
<P>输入学生的学号:<input type="text" name="number"></P>
<p>输入学生的身高:<input type="text" name="height"></p>
<p>输入学生的体重:<input type="text" name="weight"></p>
<input type="submit" value="提交" >
</form>
<jsp:useBean id="zhang" class="test8.Student" scope="page"></jsp:useBean>
<jsp:setProperty name="zhang" property="*"/>
<p>名字是:<jsp:getProperty name="zhang" property="name"/>
<P>学号是:<jsp:getProperty name="zhang" property="number"/>
<p>身高是:<jsp:getProperty name="zhang" property="height"/>米
<p>体重是:<jsp:getProperty name="zhang" property="weight"/>公斤
</p>
</p></P></p></body>
</html>
问题就是当"byte b[]=name.getBytes("gbk2312")"中,字符设置成"gbk"或"gb2312"时,student.jsp代码可以显示出中文,但student2.jsp却出现乱码,设置成"iso-8859-1"时却相反,student.jsp出现乱码,student2.jsp却显示正常。实在不知怎么设置了,希望大家指点下
public class Student{
String name=null;
long number;
double height,weight;
public String getName(){
try{
byte b[]=name.getBytes("gbk2312");
name=new String(b);
return name;
}
catch(Exception e){
return name;
}
}
public void setName(String newName)
{
name=newName;
}
public long getNumber()
{
return number;
}
public void setNumber(long newNumber)
{
number=newNumber;
}
public double getHeight()
{
return height;
}
public void setHeight(double newHeight)
{
height=newHeight;
}
public double getWeight()
{
return weight;
}
public void setWeight(double newWeight)
{
weight=newWeight;
}
}student.jsp<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="test8.Student"%>
<html>
<body bgcolor="#00FFFF">
<font size="10">
<jsp:useBean id="zhang" class="test8.Student" scope="page"></jsp:useBean>
<jsp:setProperty name="zhang" property="name" value="张三"/>
<p>名字是:<jsp:getProperty name="zhang" property="name"/>
<jsp:setProperty name="zhang" property="number" value="11100"/>
<P>学号是:<jsp:getProperty name="zhang" property="number"/>
<% double height=1.70;%>
<jsp:setProperty name="zhang" property="height" value="<%=height+0.05%>"/>
<p>身高是:<jsp:getProperty name="zhang" property="height"/>米
<jsp:setProperty name="zhang" property="weight" value="67.29"/>
<p>体重是:<jsp:getProperty name="zhang" property="weight"/>公斤
</p>
</p></P></p></font></body>
</html>student2.jsp<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="test8.Student"%>
<html>
<body>
<form action="" method="post">
<p>输入学生的姓名:<input type="text" name="name" ></p>
<P>输入学生的学号:<input type="text" name="number"></P>
<p>输入学生的身高:<input type="text" name="height"></p>
<p>输入学生的体重:<input type="text" name="weight"></p>
<input type="submit" value="提交" >
</form>
<jsp:useBean id="zhang" class="test8.Student" scope="page"></jsp:useBean>
<jsp:setProperty name="zhang" property="*"/>
<p>名字是:<jsp:getProperty name="zhang" property="name"/>
<P>学号是:<jsp:getProperty name="zhang" property="number"/>
<p>身高是:<jsp:getProperty name="zhang" property="height"/>米
<p>体重是:<jsp:getProperty name="zhang" property="weight"/>公斤
</p>
</p></P></p></body>
</html>
问题就是当"byte b[]=name.getBytes("gbk2312")"中,字符设置成"gbk"或"gb2312"时,student.jsp代码可以显示出中文,但student2.jsp却出现乱码,设置成"iso-8859-1"时却相反,student.jsp出现乱码,student2.jsp却显示正常。实在不知怎么设置了,希望大家指点下
byte b[]=name.getBytes("ISO-8859-1");
String toEncoding = "GB2312";
name=new String(b,toEncoding); 给分吧
你直接用name=new String(b,"gbk"); 就行了。
还有就是filter中关于编码的设置也全设置为UTF-8
这个filter可以google一下写法,或者spring也提供一种web.xml配置方式
student.jsp向Student bean赋值数据与student2.jsp向Student bean用表格的POST方式提交数据时,两者的字符编码是不同的.
这就是你说的:student.jsp与student2.jsp总是一个对了,另一个就会错了.
要想使两个jsp同时成立,我想不得不对student2.jsp加入如下代码就行了:(这样:student.jsp与student2.jsp都会正确了)
在student2.jsp中的<jsp:setProperty name="zhang" property="*"/> 之后,加入
如下代码:
<%
String newn=request.getParameter("name");
if(newn!=null)
newn=new String(newn.getBytes("iso-8859-1"),"gb2312");
%>
<jsp:setProperty name="zhang" property="name" value="<%=newn %>"
//后面的代码就是你原来的代码:
<p>名字是: <jsp:getProperty name="zhang" property="name"/>
<P>学号是: <jsp:getProperty name="zhang" property="number"/>
........
你这里没必要用byte b[];因为字节数组与字符串的存在的内存分配是不一样的。
你直接用name=new String(name.getByte("ISO-8859-1"),"gbk"); 就行了。
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncodeing="gb2312" />
如果URIEncodeing没有设置的话默认是"ISO-8859-1" 如果你设置了话就不需转码了~可以试试
1)你的三个文件的编码全为gb2312,没有改动它.注:Student.java中
byte b[]=name.getBytes("gbk2312"); 改为:byte b[]=name.getBytes("gb2312");
2)tomcat的 server.xml 中我原来就有的:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncodeing="gb2312" />
3)在student2.jsp中的 <jsp:setProperty name="zhang" property="*"/> 之后,只加入如下代码<%
String newn=request.getParameter("name");
if(newn!=null)
newn=new String(newn.getBytes("iso-8859-1"),"gb2312");
%>
<jsp:setProperty name="zhang" property="name" value=" <%=newn %>" 就都正确了.我就是这么做的,现在又试验了几次,两个jsp显示都正确,没有乱码啊.
"/student2.jsp(22,0) According to TLD, tag jsp:setProperty must be empty, but is not
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:132)
org.apache.jasper.compiler.Parser.parseBody(Parser.java:1644)
......."此类错误。
我的浏览器编码都设成"gb2312"了。唉,真不知哪里我的为什么编译不成功,麻烦你们了,我都不好意思了。
http://archaic.blog.hexun.com/5576058_d.html