to yophoo(雅风): 放在哪个web.xml里? 是webapps\myweb\WEB-INF\下的,还是conf\下的?
加在webapps\myweb\WEB-INF\的web.xml里tomcat启动是报错:(
错误信息如下: 严重: Parse Error at line 42 column 11: The content of element type "web-app" mu st match "(icon?,display-name?,description?,distributable?,context-param*,filter *,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mappi ng*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,secur ity-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*) ". org.xml.sax.SAXParseException: The content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,context-param*,filter*,filter- mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welco me-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-const raint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)". at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Un known Source) at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source) at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown S ource) at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement( Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent Dispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un known Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1543) at org.apache.catalina.startup.ContextConfig.applicationConfig(ContextCo nfig.java:282) at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:63 9) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfi g.java:243) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl eSupport.java:166) at org.apache.catalina.core.StandardContext.start(StandardContext.java:3 567) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188) at org.apache.catalina.core.StandardHost.start(StandardHost.java:738) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347 ) at org.apache.catalina.core.StandardService.start(StandardService.java:4 97) at org.apache.catalina.core.StandardServer.start(StandardServer.java:219 0) at org.apache.catalina.startup.Catalina.start(Catalina.java:512) at org.apache.catalina.startup.Catalina.execute(Catalina.java:400) at org.apache.catalina.startup.Catalina.process(Catalina.java:180) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description>
str=request.getParameter("str");
new String(str.trim().getBytes("iso8859-1"), "GB2312");
public static String toChinese(String strvalue)
{
try{
if(strvalue==null)
return null;
else
{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}凡是涉及中文字符串,如从数据库中读取中文字符串,或变量名赋值时,使用toChinese函数:
toChinese("这是中文字符串")
你的办法到是可以考虑
GBK和GB2312有什么区别?
用这个方法试试!
放在哪个web.xml里?
是webapps\myweb\WEB-INF\下的,还是conf\下的?
严重: Parse Error at line 42 column 11: The content of element type "web-app" mu
st match "(icon?,display-name?,description?,distributable?,context-param*,filter
*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mappi
ng*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,secur
ity-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)
".
org.xml.sax.SAXParseException: The content of element type "web-app" must match
"(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-
mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welco
me-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-const
raint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)".
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Un
known Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown S
ource)
at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(
Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent
Dispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un
known Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.commons.digester.Digester.parse(Digester.java:1543)
at org.apache.catalina.startup.ContextConfig.applicationConfig(ContextCo
nfig.java:282)
at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:63
9)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfi
g.java:243)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:166)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3
567)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188) at org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347
)
at org.apache.catalina.core.StandardService.start(StandardService.java:4
97)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:219
0)
at org.apache.catalina.startup.Catalina.start(Catalina.java:512)
at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
另外一般中文的处理办法如下:
1:在jsp页面加入:
<%@ page contentType="text/html; charset=gb2312" %>
2:在servlet里面:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=gb2312");//这是重要的
3:上面的如果在不行就用如下的方法在数据入库前进行调用:
public static String UnicodeToChinese(String s){
try{
if(s==null ¦ ¦s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("ISO8859_1"),"gb2312");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
public static String ChineseToUnicode(String s){
try{
if(s==null ¦ ¦s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("gb2312"),"ISO8859_1");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
在jsp里加<%@ page contentType="text/html; charset=gb2312" %>的确管一些用,但是传递参数还不能解决?
import javax.servlet.*;
import javax.servlet.jsp.*;
import javax.servlet.http.*;
import java.util.Enumeration;
import java.io.*;
import java.util.*;public class StrUtil {
private static final String code0="ISO8859_1";
private static final String code1="GBK";
private static final String code2="BIG5";
private String str;
private String getBytesCode="GBK";
private String retChgCode="ISO8859_1"; private String setting=""; public StrUtil(){
} public StrUtil(String str){
Setting(str);
} public void Setting(String setting){
this.setting=setting;
} //-------------------------------------------------
// valueStr用于:
//-------------------------------------------------
// 1. com.caucho.mysql.Driver.
// 2. 没有使用以下语句:
// <%@ page contentType="text/html;charset=2312" %>
// 或 <% response.setContentType("text/html;charset=2312"); %>
// 3. 在程序中给字符串变量赋值时,
// 如:
// StrUtil strCorrect;
// String aa=strCorrect.valueStr("中文");
//-------------------------------------------------
public String valueStr(){
// byte[] tmpbyte;
// str.getBytes("ISO8859-1");
// str=new String(tmpbyte); //----------------------------------------------
// 在一些平台, 或一些设置下, 是不需要字符转换的, 这时直接返回原值
//----------------------------------------------
if (setting.equals("")||setting.equals("NORMAL")||setting.equals("doNothing")) return str;
if (str==null)str="";
if (setting.equals("gb_iso8859")){
getBytesCode=code1;
retChgCode=code0;
}
if (setting.equals("iso8859_gb")){
getBytesCode=code0;
retChgCode=code1;
} try{ byte[] getCode=str.getBytes(getBytesCode);
String putCode=new String(getCode,retChgCode);
// return str;
// System.out.println("test----- "+putCode);
return putCode;
}catch(java.io.UnsupportedEncodingException e){
System.err.println("Error Encoding");
}
return null;
} public String valueStr(String str){
this.str=str;
return valueStr();
}
public String show(String str){
return valueStr(str);
}}
加了就报错啊,看看我的回复
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"><web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
</web-app>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
就是有一点要特别注意的当你的web.xml里面还有其它的定义比如listener,servlet的
记得把filter,filter-mapping放在文件里的前头 不然会出错的
也就是要对照底下的出现顺序!
(icon?,display-name?,description?,distributable?,context-param*,filter
*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mappi
ng*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,secur
ity-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)
虽然启动tomcat的时候,还有错误信息,可是中文好象没有问题了:)
context-paramfilter
filter-mappingresource-ref
request.setCharacterEncoding("GBK");