• 締切済み

servlet 値渡し

servletを含む3つのファイルがあります。 例 struct.java( public String str = "0";) main.java( str = "1";) servlet.java( if( str.equals("1")){ 処理 } ) structで宣言したstrの値をmainで変更し、 その値("1")をservletで受け取りたいのですが どのような方法でやれば受け取れますか? struct.javaでpublicで宣言しているので パラメータ渡しではない方法を探しています。 そもそもservlet経由にするときは、 パラメータではないと無理なんでしょうか? アドバイスお願いします。

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

みんなの回答

  • agricap
  • ベストアンサー率40% (79/195)
回答No.3

今ひとつ質問の意図を理解できていないのですが・・・ servlet から ServletContext(Applicationスコープの変数の場合) や HttpSession(Sessionスコープの変数の場合)オブジェクトを struct や main 内のメソッドに引数で渡して、書き換えや参照を する、というのではダメなのでしょうか? 少なくとも、こういうやり方なら、 >main.javaはHttpServletクラスではないので >変数が取得できないようです。 という状況にはならないと思います。 「パラメータ渡し」とは何をさしているのでしょうか? メソッドの引数ですか?  

mao4rent
質問者

お礼

説明が不足してましてすみません。 「パラメータ渡し」とはメソッドの引数を言っています。 メソッドの引数を使用するのではなく、 structでpublic定義した変数に値を保持し、 それを使用したいと考えています。 また、スコープはrequestスコープ を使用してます。 2度も回答くださりありがとうございました。

  • agricap
  • ベストアンサー率40% (79/195)
回答No.2

Session スコープもしくは、Application スコープの変数にしてはいかがでしょうか? http://ash.jp/java/webapp_scope.htm

mao4rent
質問者

お礼

URL拝見しました。 main.javaはHttpServletクラスではないので 変数が取得できないようです。 sevletだけで、変数宣言も判断も結果も見るなら いけそうですが。 ありがとうございました。

noname#18558
noname#18558
回答No.1

