• 締切済み

Javaの文字化け

Strutsの参考書に添付されていたサンプルソース (ログオン画面にユーザIDとパスワードを入力 → 結果画面にユーザID表示) なのですが、ユーザIDに全角文字を入力すると、結果画面に "????????” と表示されてしまいます。 この事象が起きる原因が知りたいのですが、教えていただけないでしょうか。 全角文字を入力しても、そのまま結果に表示できるようにするにはどうすれば良いかも教えていただけると助かります。 ソースの構成としては (1)ログオン画面(JSP) (2)結果画面(JSP) (3)ActionFormクラス(JAVA) (4)Actionクラス(JAVA) (5)Struts設定ファイル(Xml) ちなみに、参考書のタイトルは 秀和システム社の「Struts1.2」です。 (サンプルソース4) Strutsの勉強を始めたばかりで、基本的な質問で申し訳ないとは思うのですが、よろしくお願いします。

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

回答No.3

#2の方ご指摘のとおり、フォームへの日本語入力が想定される場合、エンコーディングの設定は必須のようです。 1.web.xmlへfilter設定を登録する 2.RequestProcessorのサブクラスを作成して、Sturts設定ファイルにそのクラスを指定する 3.ActionFormクラスでエンコーディングを設定する など、対処方法は何通りかあります。 効率や保守性を考えるなら、1か2なのかなと思います。ですが私も初心者なので、あまりはっきりしたことはいえません。すみません‥。 ところで参考にされている本「Struts1.2」とは、もしかして「カンタンStruts1.2 改訂版」というものですか?

noname#49664
noname#49664
回答No.2

#1さんのいうように文字化けの原因は多種多様ですから、とりあえずStruts利用の一般論ということで。 Strutsでは、開発者側で文字コード設定のための処理を組み込まない限り、基本的に送信されたフォームの内容は文字化けするはずです。このため、日本語をフォームから送信する場合は、web.xmlに<filter>タグを使ってフィルター設定するか、アクションフォーム側でキャラクタエンコーディングを設定する処理を行って対処するのが一般的だろうと思います。  Strutsは初めたばかりとのことですが、JSP/サーブレットは理解されているわけですから、これらの対応についてはわかりますよね?  そのサンプルには、このいずれかの対処はされていますか? されていなければ、そのサンプル自体が日本語の送信を想定していないで書かれたものだろうと思います。  お使いの本は読んだことがないのですが、先の方に行くと日本語利用のための説明などが書いてあったりするのではありませんか?

  • jun-1
  • ベストアンサー率29% (18/61)
回答No.1

文字化けは原因が色々あるからね。 とりあえず実行環境はなんでしょう? (jdk1.4 & Tomcat4.1.24など)

