servletからjspへの遷移時に文字化け
- servletからjspに遷移する際に文字化けが発生します。
- Test.jspに遷移すると、Test.jspの「<body>テスト</body>」がブラウザ表示時に文字化けします。
- 文字コードはjavaファイルそのものはSJIS、jspは<%@ page language="java" contentType="text/html; charset=SJIS" %>となっています。
- ベストアンサー
servletからjspへの遷移時に文字化け
質問します。 用件:servletからjspに遷移する際に文字化けが発生します。 環境: Eclipse3.7 java6 ApacheTomcat7.0 フレームワークはなし 内容: フォワードでTest.jspに遷移します。 RequestDispatcher requestdispatcher = request.getRequestDispatcher("/Test.jsp"); requestdispatcher.forward(request, response); Test.jspに遷移すると、Test.jspの「<body>テスト</body>」がブラウザ表示時に文字化けします。 (英数字は化けません。) servletを使用せず、Test.jspに直接アクセスすると文字化けが起きません。 servletで、Test.jspで適当なhiddenを作成し、servletでgetParameterをSystem.out.printしても 文字化けなどはおきません。 また、RequestDispatcherでは文字化けが起こりますが、 response.sendRedirect("/Test.jsp"); だと文字化けがおきません。 現状、sendRedirectとsessionを使用して値の受け渡しを行っておりますが、 RequestDispatcherを使用したいので困っております。 また文字コードは javaファイルそのものはSJIS jspは<%@ page language="java" contentType="text/html; charset=SJIS" %> となっております。 わかりにくい文章で申し訳ありませんが、ご回答の程よろしくお願いします。
- javat8686
- お礼率37% (6/16)
- Java
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
できればもう少し情報をください。 【1】フォワード時のレスポンスヘッダーはどのようになっていますか? response.getContentType() で取得できると思います。 ここでShift_JIS(SJIS)でなければ response.setContentType("text/html; charset=SJIS") などでセットしてみてください。 【2】「文字化けしている」場合の実際のエンコードは何ですか? ブラウザで見たとき、エンコードを変えて見られるエンコードがありますか? 【3】[2]で見られるエンコードがあった場合、 <meta http-equiv="content-type" content="text/html; charset=(そのエンコード)" /> などを<head>内に入れてみる。 ※ちなみにJavaファイルはたしかすべてUTF-8で処理された気がします。 Javaファイル中に日本語などの2バイト文字がないので、EclipseさんがSJISと判断しているだけかと。
その他の回答 (2)
- askaaska
- ベストアンサー率35% (1455/4149)
SJIS じゃなくて Shift_JIS とか Windows-31J にしてみるとか
お礼
後日、確認してみたところ特に何も変えずに、文字化けが直っていました。 ご回答いただいた方、ありがとうございました。 原因などわかったら記述するつもりでしたが、原因が不明で直ってしまったため、 このままとじさせていただきます。
補足
回答ありがとうございます。 回答内容でいただいた方法はすでに試してみました。 質問に記載しておらずすみません。 ありがとうございました。
- askaaska
- ベストアンサー率35% (1455/4149)
<%@ page pageEncoding="文字コード" %> も記述してみるとか?
お礼
後日、確認してみたところ特に何も変えずに、文字化けが直っていました。 ご回答いただいた方、ありがとうございました。 原因などわかったら記述するつもりでしたが、原因が不明で直ってしまったため、 このままとじさせていただきます。
補足
回答ありがとうございます。 <%@ page pageEncoding="SJIS" %> と <%@ page language="java" contentType="text/html; charset=SJIS" pageEncoding="SJIS"%> で試してみましたが、特に変化はありませんでした。
関連するQ&A
- 【servlet】フォワードを使った画面遷移
java,サーブレット初学者です。表題の通り、フォワード を使って画面遷移を試みています。 以下のコードを記述しリンクをクリックすると確かに画面遷移はできるのですが、 フォワードが出来ているならURLの最後が【/Test1】になるのではないかと考えました。 ですが実際は【/NewFile2】となっているため、フォワードが出来ていないのかと思います。 どの様にしたら前者のような結果になるでしょうか。 ご教授頂きたいです。 サーブレット↓ package sample; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Test1") public class Test1 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher br = request.getRequestDispatcher("html/NewFile2.html"); br.forward(request, response); } } 遷移前の画面↓ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テスト</title> </head> <body> <h2>sample</h2> <p>テストです</p> <a href ="/servlet_dayo/html/NewFile2.html">画面遷移する</a> </body> </html> 遷移先↓ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テスト</title> </head> <body> <p>遷移先</p> </body> </html> サーバー:Tomcat8.5 os:macos を使用しています。どうぞよろしくお願いします。 ※OKWAVEより補足:「Webシステム開発」についての質問です。
- ベストアンサー
- Java
- RequestDispatcher.forwardメソッドで遷移する際のURL
お世話になります。 JSP/サーブレットを使用してwebアプリケーションを作成しています。 タイトルの通りRequestDispatcher.forwardメソッドで遷移する際のURL についてうまくいかず、原因がわからない為質問させて頂きます。 ご教授宜しくお願い致します。 Aproject/jsp/login.jsp Aproject/jsp/top.jsp Aproject/WEB-INF/src/servlet/Login.java という3つのファイルを使用しています。 login.jspにて<form action="../Login" method="post">で Login.javaサーブレットにIDとパスワードを渡し、 サーブレットで認証を行ったあと RequestDispatcher.forwardメソッドにて以下のように 遷移するようになっています。 RequestDispatcher rd = request.getRequestDispatcher("./jsp/top.jsp"); rd.forward(request, response); 遷移はうまくいくのですが、top.jspが表示される時のURLが http://localhost:8080/Aproject/jsp/top.jspとなるはずが、 http://localhost:8080/Aproject/Login となってしまいます。 web.xmlの記述は <servlet> <servlet-name>Login</servlet-name> <servlet-class>servlet.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/Login</url-pattern> </servlet-mapping> としています。 forwardメソッドではなく、sendRedirectメソッドを使用した場合 http://localhost:8080/Aproject/jsp/top.jsp とうまくいきます。 どのような原因が考えられますでしょうか? 宜しくお願い致します。
- ベストアンサー
- Java
- JSPからServletへの遷移
今回、eclipseで開発をすることになりました。 しかしながら、動的Webプロジェクトという使い慣れないプロジェクトでの作成を しなくてはならなくなり、混乱しています。 tomcatとWTPのことについては、先の質問で教えて頂き解決したのですが、 もう一つ困ったことがあったので、再度質問させて頂きます。 --------------------------------------- 環境 Windows7 Ultimate eclipse Indigo tomcat 5.5 --------------------------------------- まずは、JSPを作成し、それを実行し、ブラウザ上に表示することは出来ました。 その後にServletに<form action ="/test" method = "POST">という形で投げるのですが、 それがうまくいかず、404エラーが出てしまいます。 階層としては、JSPはSample(プロジェクト名)/WebContent/NewFile.jspに配置しています。 そして、Servletについては、Sample(プロジェクト名)/src/test/Test.javaに配置しています。 web.xmlについては、Sample(プロジェクト名)/WebContent/WEB-INF/web.xmlにあります。 まず、JSPのソースは以下の様に書かれています。 ----------------------------------------------------- <%@ page contentType="text/html;charset=Windows-31J" language="java"%> <%@ page pageEncoding="Windows-31J"%> <html> <head><title>タイトル</title></head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <%request.setCharacterEncoding("Windows-31J");%> <body> <form method="POST" action="/test"> <%--ここに処理を記述 --%> <input type = "submit" name="submit" value = "送信"> </form> </body> </html> ----------------------------------------------------- Servletについては、以下の様に、型だけ記述しています。 ----------------------------------------------------- package test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Test */ public class Test extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Test() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } ---------------------------------------------------- そして、web.xmlについては、以下の様に記述しています。 ---------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>SampleWeb</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>test</servlet-name> <servlet-class>test.Test</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> </web-app> ----------------------------------------------------- その状態で、JSPの中から <form action ="/test" method = "POST"> <input type ="submit" name = "submit" value="送信"> </form> とやっても、404が出てしまいます。 Java自体が久々で、根本的に間違っているかもしれませんが、 ご教授お願い致します。
- ベストアンサー
- Java
- HTTPステータス 404 - /servlet/Testが表示される
はじめまして。Javaの初心者です。 どうしてもわからないことがあります。それは、 最初にTest.jspを実行して送信ボタンを押すと、 サーブレットからforwardされてきた「あああああ」 が表示されるのですが、再び送信ボタンを押すと、 「HTTPステータス 404 - /servlet/Test」が表示 されます。なぜなのでしょうか?また、どのようにす れば、404エラーを出すことがなく実行できるのが どうか教えてください。お願いします。 ************************************************* <%-- Test.jsp --%> <%@ page contentType="text/html; charset=Shift_JIS" %> <html> <head> <title>Test</title> </head> <body> <form method="POST" action="/servlet/Test"> <input type="submit" name="submit" value="送信"/><br/> </form> <% if(request.getParameter("submit") != null) { %> <hr/> <%= (String)request.getAttribute("b") %> <% } %> </body> </html> ************************************************* import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; public final class Test extends HttpServlet { public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws IOException,ServletException { request.setAttribute("b","あああああ"); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/Test.jsp"); rd.forward(request,response); } } *************************************************
- ベストアンサー
- Java
- ServletからJSPに遷移させた後もServletに制御を戻したいんですが
Java初心者です。宜しくお願いします。 現在、ServletからJSPに対してIncludeまたはForward した後にServlet側にて処理を継続させる方法が ないか調べています。 Forwardは×かなというところ まではわかったのですがIncludeで行った場合 Servlet → JSPに遷移させた後に呼び出し元の Servletに制御を戻す事は可能でしょうか。 また、一般的な方法がありましたらご教授お願いします。 宜しくお願いします。
- ベストアンサー
- Java
- EclipseでのJSP・Servlet開発について(文字化け)
EclipseでJSP、Servletの開発をしております。 文字化けについての質問なのですが、ブラウザ上で表示される文字が 文字化けしてしまいます。JSPの頭に <%@page contentType="text/html; charset=SHIFT_JIS"%> と入れており、ブラウザでもエンコードはShift_JISとなっています。 自分なりに原因を調べたのですが、○○.jsp→○○_jsp.javaに変換?する際に 文字化けしているようで、Eclipse上でJSP、Servletを見ると普通なのですが、 ○○_jsp.javaは見事に文字化けしていました。 文字化けした○○_jsp.javaを削除して再度表示(_jsp.javaの再作成)も試みた のですが、同じ結果でした。 1ヶ月以上触っていないパッケージのソースも突然文字化けを起こしたので 原因も分からない状態です。 原因・直し方がお分かりの方、是非ともご指南下さい。 情報不足でしたら追記させて頂きますので、どうぞ宜しくお願い致します。
- ベストアンサー
- Java
- [JSP]1Servletから複数フレームにパラメータ渡し
HTMLの<frame>タグでaaa.jspとbbb.jspを同時に表示させています。 aaa.jspからのフォームの値をHOGEというServletで受取り、 処理したものをaaa.jsp・bbb.jsp共に反映(更新)させるにはどうすれば良いでしょうか? 現状、forwardを2回書いているのですが、下記の様に怒られてしまいます。 (エラー/java.lang.IllegalStateException: レスポンスをコミットした後でフォワードできません ) ============aaa.jspのフォーム=================================== <form name="a1" method="post" action="/HOGE"> <input type="submit" name="GO" value="go"> </form> ================================================================ ============HOGE (サーブレット)================================ public class HOGE extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response){ //jspに渡すパラメータをセット request.setAttribute("pram1", "judy"); request.setAttribute("pram2", "mary"); //forward準備 ServletContext sc = getServletContext(); RequestDispatcher aaa = sc.getRequestDispatcher("/jsp/aaa.jsp"); ServletContext sa = getServletContext(); RequestDispatcher bbb = sa.getRequestDispatcher("/jsp/bbb.jsp"); try { aaa.forward(request, response); bbb.forward(request, response); //ここでエラー } catch (ServletException e) { } catch (IOException e) { } } } ============================================================== どなたかご存知の方いらっしゃいましたら御教授宜しくお願いします。
- 締切済み
- Java
- ServletからJSP
はじめまして。 お世話になります。 以下のようにサーブレットから条件によってJSPファイルを 使い分けようと思っているのですが、うまく出来ません。 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>タイトル</title>"); out.println("</head>"); out.println("<body>"); RequestDispatcher rd = null; if(/* 条件1 */) { rd = request.getRequestDispatcher("hoge1.jsp"); } else if(/* 条件2 */) { rd = request.getRequestDispatcher("hoge2.jsp"); } else { rd = request.getRequestDispatcher("hoge3.jsp"); } out.println("</body>"); out.println("</html>"); if(rd != null) { rd.include(request,response); } } このようにすると <html> ・ ・ サーブレットから出力した部分 ・ </html> <****> JSPで出力した部分 </****> とサーブレットの部分だけ先に出力されてしまいます。 JSPファイルの前後に出力させるにはどのようにすればよいのでしょうか。 よろしくお願い致します。
- ベストアンサー
- Java
- RequestDispatcher でURL引数の扱い
はじめまして。SINといいます。 今、ServletとJSPを使っているんですが、JSPからServletにはURL引数を渡す ことはできているんですが、ServletからJSPにはURL引数を渡すことはできるのでしょうか? 色々と調べていたんですが、わからず困っています。 SrvletからJSPへはRequestDispatcher の forward メソッドを使っています。 どなたか知恵をお貸しください。 下記にソースを抜粋したものを書きました。 String nextUrl = "/xxxx/xxxxx.jsp?aaa"; ServletContext context = request.getSession().getServletContext(); RequestDispatcher requestDispatcher = context.getRequestDispatcher(nextUrl); requestDispatcher.forward(request, response);
- 締切済み
- Java
- 文字化け対策について
JSPに文字コードを指定しているにも関わらず、 「Java側でUTF-8の文字コードを指定してあげなければ、画面遷移した画面遷移先で文字化けが起こってしまう。」という状況なのですが、これの解決方法は無いものでしょうか? 【文字エンコード状況】 ●JSP JSP側では、画面遷移元、画面遷移先の両方とも 文字コード「UTF-8で指定」しています。 <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> ●Java Java側では、 response.setContentType("text/html; charset=UTF-8");//コンテンツタイプ request.setCharacterEncoding("UTF-8"); //コード変換 という2点をコード変換として記述しています。 【値受け渡し状況(画面表示状況)】 ●1 画面遷移元 画面1(JSP) <input type="text" value="あいうえお" name="name1"> ●2 java(servlet) → 画面1のname1の“あいうえお”を受取る String strName = new String(request.getParamete("name1")); request.setAttribute("name", strName); ●3 画面遷移先 画面2(JSP) → “あいうえお”を表示 <%= (String)request.getAttribute("name1") %> 画面状況:文字化けしている。[ォ・・サウ」(といった感じです) ●現状の解決方法 ここで、文字化けの解決方法として、 画面1のリクエストをゲットする際に、 java(servlet)での、文字の受け取り方の記述を変更しました。 String strName = new String(request.getParamete("name1")); から String struserName = new String(request.getParamete("name").getBytes("ISO-8859-1"),"UTF-8"); という風に「 .getBytes("ISO-8859-1"),"UTF-8") 」 を付与してやることで、回避でききました。が、これで解決策としては妥当でしょうか?(正しいでしょうか?) 気にかかっているところが、どうもこのやり方が強引に文字を変換しているようにしか思えませんでして(実際のところは正しいのかもしれませんが・・・)このまま値を渡してやっていいのか判別が付かずに困っています。 この方法でも大丈夫でしょうか? 特別、何か問題というのはありませんでしょうか?
- ベストアンサー
- Java
お礼
後日、確認してみたところ特に何も変えずに、文字化けが直っていました。 ご回答いただいた方、ありがとうございました。 原因などわかったら記述するつもりでしたが、原因が不明で直ってしまったため、 このままとじさせていただきます。
補足
回答ありがとうございます。 早速試してみたいと思います。 現在、その環境が手元にありませんので、 後日試します! ありがとうございました。 試してみましたら、後ほどご報告させていただきたいと思います。