- ベストアンサー
getParameterとgetInitParameterの違いについて
いつもお世話になっています。 現在HTMLファイルからServletを呼び出す処理を行っています。 Servletファイル側のdoPostメソッドのなかでよく記述してある HttpServletRequest.getparameter("パラメタ名")は HTMLファイルのFORMタグのなかにある情報を取得するものですが、 初期処理(initメソッド)でよく記述されている ServletConfig.getInitParameter("パラメタ名")は どこの情報を取得しようとしているものなのでしょうか? また public void doPost(HttpServletRequest request, HttpServletResponse response) という記述ではServletファイルが呼ばれた時に引数をrequestに取得しますが このときresponseの中身はNULLの状態なのでしょうか? responseの使い方がいまいちイメージできなくて。。 たくさん質問してすいません。 何かお気づきの方が居られましたら、ご教授ください。 宜しくお願いします。
- takatoo
- お礼率64% (50/78)
- Java
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>どこの情報を取得しようとしているものなのでしょうか? web.xmlの中で設定されたパラメータの値を引き出します。 >このときresponseの中身はNULLの状態なのでしょうか? response.setContentType("text/html; charset="+charset); といったようなメソッドをすぐさま呼び出せるのでnullではありません。 もしnullであればNullPointerExceptionが発生するはずです。 普段プログラミングをしている中で少し考えてみればわかることです。
その他の回答 (1)
- kamkamkam3
- ベストアンサー率42% (216/514)
ServletConfig.getInitParameter("パラメタ名")は サーバ(実行環境)に設定している値を取り出します。データベースのサーバ側の設定情報などを読みます。これらは、Javaから、データベースに接続する際に必要なのですが、たまに、データベースの設定情報を変更したいときは、ソースコードを全部変更するより、サーバの設定ファイルを変更したほうが安全で確実なので、その様な仕組みになっています。 他にも、使用例はいろいろあるんですが。。思いつかないので。。 がんばってください。 >このときresponseの中身はNULLの状態なのでしょうか? 引数でもらう以上、意味があるからもらうわけで、NULLでは、ないと思います。responseは、サーバから、サーバにアクセスしたパソコンに対する返事を書きます。主に、httpヘッダの内容や、クッキーに関する情報を書きます。PrintWriterオブジェクトを取得するのもresponseオブジェクトです。
お礼
返信が大変おそくなり申し訳ございません。 サーバー設定ファイルの存在にも気づいていませんでした。 もう少し基礎の勉強時間が必要のようです。 ご回答ありがとうございました。
関連するQ&A
- doGetとdoPostの違い
それぞれブラウザからのリクエストの種類に対応する メソッドがdoGet,doPost。 doGetはブラウザからGETでそのサーブレットに リクエストがあった時に、処理が始まるメソッド、 doPostは同じようにPOSTを受け取った時に動き出す ・・・・・ということなのですが、 doGetもdoPostも、中身のコーディングの仕方としては 同様でいいのでしょうか? いま、doGetでリクエストに対応する処理をうけつけて いるのですが、255バイトまでなのでdoPostのほうが いいということがかかれていました。 これは、ブラウザ:Servletのメソッドで対応してれば いいだけで、結局は送信量の違いだけですか? そのへんがよくわかってないので教えてください。 ちなみに、doGetでやってる処理は、 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Bean(workBean)のインスタンス作成 wk = new work_Bean(); //Bean処理実行 wk.Work(); ・ ・ ・ ・ //BeanをJSPに渡すためにHttpServletRequestオブジェクトにセット request.setAttribute("wk",wk) ; //ViewであるJSPを呼び出す RequestDispatcher rDispatcher = request.getRequestDispatcher("/kanri_JSP.jsp"); rDispatcher.forward(request,response); } こんなかんじでしてます。 あとは、ネットで、人のサンプルとかみると doGetメソッドに処理をかいており、doPostでは doGet(request,response);として doGetをよんでたりするんですが、 これは、PostでもGetと同様の処理ができると いうことですか? 基本的な質問過ぎるかとおもいますがおしえてください。
- ベストアンサー
- Java
- getParameter と getAttributeの違いについて
Servletで、Form内の任意の項目を取得する場合には、 「getParameter」 と 「getAttribute」があります。 この二つの違いとしては getParameter 戻り値:String なのに対して getAttribute 戻り値:Object という違いがあります。 感覚的には getParameterも、getAttributeも、 Form内の任意の項目の値を取得する場合に getParameter("項目名"); getAttribute("項目名"); という使い方で 「どちらでもHTML(JSP)のフォーム内のデータを取得できる」という感覚がありあます。 ちょっと上手く纏められず、前提が長くなってしまったのですが 【ご質問1】 getParameterとgetAttributeの、 決定的な違いとはなんなのでしょうか? 参考のURLにもあるように 「Parameter は request にユーザが乗せてきたもの。 」であり、 「Attribute は request 生成後に Servlet だか JSP だかがくっつけたもの。」であるという違いが決定的な違いでしょうか? 言い換えれば Parameter は フォーム内のリクエストデータを受け、渡す役割をもつ、担当者であり Attribute は フォーム内のリクエストデータを受け、加工し、渡す役割を持つ担当者である ということでしょうか? 【ご質問2】 getAttributeがあるにも関わらず、 getParameterは何故存在するのでしょうか? getAttributeは戻り値をObject型として戻りますが、String型にキャストしてやれば、それでgetParameterで取得した効果と同じ効果が得られるものだと思われるので getParameterの存在理由が見出せないのですけども、getParameterはgetParameterで何か特別な役割をもっているのでしょうか? 【ご質問3】 フォーム内データを取得する場合、 「getParameter」でなければならないとか「getAttribute」を使用しなければならない、とかそういった決まりはありますでしょうか? [参考URL] http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=403&forum=12
- ベストアンサー
- Java
- doPost+doGet
public class Class{ public void doPost (HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException try{ //処理 }catch(Exception e){ e.printStackTrace(); } } public void doGet (HttpServletRequest request,HttpServletResponse response){ try{ doPost(request, response); }catch(Exception e){ e.printStackTrace(); } } } この処理は、doGetで送信されたものをdoPostに送って処理するということでよろしいのでしょうか? 分かる方がいましたら、よろしくお願いします。
- ベストアンサー
- Java
- サーブレット初歩に関して。
package oty; 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 Otys */ public class Otys extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Otys() { 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 } } 初期状態がこんな状態なんですが、これになにを追加したらhelloworldとでますか?? 普通にJAVA入門みたいに、System.out.printlnしたらいいんでしょうか??
- ベストアンサー
- Java
- getRequestDispatcher の機能について
こんいちは。 下記の機能を使用して転送したいのですがエラーになってしまいます。 tomcatの設定ファイル、web.xmlなどのファイルに何か情報を登録しなければならないのでしょうか? どなたかご存知でしたら教えていただけないでしょうか? 環境 tomcat4.1 機能 ****** getServletConfig().getServletContext().getRequestDispatcher("/cc/t_1.jsp").forward(request,response); ****** ソース package cc; import mng.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class t_1 extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { //response.sendRedirect("/cc/t_1.jsp"); getServletConfig().getServletContext().getRequestDispatcher("/cc/t_1.jsp").forward(request,response); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doGet(request,response); } } 下記がエラー内容になります。 HTTP Status 404 - /cc/t_1.jsp The requested resource (/cc/t_1.jsp) is not available.
- ベストアンサー
- Java
- サーブレットのパラメタ変更
例えば、 - a.html - <form method="post" action="/Servlet1"> <input type="text" name="animal" size="12"> <input type="submit" value="送信"> </form> というHTML文がありanimalのテキスト内容がcatとしてServlet1へリクエストしたとします。 Servlet1ではgetParameter("animal")でcatを取得できます。そこで次のページをレスポンスするべく、 getServletContext().getRequestDispatcher("Jsp1.jsp").forward( request, response ); という形でJsp1.jspへフォワードします。Jsp1.jspでもrequest.getParameter("animal");とすると catという値が取得できると思うのですが、これをServlet1でanimalがcatならdogというようにパラメータの値を変更することはできますでしょうか? 初歩的な質問かと思いますが、何卒、宜しくお願いいたします。
- ベストアンサー
- Java
- サーブレットの動作
以下のようなサーブレットのプログラムがあります。 本サーブレットを実行すると、simpleDB.jspに飛ぶようになっています。 疑問点は以下です。 ・GetやPostを使って送られてくるデータがないのに、なぜ 本プログラムが動くのか分かりません(根本的に分かって ないんですが)。 ・getServletContext().setAttribute("list", employeeList)で listに設定をしてますが、listは飛ぶ先のsimpleDB.jspで定義 されています。なぜこのサーブレットで定義されていないものを、 設定することが可能なのでしょうか? 以上、ご回答頂けると幸いです。 ---------- import java.io.IOException; import文以下略 public class EmployeeServlet extends javax.servlet.http.HttpServlet { /** * 初期化メソッド * 社員一覧をapplicationスコープにセットします */ public void init() { EmployeeDAO dao = new EmployeeDAO(); //EmployeeDAOクラスは他で定義済み ArrayList<Employee> employeeList = dao.findAll(); getServletContext().setAttribute("list", employeeList); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * リクエストを処理するメソッド * simpleDB.jspに移動し、社員一覧を表示します */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nextPage = "/view/simpleDB.jsp"; ServletContext context = getServletContext(); RequestDispatcher rd = context.getRequestDispatcher(nextPage); rd.forward(request, response); } }
- ベストアンサー
- Java
- パラメータのやりとり
3つのクラスの中でHTML上から取得したパラメータをやり取りしたいと思っています。 1つ目のクラス(CLASS_1.java) public class CLASS_1 extends CLASS_0 { public void doMain(HttpServletRequest request,HttpServletResponse response){ try{ String[] str = makeItem(request); CLASS_2 class_2 = new CLASS_2(); class_2.setItem(str); private String[] makeItem(HttpServletRequest request){ String[] result = new String[3]; result[0] = request.getParameter("test1"); result[1] = request.getParameter("test2"); result[2] = request.getParameter("test3"); return result; 2つ目のクラス(CLASS_3.Java) public class CLASS_3{ public void setItem(String[] data){ } public boolean makeTEXT(){ return true; } public ByteArrayOutputStream getTEXT(){ return null; } } 3つ目のクラス(CLASS_2) public class CLASS_2 extends CLASS_3 { public boolean makeTEXT(){ return true; } } という3つのクラスを作成しました。 CLASS_1で取得したstrの中の値をCLASS_2で使用したいと考えています。 ただ羅列するだけでかまいませんので、わかるかたヒントや参考になりそうなHPなどありましたら よろしくお願いします。
- 締切済み
- Java
- 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
- 締切済み
- Java
お礼
返信が大変遅くなり申し訳ございません。 ありがとうございます。 少し自分でも基礎の勉強が足りないと感じています。 ご回答ありがとうございます。