- PR -

strutsのJSP遷移画面で文字化けしています

投稿者投稿内容
T2
常連さん
会議室デビュー日: 2002/02/20
投稿数: 37
投稿日時: 2006-12-25 15:51
それは、Eclipse等の開発環境上の構成でしょうか?
実際にはコンパイル済みのクラスファイル(*.classファイル)を
WEB-INF/classes以下に配置する必要があります。

また、示された図からは、SetCharacterEncodingFilterクラスは
teraパッケージに属しているように見えます。
もしそうなら、web.xmlの<filter>要素は下記のようになります。
ソースコードにpackage宣言はありませんか?
 <filter>
 <filter-name>SetCharacterEncodingFilter</filter-name>
 <filter-class>tera.SetCharacterEncodingFilter</filter-class>
 <init-param>
 <param-name>encoding</param-name>
 <param-value>Shift_JIS</param-value>
 </init-param>
 </filter>
社内竜王
常連さん
会議室デビュー日: 2006/12/12
投稿数: 20
投稿日時: 2006-12-25 15:54
皆さん、すみません。
http://www.javaroad.jp/opensource/js_struts10.htm
ここのサイトを見本にやっていたのですが、
TomcatにSetCharacterEncodingFilterのクラスがあるので、
strutsのプロジェクトにはSetCharacterEncodingFilterのクラスは配置しなくていいのですね。読み違えてすみません。
web.xmlにのみ記述追加すればよいようです。
現在、以下の記述にしています。
【web.xml】
<?xml version="1.0" encoding="UTF-8"?>
<!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>EncodeFilter</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>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
....

</web-app>
しかし、依然としてメニュー画面からどのJSPにも遷移しません。
<url-pattern>の記述の仕方が違うと考えられるのですが、
試しに、
<url-pattern>/tera/RegistInput.do</url-pattern>
と直接URLを指定しても、RegistInput.jspに遷移しなくなってしまいました。

[ メッセージ編集済み 編集者: 社内竜王 編集日時 2006-12-25 15:55 ]
T2
常連さん
会議室デビュー日: 2002/02/20
投稿数: 37
投稿日時: 2006-12-25 16:03
>TomcatにSetCharacterEncodingFilterのクラスがあるので、
>strutsのプロジェクトにはSetCharacterEncodingFilterのクラスは配置しなくていいのですね。読み違えてすみません。

違います。そのクラスはTomcatのサンプルアプリケーションに含まれていますが、
使う場合には自分でアプリケーションに追加してあげる必要があります。

web.xmlにフィルタの登録があるのにも関わらず
アプリケーション中に該当するクラスが存在しないために
アプリケーションの初期化に失敗していると思われます。