変数をstaticにしてはどうですか。 --struts.java-- public static String str = "0"; --main.java-- struts.str = "1"; --servlet.java-- if(struts.str.equals("1")){ ※注 ただし、これは意図する動作をするとは限りません。

mao4rent
質問者

お礼

eclipseのservlet上で「structを解決できません」と なり、状況は変わりませんでしたが、参考になりました。 ありがとうございました。

関連するQ&A

  • 参照渡し

    javaでintやStringって参照渡しって可能なのでしょうか? プリミティブタイプ以外は参照渡しとあるサイトに書いてあったのですが Stringは何故、値渡しなのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Java
  • 参照・値渡しについて

    下記プログラム(ソース1)を実行すると「1」という値が出力されます。しかし、2行目をprivate static int a;とすると「0」という値が出力されます。 オブジェクトは参照渡しで基本データ型は値渡しと思ったのですが、2行目の値をString型で行ったところ全く変更されていない値が出力されました。(ソース2) 一体どういうことでしょうか? 回答のほどよろしくお願い致します。 (ソース1) public class X{ private static int a[] = new int[1]; public static void main(String []args){ modify(a); System.out.println(a[0]); } public static void modify(int a[]){ a[0]++; } } (ソース2) public class X{ static String a = "a"; public static void main(String []args){ modify(a); System.out.println(a); } public static void modify(String a){ a = "b"; } }

    • ベストアンサー
    • Java
  • 構造体のアドレス渡し

    構造体をmain()からアドレス渡しで別関数(test.cpp)に渡し、その関数の中だけでの別関数test1()にその構造体を、値渡しでもアドレス渡しでも、渡せるのでしょうか? ちなみにmain.cppと、test.cppと、myhead.hとして分割コンパイルでやりました。 /*---------main.cpp--------*/ //ヘッダファイルで構造体宣言、test()のプロトタイプ宣言済み void main() { struct data dt[10]; ・・・・・・ test(dt); //test.cppのtest関数に構造体を渡す。 } /*---------test.cpp---------*/ void test1(??????); //test1()のプロトタイプ宣言 void test(struct data *p) //構造体をアドレス渡しで受け取った { ・・・・・ test1(?????); //test.cppで宣言したtest1関数に構造体を渡したい } どうかよろしくお願いします。

  • この例は「何渡し」と言うのでしょうか?

    Sub test1() Call test2("aaa") End Sub Sub test2(str As String) MsgBox str End Sub ByRefもByValも使ってないから 参照渡しでも値渡しでもないですよね?

  • アドレス渡し?

    以下のコードのprocFncの&strは、変数の「アドレス渡し」をしているのでしょうか? 「アドレス渡し」で検索しても*を使った方法は見つかるのですが、&を使った例が見つかりません。 説明が載っている本またはホームページを教えていただければ幸いです。 int main(void) { AnsiString str; procFnc(str); } int procFnc(AnsiString &str) { str = str + 'a'; }

  • JSPから値を送ったときのServletでの受け取り方について

    JSPから<form>で値を送って、それをServletでgetParameterで受け取る処理を しているのですが、 JSPから送る値がいくつあるかわからない場合、Servlet側ではどのように 受け取る方法があるでしょうか? 例えば、 <form action="<%= response.encodeURL("/mimi/abc") %>" method="post"> <% for(int i=0;i<attr.size();i++) { //attr.size()にはいくつ入ってるか不明として String strNameAtr = (String)attr.elementAt(i) ; %> 値 <input type="text" value="<%= strNameAtr %>" name="xmlValueAttr_"+"<%= i %>"><br> <% } %> <input type="submit" value="変更" name="getText"> </form> これを、Servletで受け取る場合、どのように受け取れるでしょうか? xmlValueAttr_iの"i"の部分はいくつまで入っているかわからないので、 普通の処理だと、対応できません。 いい方法があったら、教えてください、お願いします。

    • ベストアンサー
    • Java
  • 配列と空欄の比較

     失礼いたします。 String str[][] = {{""},{""}}; なのですが、このstr[][]が空だということを判定する方法を教えてください。 普通にif({{""},{""}}.equals(str)) とするとエラーが出ます。 また、 if("".equals(str[0][0]) && ("".equals(str[1][0])) とはしたくないです。 1、配列要素全てが""である 2、配列要素のひとつ(str[1]等)が全て""である str={{"word",""},{"",""}}のようなとき ことを検証するにはどうすればよいでしょうか?

    • ベストアンサー
    • Java
  • if文を使った問題について

    次の問題について・・・ 問題: (1)String型の変数を2個作成し、それぞれに自分の名前と年齢を設定する。 (2)標準入力を行う。 (3)標準入力された値が「name」だった場合は名前の入力されている変数の値を表示する。 (4)標準入力された値が「age」だった場合は年齢の入力されている変数の値を表示する。 (5)標準入力された値が「name」と「age」以外だった場合は「わかりません」と表示する。 出力結果: C:\>java NameAge name 岩田 C:\>java NameAge age 27 C:\>java NameAge ?? わかりません 解答例: import java.io.*; class NameAge{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String hoge = br.readLine(); if(hoge.equals("name")){ System.out.println("岩田"); }else if(hoge.equals("age")){ System.out.println("27"); }else{ System.out.println("わかりません"); } } } ************************************************************ 上記の解答例以外に記述方法ってないのでしょうか? 自分は最初switch文を使って出来ると思い、 import java.io.*; class NameAge{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); switch(str){ case "name": System.out.println("岩田"); break; case "age": System.out.println("27"); break; default: System.out.println("わかりません"); break; } } } というふうに記述してみたのですが、 NameAge.java:13:互換性のない型 検出値 : java.lang.String 期待値 : int switch(str){ とエラーが出てしまいました。 恐らくstrの変数をここで使おうとしたことがいけないの だろうと解釈したのですが、 この質問の場合switch文での記述方法というのは無いですか? やはりequals()メソッドを使ってif文で記述するしかない のでしょうか?

    • ベストアンサー
    • Java
  • JSP/Servletのパラメータの受け渡しが文字化けしてうまくいきません。

    JSP・Servlet・Beanがうまくいかなくて困っています。開発環境はWindowsXP JDK5とEclipse3.2とTomcat5.5を使って作っています。 じゃんけんをするゲームを作ったのですが、コンピュータの手は文字列も画像もきちんと出るのですが、自分の手が文字列は文字化けして画像も正しく表示されません。 JSPのcharsetやServletのrequest.setCharacterEncoding()メソッドなど文字化け等で考えられることはいろいろ調べてやってみたつもりなのですがどうもうまくいきません。コンソールに値を出力するようにしてデバックもやってみてはいるのですが、同様に文字化けした値が入ってしまいます。どなたかご教授下さい。以下にソースを書きます。 <!--JankenStart.jsp--> <%@page language="java" import="java.lang.*, java.util.*" contentType="text/html; charset=Shift_JIS"%> <html> <head><title>じゃんけんゲーム</title></head> <body> <h2>このゲームはコンピュータとじゃんけんをします!<br> コンピュータに勝てるかな?</h2> <form action="../JankenAction"> あなたの手: <input type="radio" name="te1" value="グー">グー<img src="../img/hand4-1-3.gif"> <input type="radio" name="te1" value="チョキ">チョキ<img src="../img/hand4-1-1.gif"> <input type="radio" name="te1" value="パー">パー<img src="../img/hand4-1-2.gif"><p> <center><input type="submit" value="勝負"></center> </body> //JankenAction.java package servlets; import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import beans.JankenBean; public class JankenAction extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{  request.setCharacterEncoding("Windows-31J");  response.setCharacterEncoding("Windows-31J");   String te=request.getParameter("te1");   JankenBean jankenBean=new JankenBean();   jankenBean.setJibun(te);   jankenBean.setComputer();   jankenBean.setHantei();   request.setAttribute("hoge", jankenBean);   RequestDispatcher rDispatcher=request.getRequestDispatcher("JSP/JankenKekka.jsp");   rDispatcher.forward(request, response); } } //JankenBean.java package beans; public class JankenBean { private String computer=null;private String jibun=null; private String hantei=null; private String jgazou=null; private String cgazou=null; public String getComputer(){ return computer; } public String getCgazou(){ return cgazou; } public void setComputer(){ int random =(int)(Math.random()*3); if(random==0){ System.out.println("グー"); computer="グー"; cgazou="img/hand4-1-3.gif"; } else if(random==1){ System.out.println("チョキ"); computer="チョキ"; cgazou="img/hand4-1-1.gif"; }else{ System.out.println("パー"); computer="パー"; cgazou="img/hand4-1-2.gif"; } System.out.println("computer"+computer); } public String getJibun(){ return jibun; } public String getJgazou(){ return jgazou; } public void setJibun(String te){ jibun=te; if(jibun.equals("グー")){ jgazou="img/hand4-1-3.gif"; } else if(jibun.equals("チョキ")){ jgazou="img/hand4-1-1.gif"; }else{ jgazou="img/hand4-1-2.gif"; } System.out.println("jibun"+jibun); } public String getHantei(){ return hantei; } public void setHantei(){ String hantei2=""; if( (computer.equals("グー"))&&(jibun.equals("チョキ"))||(computer.equals("チョキ"))&&(jibun.equals("パー"))||(computer.equals("パー"))&&(jibun.equals("グー")) ){ System.out.println("コンピュータの勝ち"); hantei2="コンピュータの勝ち"; }   else if( (computer.equals("グー"))&&(jibun.equals("パー"))     ||(computer.equals("チョキ"))&&(jibun.equals("グー"))     ||(computer.equals("パー"))&&(jibun.equals("チョキ")) ){ System.out.println("あなたの勝ち"); hantei2="あなたの勝ち"; }else{ System.out.println("あいこ"); hantei2="あいこ"; } hantei=hantei2; } }

  • WEBでServletに値を渡してウィンドウを閉じたいのですが…

    ある子ウィンドウで選択した値をServretに渡してセッションに格納して子ウィンドウを閉じたいのですが、 Servletで処理している最中にウィンドウが閉じてしまい、値を格納できません。 (IOExceptionが出てしまい、セッションに格納できません。) Servletに渡し終えたかの判断ができればいいのですが…何かよい方法はありませんか? 下記にJava Scriptを書いておきます。 function action_submit(){ with(document.form**){ action= "<Servlet>?URLNAME="+URLNAME.value;   method= "POST";   submit(); } window.close(); } Javaでの制御なのかJava Scriptの制御なのかどちらがいいのでしょうか? ご回答よろしくお願いします。

専門家に質問してみよう