関連するQ&A

  • JSPの文字化けについて

    はじめまして。 初心者ですがよろしくお願いします。 現在、Strutsの勉強をしています。 ログイン画面を作成しているのですが、 以下の「logon.jsp」を表示したところ 文字化けが発生しました。 自分の思いつく限りの事は試したのですが、 一向に文字化けを解消できません。 どこが悪いのかお分かりになる方が いらっしゃいましたらご教示願います。 ○主な環境 OS:WindowsXP Java SDK :1.5.0_01 Eclips :3.0.1 Struts :1.2.4 Apache Tomcat:5.5.4 mysql :5.0.4-beta ○logon.jsp <%@ page contentType="text/html;charset=Windows-31J"%> <%@ page pageEncoding="Windows-31J" %> <%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %> <!-- %@taglib uri="struts-html" prefix="html" % --> <html:html> <head><title>ログオン画面</title></head> <body bgcolor="#ffffff"> <center> <h3>ログオン画面</h3> <html:form action="/logon"> <html:errors /> <table border="0"> <tr><td>ユーザID </td><td><html:text property="userName" size="20" maxlength="30" /> </td></tr> <tr><td>パスワード</td><td><html:password property="password" size="20" maxlength="30" /></td></tr> </table> <br></br><br></br> <html:submit value="ログオン" /> </html:form> </center> </body> </html:html>

    • ベストアンサー
    • Java
  • エラーページ遷移後に入力値を残す

    いつも参考にさせて頂いています。 strutsでアプリを作っています。 入力チェックをして不備があるとstrutsの<html:erros />タグにてエラーメッセージを表示しているのですが、その際に入力した値を残す処理ができなくて困っています。 私が思っていたのはrequestスコープにActionFormの値を設定すればいいのかな?と思っていたのですがうまくいきません。 (画面遷移、エラーメッセージ表示はできていますが、入力された値は消えてしまいます) 以下にソースの載せますのでご教授宜しくお願いします。 ■postでリクエストを投げるjsp <form action…> <input type="text" name="requestDto.nameKanji"> </form> ■値を取得したサーブレット //パラメータをアクションフォームから取得 TestActionForm actionForm = (TestActionForm)form; ActionMessages messages = new ActionMessages(); // 入力チェック inputCheck(actionForm, messages); // エラー処理 if(messages.size() != 0) { saveErrors(request, messages); ActionForm form = new ActionForm(); form.setRequestDto(actionForm.getRequestDto) // ここでアクションフォームをリクエストスコープに設定 request.setAttribute("ActionForm ", form); return ( mapping.findForward("error") ); } リクエストスコープに入れる名前、もしくは値が間違っているのでしょうか? どうか宜しくお願いします。 開発環境 jdk1.4_12 tomcat5.0 struts1.2

  • Java Struts MVCモデル 正しい書き方

    Java Struts1.3.10 皆でとあるシステムを作ることになったのですが、 JSP・ActionForm・Actionそれぞれの関係の在り方について悩んでいます。 ログイン機能を例とします。 1機能、1Form、1Actionとした場合は: 1.Login.jspでIDとPASSを入力。 2.LoginResultForm.javaにIDとPASSを格納。 3.LoginResultAction.javaでDBチェック(IDとPASSの存在・権限) 4.Result.jspへ遷移。ID・PASS・権限を表示する 使用するファイルは4つとなります。 1JSP、1Form1、Actionとした場合は: 1.Login.jspでIDとPASSを入力。 2.LoginForm.javaにIDとPASSを格納。 3.LoginAction.javaでDBチェック(IDとPASSの存在) 4.ResultForm.javaにIDとPASSを渡す(Sessionなど) 5.ResultAction.javaでDBから権限を取得、ResultFormに格納 6.Result.jspへ遷移。ID・PASS・権限を表示する 使用するファイルは6つとなります。 現在意見が三つありまして、 1.違うForm同士にデータのやり取りが発生するようであれば(1機能とし)、同じフォームにするべきではないのか? 2.Fromのメンバの数が少ないうちは良いが、今後数が増えると可読性が悪くなるから分けるべきではないのか? 3.フォームは同じでないとまずいが、ActionはJSPごとに分けるべき というものです。 1.ではログイン者情報をセッションに保持することは許可しています。(一部例外を認めている) これらはいずれもStrutsフレームワークの範疇から逸脱している、あるいはMVCモデルに反している、そもそも非効率的ということはないのでしょうか? つまりあくまで実装の仕方の問題でしかない、という結論でよろしいでしょうか?

    • ベストアンサー
    • Java
  • "+"文字が" (スペース)"に文字化け?します

    お世話になります。 2フレームの画面(画面A,画面B)にて 次の操作を行った場合、 「+」が入ったパラメタがうまく送信されません (1)画面Aに検索条件を入力 (2)画面Aの「検索ボタン」を押下 (3)該当する情報を画面Bに表示 普通は、 「検索ボタン」→サーブレット→画面Bのjsp という順番ですが 今回作っているものは 「検索ボタン」→画面Bのjspを呼び出す→画面Bのjsp内で、条件取得クラスを呼ぶ という作りです。 条件取得クラスを呼ぶ前に、入力された条件を 取得したいのですが、 入力条件に「+」が入っていると、「 (スペース)」に 変換されます。。。 例:入力条件「123+45」→「123 45」 原因・対処がおわかりの方、よろしくお願い致します --------------------------------------------- 【画面A→画面Bの呼び出し】 parent.画面B.location.href = '画面B.jsp?KEY=' + 入力値 (alert()でurlを見てみると→「画面B.jsp?KEY=123+45」) 【画面Bでの入力値取得】 String key = request.getParameter("KEY"); (System.out.printlnで見てみると「123 45」になる) ---------------------------- 【開発環境】 WinXP Weblogic8.1 JDK1.4.2 Ecripse2

    • ベストアンサー
    • Java
  • Iterateタグ内で複数のリスト要素を参照したい

    StrutsのLogicタグを使って、表示項目、入力項目ともsessionで保持している内容を表示しています。 JSPのイメージは下記のような感じです。 <logic:iterate id="user" name="sessionList"> <bean:write name="user" property="uid"/> <html:text name="user" property="name" indexed="true"/> <br/> </logic:iterate> しかし、上記の方法だとActionFormのvalidateから戻ってきた場合、テキスト入力に「入力エラーになった内容」でなく「sessionで保持している内容」が表示されます。 なので、Iterateタグ内の表示項目"uid"はsessionのデータを表示し、入力項目"name"はActionForm内のデータを表示したいのですが方法が思いつきません。 (初期はsessionデータを表示しますが) どなたか良い方法をご教授願います。

    • ベストアンサー
    • Java
  • strutsで、JSP→アクションクラス→JSPの遷移ができない。

    Strutsを勉強中の者です。 初心者的な質問で大変恐縮ですが、どこを調べても原因が分からなかったので、最終手段としてこちらに質問させて頂く事にしました。 どなたかご存知の方がいらっしゃいましたらご教授頂けないでしょうか。 ・概要  strutsで、JSP→クラスの実行→JSPの遷移ができない。 ・環境  WindowsXP  Eclipse3.3  Tomcat5.5  GEF3.3  struts-1.3.8  JDK1.5 ・詳細  「Eclipseパーフェクトマニュアル ベストセレクション」  という本をもとに勉強しています。  ここのStrutsの例題で  (1).簡易家計簿 <メニュー画面>(index.jsp)を表示   (2).同画面のリンク(ShoppingInitEntry.do)をクリック   (3).リンク(ShoppingInitEntry.do)に関連づけられているクラス(ShoppingInitEntryAction)の実行   (4).データ入力画面(ShoppingUpdate.jsp)への遷移  という事をやっています。  実際に設定して、動かして見ましたが、  Eclipseでデバッグを貼っていると(3)まで動作しているのが分かるのですが、(4)の画面まで遷移しません。  具体的には、ShoppingInitEntry.doのリンクが  ブラウザのアドレスバーに表示され、画面が真っ白の状態になります。  (データ入力画面は表示されない)  尚、直接(4)の画面(ShoppingUpdate.jsp)を開くと、  データ入力画面がエラーも無く表示されます。 ---- struts-config.xmlの設定が悪いのかと思ったのですが、 問題は無さそうに思います。(必要と思われる部分を抜粋) <struts-config> <global-forwards> <forward name="ShoppingInitEntry" path="/ShoppingInitEntry.do"/> </global-forwards> <action-mappings> <action path="/ShoppingInitEntry" type="MoneyBooks.ShoppingInitEntryAction" input="/index.jsp"> <forward name="success" path="/ShoppingUpdate.jsp"/> </action> </action-mappings> </struts-config> ---- (3)ShoppingInitEntryActionのソースは、下記の通りです。 public class ShoppingInitEntryAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return super.execute(mapping, form, request, response); } } 上記のreturn super.execute( ~の部分では nullを返しているようです。 Eclipseのコンソールにメッセージは表示されません。 A.原因は、struts-config.xmlでしょうか? それともクラスがnullを返している為に画面遷移しないのでしょうか?    そもそもsuper.executeのソースをjadのデコンパイルで追ったのですが、返り値としてNullしか返していない状態です。 B.また、馬鹿な質問ですが、そもそもjavaではnullを返り値で返すとオール×だと思っているのですが、この考え方は正しいでしょうか?  大変お恥ずかしい限りですが、ご存知の方がいらっしゃいましたら教えて頂きたく宜しくお願い致します。

    • ベストアンサー
    • Java
  • Java Struts ~に対するゲッターメソッドがありません

    Java Struts WindowsXp Java Struts共に初心者です。 上記を使用してログイン画面を作成しています。 エラーが発生しているのですが 「Bean LoginFrm のプロパティ id に対するゲッターメソッドがありません」 と言われます。 参考サイトはいくつもあるのですが、そもそもイテレータを使用していないとか私の状況に一致する回答を見つけることができませんでした。 (JAVA、Struts共に慣れていないためか応用がきかないみたいです) loginTop.jsp login.jsp LoginFrm.java LoginAct.java struts-config.xml のいずれかが原因だとは思うのですが、そのどこかが皆目見当もつきません。 loginTop.jsp----------------------------- <html:form action="/login"> <table border="0"> <tr><td> ログインID<html:text name="LoginFrm" property="id" size="6" maxlength="5" /> </td></tr> <tr><td> パスワード<html:password name="LoginFrm" property="pass" size="6" maxlength="5" /> </td></tr> </table> </html:form> login.jsp---------------------- <html:form action="/login"> <table border="0"> <tr><td> A:<bean:write name="LoginFrm" property="id" /> </td></tr> <tr><td> B:<bean:write name="LoginFrm" property="pass" /> </td></tr> </table> </html:form> LoginFrm.java---------------------- private String id; private String pass; public String getID() { return id; } public void setID(String id) { this.id = id; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } LoginAct.java-------------------- throws Exception { request.setCharacterEncoding("Windows-31J"); LoginFrm logFrm = (LoginFrm) form; log.info(" user = "+logFrm.getID()); log.info(" user = "+logFrm.getPass()); return mapping.findForward("login"); } struts-config.xml--------------------------- <form-beans> <form-bean name="LoginFrm" type="loginForm.LoginFrm" /> </form-beans> ~ <action attribute="LoginFrm" input="/pages/loginTop.jsp" name="LoginFrm" path="/login" type="loginAction.LoginAct" scope="request" validate="true"> <forward name="login" path="/pages/login.jsp" /> </action> 以上です。 かなり長くなり申し訳ありません。

    • ベストアンサー
    • Java
  • Struts2のValidation後のパラメータ

    Struts2のValidation機能を利用して入力チェックを行っているのですが、 入力画面表示時にGETパラメータを使用している場合、バリデーションエラーでINPUT画面に戻った際にGETパラメータが消えてしまいます。 Struts2: 2.3.15を使用しています 入力画面(index.jsp)は"simple/index.action?id=aa"のようにURLにGETでIDを指定する形式で表示します。(画面上に「ID:aa」が表示されます) 次にタイトル未入力のまま「確認」ボタンを押すとValidationが実行されてエラーメッセージとともに入力画面に戻ってくるのですが、「ID:」と表示され、Actionクラス(Index.java)のidが未設定の状態になります。 Validationエラー後もidがセットされ「ID:aa」が表示されるようにするにはどうすれば良いのでしょうか? Struts2 を触り始めて間もないですので質問自体が的外れかもしれません・・・ 何かアドバイスをいただけたら幸いです。 よろしくお願いいたします。 サンプルコードを以下に示します。 [struts.xml] <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="simple" extends="struts-default"> <action name="index" method="index" class="simple.action.Index"> <result name="success">/index.jsp</result> </action> <action name="confirm" method="confirm" class="simple.action.Index"> <result name="success">/confirm.jsp</result> <result name="input">/index.jsp</result> </action> </package> </struts> [Index.java] package simple.action; import com.opensymphony.xwork2.ActionSupport; public class Index extends ActionSupport{ private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } public String index(){ return SUCCESS; } public String confirm(){ return SUCCESS; } } [Index-confirm-validation.xml] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- タイトルの必須入力チェック--> <field name="title"> <field-validator type="requiredstring"> <message>タイトルを入力してください</message> </field-validator> </field> </validators> [index.jsp] <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="sj" uri="/struts-jquery-tags"%> <!DOCTYPE html> <html> <body> ID:<s:property value="id" /> <s:form action="confirm"> <s:textfield name="title" label="タイトル" ></s:textfield> <s:submit value="確認"></s:submit> </s:form> </body> </html>

    • ベストアンサー
    • Java
  • jsp/サーブレット

    jsp サーブレットを勉強しています。 jspに入力された値を サーブレットに投げます。 サーブレットからjavaクラスに値を投げて javaクラスで値が正しいかどうかを判断します。 その結果をサーブレットに投げて、 サーブレットからjspに投げて jspで結果を表示する。というのは理解できました。 しかし私が行いたいのは、 クライアントがjspにアクセスしたときに、 javaクラスにある値をjspに表示させたいというものです。 この場合はサーブレットに何も投げるものがないのですが、 jsp→サーブレット→javaクラス→サーブレット→jsp このようにサーブレットを使って表示させるには、 どのようなプログラムを書いたらいいのでしょうか。 わかりにくい説明で大変申し訳ないですが、 具体的なプログラムを教えていただけるとありがたいです。 また、参考になりそうなURLがありましたら教えてください。 よろしくお願いします。

  • Strutsで「setterメソッドが見つかりません」

    Eclipse+TOMCAT環境でStrutsアプリを作っています。 とりあえずの勉強として、参考書に載ってあるサンプルを作っているのですが、会社では動いたそのサンプルを自宅で同じ手順で実行すると、「index.jsp(24,2) 属性 name のsetterメソッドが見つかりません」と表示されます。最初に表示されるはずのindex.jspファイル内に<html:form action="Lookup" name="lookupForm" type="wiley.LookupForm">と記述しており、ここの解析で出たエラーだと思われるのですが、ActionFormであるLookupFormクラスにはEclipseによるSetter/Getterメソッドの自動生成を行って記述しており、なぜエラーになるのかが分からない状態です。原因となりそうな点をお教えください。宜しくお願いします。

専門家に質問してみよう