url-patternの指定は/*で合っていると思いますよ。

[ メッセージ編集済み 編集者: T2 編集日時 2006-12-25 16:04 ]

[ メッセージ編集済み 編集者: T2 編集日時 2006-12-25 16:05 ]
社内竜王
常連さん
会議室デビュー日: 2006/12/12
投稿数: 20
投稿日時: 2006-12-25 16:32
T2さん色々有難うございます。
teraパッケージにSetCharacterEncodingFilter.javaを格納して、
web.xmlを以下の記述にした所、JSPは表示するようになりました。

tera(プロジェクト)
|-----tera/WEB-INF/src
.........|-------tera
......................|------SetCharacterEncodingFilter.java

【web.xml】
<?xml version="1.0" encoding="UTF-8"?>
<!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>EncodeFilter</filter-name>
<filter-class>tera.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
....

</web-app>

しかし、依然として文字化けは直りませんでした。
Eclipseのエンコードは、
「編集」の「エンコード」の「その他」で
「Shift_JIS」を指定しています。
struts1.1ですが、まさかFuilter機能は使えないのでしょうか?


[ メッセージ編集済み 編集者: 社内竜王 編集日時 2006-12-25 16:35 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-12-25 16:39
ファイル自体のエンコードは?
社内竜王
常連さん
会議室デビュー日: 2006/12/12
投稿数: 20
投稿日時: 2006-12-25 16:44
mioさんの書き込み (2006-12-25 16:39) より:
ファイル自体のエンコードは?

Shift_JISです。

【入力確認画面用JSP】

<%@ page language="java" contentType="text/html; charset=Shift_JIS"
pageEncoding="Shift_JIS"%>
<%@ taglib uri="/tags/struts-html"prefix="html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>登録確認画面</title>
</head>
<body bgcolor="C2C222">
<html:form action="/Regist">
<% request.setCharacterEncoding("Shift_JIS"); %>
ユーザーID:<%= request.getParameter("id") %><br>
パスワード:<%= request.getParameter("pw") %><br>
名前:<%= request.getParameter("name") %><br>
<br>
これでよろしいですか?
<br>
<br>
<input type="hidden" name="id" value="<%= request.getParameter("id") %>">
<input type="hidden" name="pw" value="<%= request.getParameter("pw") %>">
<input type="hidden" name="name" value="<%= request.getParameter("name") %>">
<input type = "submit" name = "submit" value = "完了" ><br>
<br>
<html:link href="registInput.jsp">戻る</html:link>
</html:form>
</body>
</html>


社内竜王
常連さん
会議室デビュー日: 2006/12/12
投稿数: 20
投稿日時: 2006-12-25 19:15
皆さん、色々有難うございました。
文字化け対策は成功致しまして、文字化けはなくなりました。
皆様にご協力戴いた結果を報告いたしたいと思います。

@【環境】
  Windows2000(SP4)
  Tomcat4.1.27
  j2sdk1.4.2
  Eclipse2.1.1
  struts1.1
A 【web.xml】
  <?xml version="1.0" encoding="UTF-8"?>
  <!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>EncodeFilter</filter-name>
  <filter-class>tera.SetCharacterEncodingFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>Shift_JIS</param-value>
  </init-param>
  </filter>
 
  <filter-mapping>
  <filter-name>EncodeFilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
  ....
  
  </web-app>
B実配置図
 tera(プロジェクト)
  |-----tera/WEB-INF/src
  .........|-------tera
  .....................|------SetCharacterEncodingFilter.java
CJSPのエンコード指定部をSHIFT-JISからShift_JISに変更。
DEclipseのエンコードは、
「編集」の「エンコード」の「その他」で
「MS932」を指定。
Efilter機能を設定したら、
 アクションForm.javaのencode機能は削除する。

以上で文字化けは解消されました。
皆様ご協力有難うございました。

[ メッセージ編集済み 編集者: 社内竜王 編集日時 2006-12-25 19:17 ]

[ メッセージ編集済み 編集者: 社内竜王 編集日時 2006-12-25 19:18 ]
社内竜王
常連さん
会議室デビュー日: 2006/12/12
投稿数: 20
投稿日時: 2006-12-26 17:45
ちなみに、アクションFormは以下になります。

package tera;

import org.apache.struts.action.ActionForm;

public class RegistForm extends ActionForm {

private String pw;

private String id;

private String name;

public void setName(String name) {
this.name = encode(name);     .........encode を取る事
}

public void setPw(String pw) {
this.pw = pw;
}

public void setId(String id) {
this.id = id;
}

public String getPw() {
return this.pw;
}

public String getName() {
return this.name;
}

public String getId() {
return this.id;
}

private String encode(String value) { ........... encode メソッドは削除する事
try {
value = new String(value.getBytes("ISO-8859-1"), "Shift_JIS");
}
catch(Exception e) {
e.printStackTrace();
}
return value;
}

}

参考にして下さい。


[ メッセージ編集済み 編集者: 社内竜王 編集日時 2006-12-26 17:46 ]

[ メッセージ編集済み 編集者: 社内竜王 編集日時 2006-12-26 17:47 ]

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