• ベストアンサー

サーブレットでバイナリの入力データを扱いたい

サーブレット/Java初心者です。 サーブレットで、 request.setCharacterEncoding("UTF-8"); String hoge1 =request.getParameter("hoge1"); String hoge2 =request.getParameter("hoge2"); のように、リクエストパラメータを取得しています。 hoge2だけ、UTF-8ではなく、バイナリデータとして解釈し、byte[]の変数に格納したい場合は、どうすればよいのでしょうか? APIのドキュメントを見ても、使えそうなメソッドがなくて困っています。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1
fdsjaklfjas
質問者

お礼

まずは、マルチポストをしてしまいすみませんでした。 @ITの方に書いたのですが、 request.setCharacterEncoding("ISO-8859-1"); String hoge1 = new String(request.getParameter("hoge1").getBytes("ISO-8859-1"), "UTF-8"); byte[] hoge2 = request.getParameter("hoge2").getBytes("ISO-8859-1"); で一応出来ました。 #結果的には、バイナリではなくHEXダンプしたパラメータをGETで送ることになったので、バイナリを扱うこと自体が不要になったのですが。 #お騒がせしてすみません。

fdsjaklfjas
質問者

補足

うっ。すみません。急いでるもので、@ITの方にも質問させて貰いました。こっち(教えてgoo・OKWAVE)での回答もお待ちしています。

