- PR -

Webアプリケーションを日本語コードに対応させる方法

1
投稿者投稿内容
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2003-12-18 18:08
JBOSS3.2.2(Tomcatバンドル版)+Struts1.1でWebアプリケーションを作成しています。
付属するStruts開発の雛形となるstruts-blank.warをJBOSSのdeploy/dms.warディレク
トリ(dms.warは勝手につけた名前)に展開し、そこに肉付けしながら実装しています。
で、日本語コードに対応させる為に、Tomcatに付属するサンプル
SetCharacterEncodingFilterを使用して設定しようとしましたがJBOSS起動時のパース
の時点でエラーが発生します。しかし、色々なサイトを参照してみても、どこもfilter
の設定に関しては同じようで、原因がわかりません。対処方法をご存知の方いましたら、
教えていただけませんか。


[問題が発生するweb.xmlの設定]

--------web.xmlの中身--------
<?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/j2ee/dtds/web-app_2_3.dtd">

<web-app>

・・・・・略・・・・・

<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
--------web.xmlの中身終わり--------

<filter>と<filter-mapping>の部分をweb.xmlに追加しました。
SetCharacterEncodingFilter.class

/WEB-INF/classes/filters
においてあります。

--------JBOSS起動時のエラー--------
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Er
rorHandlerWrapper.java:232)
at org.apache.xerces.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.
java:173)
at org.apache.xerces.impl.XMLErrorReporter.reportError(XMLErrorReporter.
java:362)
at org.apache.xerces.impl.XMLErrorReporter.reportError(XMLErrorReporter.
java:296)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDVal
idator.java:2959)
at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator
.java:918)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.handleEndElemen
t(XMLDocumentFragmentScannerImpl.java:1145)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(
XMLDocumentFragmentScannerImpl.java:988)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent
Dispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1446)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XM
LDocumentFragmentScannerImpl.java:333)
at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardP
arserConfiguration.java:529)
at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardP
arserConfiguration.java:585)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.j
ava:1148)
at org.apache.commons.digester.Digester.parse(Digester.java:1548)
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
568)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:821)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:80
7)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:579)
at org.jboss.web.tomcat.tc4.EmbeddedTomcatService.createWebContext(Embed
dedTomcatService.java:530)
at org.jboss.web.tomcat.tc4.EmbeddedTomcatService.performDeploy(Embedded
TomcatService.java:309)
at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:42

at org.jboss.deployment.MainDeployer.start(MainDeployer.java:832)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:642)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:605)
at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBea
nDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:177)
at $Proxy6.deploy(Unknown Source)
at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymen
tScanner.java:302)
at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentS
canner.java:476)
at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.
doScan(AbstractDeploymentScanner.java:201)
at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(A
bstractDeploymentScanner.java:274)
at org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport.java:1
92)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBea
nDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceControl
ler.java:976)
at $Proxy0.start(Unknown Source)
at org.jboss.system.ServiceController.start(ServiceController.java:394)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBea
nDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:177)
at $Proxy4.start(Unknown Source)
at org.jboss.deployment.SARDeployer.start(SARDeployer.java:226)
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:832)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:642)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:605)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:589)
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.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBea
nDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:177)
at $Proxy5.deploy(Unknown Source)
at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:384)
at org.jboss.system.server.ServerImpl.start(ServerImpl.java:291)
at org.jboss.Main.boot(Main.java:150)
at org.jboss.Main$1.run(Main.java:395)
at java.lang.Thread.run(Thread.java:534)
--------エラー終わり--------

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-12-18 18:24
filterとfilter-mappingの記述位置はこのとおりですか? だとすると、おそらく記述位置が
まずいと思います。
web-app要素の内容は、

<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
context-param*, filter*, filter-mapping*, listener*, servlet*,
servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*,
login-config?, security-role*, env-entry*, ejb-ref*, ejb-local-ref*)>

と定義されていますので、この順番を守る必要があります。
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2003-12-18 19:13
ukさん、ありがとうございました。
web.xmlには記述位置のルールがあったのですね。勉強不足でした。非常に助かり
ました。ありがとうございました。

で、web.xmlにSetCharacterEncodingFilterのfilter設定も問題なさそうなので
すが、日本語化されません。日本語部分が?????になってしまいます。OSは
RedHatLinux9なので、「Shift_JIS」を設定していましたが、試しにJSPの先頭を、

<%@ page contentType="text/html; charset=EUC-JP" %>
にし、web.xmlに
<param-value>EUC-JP</param-value>

を設定しても駄目でした。

参考にした以下サイト、
http://www.zdnet.co.jp/enterprise/0311/28/epn02_4.html#7
にしたがって
・SetCharacterEncodingFilterのファイルを置いた(Ant実行後にclasses/filter以下に
SetCharacterEncodingFilter.classがちゃんと作成されます)
・web.xmlを編集する
をしましたが、他に何か設定しなければならない事があるのでしょうか?
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2003-12-18 19:15
すいません。修正です。


・SetCharacterEncodingFilterのファイルを置いた(Ant実行後にclasses/filter以下に

・SetCharacterEncodingFilterのファイルを置いた(Ant実行後にclasses/filters以下に

です。filtersでした。
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-01-07 15:25
自己レスです。
PostgreSQLに格納した日本語文字列を取得して表示する際に文字化けしていたので
すが(この部分を質問にちゃんと記入していませんでした。)、データベースを
EUC_JPで作成し直したところ、文字化けせずに表示されました。filter機能は正常
に動作していたようで、データベースの方の設定に問題があったようです。
ukさん、ご教授ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)