関連するQ&A

  • インターフェースについて

    いまサーブレットをやっています。 Java言語仕様では、 「インターフェースの定義には、メソッドの定義を書いてはいけない」 (メソッドの定義はそのインターフェースをimplementsしたクラスのなかで オーバーライドする) ということになってますよね? …でも、 APIリファレンスを読むと、 インターフェースHttpServletRequestのメソッドgetParameterには、 「リクエストパラメータの値をString型として返す」と書かれています。 ↑これって上記のJava言語仕様と矛盾してませんか? まるでどこかでgetParameterメソッドの定義がなされているかのようです。 これってどういうことでしょう? 考えれば考えるほど、訳わかりません。とっても混乱中です(-_-)

    • ベストアンサー
    • Java
  • JSPとサーブレットの連携

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("windows-31j"); response.setContentType("text/html;charset=windows-31j"); PrintWriter out=response.getWriter(); request.setCharacterEncoding("windows-31j"); String st = request.getParameter("ti"); String s2 = request.getParameter("ho"); String s3 = request.getParameter("ke"); Connection con = null; ResultSet rs = null; Statement stmt = null; try { String url = "jdbc:mysql:///o?user=&password=2&useUnicode=true&characterEncoding=windows-31J"; con = (Connection) DriverManager.getConnection(url); stmt = (Statement) con.createStatement(); String sql = "INSERT INTO o_tb(tiiki,houmon,keiyaku) VALUES('" + request.getParameter("ti")+ "','" + request.getParameter("ho")+ "','" + request.getParameter("ke")+ "') "; int rss=0; rss = stmt.executeUpdate(sql); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } JSPから上記のサーブレットに値を渡し、DB格納までは上手くいきました。 ですが当然上記だと真っ白なサーブレットページが表示されるだけです。 JSPのボタンを押し→サーブレットでDB格納したら、またJSPページを表示させたいんですが、どうしたらいいですか??

    • ベストアンサー
    • Java
  • サーブレットのコンパイルエラー

    会社の開発環境でコンパイルできたサーブレットを 自宅でコンパイルしようとすると、下のエラーが出てしまい困っています。だれか知恵を貸してください。 ちなみに自宅の開発環境は j2sdk1.4.0とtomcat3.2.3 です。 よろしくお願いします。 ----------------------------------- ReserveControlServlet.java:26: シンボルを解釈処理できません。 シンボル: メソッド setCharacterEncoding (java.lang.String) 位置 : javax.servlet.http.HttpServletRequest の インタフェース request.setCharacterEncoding("JISAutoDetect"); ^ ReserveControlServlet.java:33: シンボルを解釈処理できません。 シンボル: メソッド getRequestDispacher (java.lang.String) 位置 : javax.servlet.ServletContext の インタフェース sc.getRequestDispacher("/index.jsp").forward(request, response); ------------------------------------

    • ベストアンサー
    • Java
  • ブラウザーでの入力値をサーブレットで取得する方法

    サーブレットの開発を行っていますが、ブラウザー側で 入力したパラメーターをサーブレットで受け取りたいのですがうまくいきません。 受け取りたいのは、以下のHTMLで作成したテキストボックスへの入力値です <form name="form7" method="post" action=""> <p> <input type="text" name="textfield2" size="4" maxlength="4"> 年 <input type="text" name="textfield" size="2" maxlength="2"> 月</p> </form> ブラウザー側からは <form action="http://localhost/servlet/yuushi" method=post> の指定を行っています。 サーブレットでの受け取り方は、 String p=request.getParameter("textfield2"); String p1=request.getParameter("textfield"); としましたが、p、p1とも何の値も入りませんでした。 getParameterで取得できると思ったのですが取得できませんでした。 値の取得方法の御教示をお願いいたします。

    • ベストアンサー
    • Java
  • javaバイナリ変換したデータのファイル出力

    現在、 String test_st = "0123456789abcdef"; というデータを byte[] bytes = test_st.getBytes("UTF-8"); このコードでバイナリ変換したのですが、このbytesに格納したバイナリデータたバイナリファイルとして出力したいのですが、どのようにしたらよいかご教授よろしくお願い致します。 BinaryFileWriter writer = new BinaryFileWriter(); このようなコードで出力できるとのサンプルもあったのですが、うまくいきません。 どうぞ、よろしくお願い致します。

    • ベストアンサー
    • Java
  • サーブレットでの画像処理時のパスの指定

    クライアントからファイル名をサーブレットに渡し、 そのファイルをImageIOでクライアントに返して表示させるプログラムを組んでいます。 そこで、クライアントからパラメータで受け取った文字列(画像ファイル名)を変数に入れ、 サーブレット側で指定してある文字列(ファイル格納ディレクトリへのパス)の最後にその変数を連結させたものから Fileオブジェクトを作り、ImageIOのreadメソッドの引数として指定したところ IIOExceptionの例外が発生します。(Can't read input file!) サーブレット側でファイルへのパスを直接指定したものでFileオブジェクトを作って実行するとうまくいきます。 原因は何なのでしょうか? String filename = request.getParameter(クライアントから受け取ったファイル名); ServletContext sc = getServletContext(); String filepath = sc.getRealPath("/img/"+filename); response.setContentType("image/jpg"); File file = new File(filepath); BufferedImage readImage = ImageIO.read(file);   ←ここで例外が発生します ImageIO.write(readImage, "jpg", response.getOutputStream()); 開発環境はEclipce,Tomcatです。

    • ベストアンサー
    • Java
  • サーブレットの【405】POSTについて

    「HTTPのGETメソッドは、このURLではサポートされていません。」のエラーが出ます。 コードは「スッキリわかるサーブレット&JSP」本の10章です。 サーブレットを右クリックで実行すると、上記のエラーが出ます。 ----------------------------------------------------------------- package servlet; 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; import javax.servlet.http.HttpSession; import model.LoginLogic; import model.User; @WebServlet("/Login") public class Login extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // リクエストパラメータの取得 request.setCharacterEncoding("UTF-8"); //PrintWriter out = response.getWriter(); //out.println(createHTML("POST")); //out.close(); String name = request.getParameter("name"); String pass = request.getParameter("pass"); // Userインスタンス(ユーザー情報)の生成 User user = new User(name, pass); // ログイン処理 LoginLogic loginLogic = new LoginLogic(); boolean isLogin = loginLogic.execute(user); // ログイン成功時の処理 if (isLogin) { // ユーザー情報をセッションスコープに保存 HttpSession session = request.getSession(); session.setAttribute("loginUser", user); } // ログイン結果画面にフォワード RequestDispatcher dispatcher =request.getRequestDispatcher("/WEB-INF/jsp/loginResult.jsp"); dispatcher.forward(request, response); } //private char[] createHTML(String string) { // TODO 自動生成されたメソッド・スタブ //return null; //} } ------------------------------------------------------------------------------------ ビュー <%--つぶやきトップ画面 --%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>つぶやき画面</title> </head> <body> <br><br><br><p style="text-align:center"><b>ようこそ!!つぶやきアプリへ!</b></p> <form action="Tsubuyaki/Login" method="post"> <p style="text-align:center">ユーザー名:<input type="text" name = "name"></p> <p style="text-align:center">パスワード:<input type="text" name = "pass"></p> <p style="text-align:center"><input type="submit" value="ログイン"></p> </form> </body> </html> ------------------------------------------------------------------------------------ どこがダメかご回答願います。

  • JSPとサーブレット間での画面遷移でうまく表示できません。

    いつもお世話になっております。。。 eclipse3.4 tomcat6.0 の環境で作業しています。 JSPから受け取ったパラメータをサーブレットで条件分岐して、 条件ごとにdispatch fowardで異なったページに遷移させるページを作りたいのですが、うまくいきません。 送信JSPで、 <form action="受け取りサーブレット名" method="post"> <input type="radio" name="url" value="value1"checked> <input type="radio" name="url" value="value2"> <input type="radio" name="url" value="value3"> <input type="submit" value="jump!"> </form> と書き、受け取りでサーブレットで public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { perform(request, response); }      private void perform(HttpServletRequest request, HttpServletResponse response)         throws ServletException, IOException { response.setContentType("text/plain; charset=Windows-31J"); request.setCharacterEncoding("Windows-31J"); request.getParameter("url"); String i = request.getParameter("url"); if( i.equals("value1")) {           request.getRequestDispatcher("/遷移先1").forward(request,response); }else if(i.equals("value2")) {           request.getRequestDispatcher("/遷移先2").forward(request,response); }else if(i.equals("value3")) {           request.getRequestDispatcher("/遷移先3").forward(request,response); としています。 これでJSPからデバッグを実行すると、変数iにparam"url"でとってきた"value1"が入っているので、getParameterが成功しているのが分かりますが、その後なぜか遷移先に移りません。 おそらくdispaccher fowardがうまくいっていないか、 if文が間違ってるかだと思うのですが、 どなたかご教授くださいm(_ _)m

  • サーブレットforward時の実行メソッドについて

    初歩的な質問で失礼します。 サーブレットAに doGet, doPost, serviceメソッドを実装しています。 サーブレットBのdoPostメソッド内にて サーブレットAにforwardを実行する場合に、 呼出されるのはサーブレットAのどのメソッドですか? JSPへのforwardはできたのですが、 サーブレットへのforwardができず悩んでいます。 サーブレットのAPIを読んでもいまいちわかりません。 何かメソッドに関する制約があるのでしょうか? 上の質問は全くマト外れでしょうか? 追加ですが・・・ サーブレットからforwardされたサーブレットで、 そこからさらにJSPへforwardすることはできますか? Apache2.0.43+tomcat4.1.12+Java1.4.0_01です。

    • ベストアンサー
    • Java
  • String <=> byte配列 の際のエンコード(続)

    前回の質問(4つほど前の)の続きですが、 8859-1が日本語を扱うことができるという勘違いは、 サーブレットで日本語のリクエストパラメータを使用する際の、 次のようなコードに起因してます。 String param = new String(request.getParameter("test")).getBytes("8859_1"), "JISAutoDetect"); ここで、request.getParameter("test") から返ってくる String は 8859-1エンコーディングされたものだと単純に考えていたのですが、 今回、あらためてこれについて考えてみました。 request.getParameter("test").getBytes("8859_1") で、 ブラウザのエンコーディングを用いた、パラメータを表現するバイト列が ちゃんと取得できています。 では、request.getParameter("test") の結果返ってくる String は ブラウザのエンコードでパラメータを表現するバイト列を用い、 値はそのままで、エンコード名だけを8859-1として構築されたもの、 になると思うのですが、 そういう認識で正しいのでしょうか。 また、それで正しいのなら、それと同じことを自分で行うには どうすればよいのでしょうか。 とても気になります。 もしわかる方がいらっしゃったら、是非回答お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう