• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同時アクセス時の動作)

同時アクセス時の動作に関する疑問点

noname#45950の回答

  • ベストアンサー
noname#45950
noname#45950
回答No.3

No.2です。 だとしたら、引数で渡した方がいいと思います。 もし数が多いようであれば、データに対応するクラスを1つ作って渡せばいいと思います。 なぜなら。 せっかくサーブレットというマルチスレッドのものを使っているのに、わざわざシングルスレッドにして、アクセス数に比例してユーザーの応答時間を長くする必要はないと思うので。 また、せっかくDBという排他制御の備わったものを使っているのに(お使いのDBが何かはわかりませんが、まず間違いないでしょう)、わざわざパフォーマンス落とす必要もないと思います(ファイルの読み書きでデータを拾っているのならともかく)。

-cinq-
質問者

お礼

お礼の欄にすみせん。 上記の内容が間違っていましたので訂正します。 public class Sample extends HttpServlet{  private static final int int_OK = 0; // 戻り値(OK) // private String name;   // 名前 // private String db_name;  // DB名前 protected void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{  SetterGetter setget = new SetterGetter();  // リクエストパラメータ取得  setget.name = req.getParameter("name"); // 名前  // DB検索  setget.db_name = rs.getString("name");  // 結果を返却 private class SetterGetter{    private String name;   // 名前    private String db_name;  // DB名前  private void setName(String name) {     this.name= name;  }  private String getName() {     return name;  }  private void setDb_name(String db_name) {     this.db_name = db_name;  }  private String getDb_name() {     return db_name;  } } } 以下の処理で問題なく動作しますでしょうか? よろしくお願いします。

-cinq-
質問者

補足

ご回答ありがとうございます。 また、お礼が遅くなりまして申し訳ありません。 ここでまたひとつ質問ですが、 クラスを作成した場合はそのクラスはpublicになると思いますが、 同時にdoPostの要求がきた場合は値が書き換わることはないのでしょうか?

関連するQ&A

  • 宣言のタイミング

    質問させてください。 Servletの中で、他クラスからの参照のできる static final String について何ですが、 例えば、 public class goo extends HttpServlet{ static final String CODE = "text/html;charset=Shift_JIS"; public void doPost(HttpServletRequest req,HttpServletResponse res) thows servletException,IOException{ res.setContentType(CODE); など、実際の値を入れるやり方は、分かるのですが、 Servlet内で、何らかの処理後の String を static final String 宣言をするには、どうしたらよいのでしょうか? 例えば、 public class goo extends HttpServlet{ public void doPost(HttpServletRequest req,HttpServletResponse res) thows servletException,IOException{ String para = req.getParameter(para); String param = new String(para.getBytes("8859_1"),"JISAutoDetect"); 等の時に、paramを static final String にしたいのです。 自分でも文法が出来てないとは思いますが、よろしくお願いします。

    • ベストアンサー
    • 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
  • メソッドの引数に指定されているインタフェースについて

    最近サーブレットをいじっているので例としてサーブレットを扱いますが、一般的な話題として扱っていただければと存じます。 非常に質問を文章化しにくいのですが・・ たとえば、クラスHttpServletには以下のようなメソッドがあります。 doGet(HttpServletRequest req, HttpServletResponse resp) このメソッドの引数に指定されているHttpServletRequest/Responseはいずれもインタフェースなわけですが、メソッドの引数にインタフェースを指定するというのは、具体的にどういうことなのでしょうか? これがたとえばintだったりStringだったりした場合は簡単にイメージできるのですが、インタフェースだとさっぱりわかりません。 質問がわかりにくいかもしれませんが、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 画面遷移時のデータ遷移について

    Javaにも記載してしまったのですがこちらに記載すべきかと思い投稿させていただきました。 2重投稿になってしまうため削除しようとしたのですが24時間経たないと削除できませんでした。 24時間後に1つにしようと思います。 皆様のお力をお貸しください。 よろしくお願いします。 入力画面で入力した値を次の確認画面で表示したいと思っているんですがどのようにしたらよいでしょうか? web.xmlでは定義してあります。 入力前のJSPは作成しました。 入力後のJSPをどのようにしたらいいでしょうか? また入力画面のJSPは変更する必要があるでしょうか? --------------------------------------------- package monndai; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Monsyo_NewFileDate extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { RequestDispatcher reqDis = null; try { System.out.println(); //表示JSP決定 reqDis = req.getRequestDispatcher("/jsp/Monsyo_newFileDate.jsp"); //forward reqDis.forward(req,res); } catch (Exception e) { System.out.println("err"); e.printStackTrace(); req.setAttribute("exception", e); reqDis = req.getRequestDispatcher("/jsp/error.jsp"); reqDis.forward(req, res); } } } --------------------------------------------- package monndai; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Monsyo_NewFileInputData extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { RequestDispatcher reqDis = null; try { System.out.println(); //表示JSP決定 reqDis = req.getRequestDispatcher("/jsp/Monsyo_newFileInputData.jsp"); //forward reqDis.forward(req,res); } catch (Exception e) { System.out.println("err"); e.printStackTrace(); req.setAttribute("exception", e); reqDis = req.getRequestDispatcher("/jsp/error.jsp"); reqDis.forward(req, res); } } } --------------------------------------------- <%@page language="java" %> <%@page contentType="text/html;charset=EUC-JP"%> <% String returnPath0 = null; String returnPath1 = null; %> <html> <head> <script language="JavaScript"> <!--//  function checkLength(obj, maxlen) {   if(obj.value.length > maxlen) {    obj.disabled = true;    obj.value = obj.value.substring(0,maxlen);   }   obj.disabled = false;   obj.focus(); // BackSpace防止  } function sendRequest(path) { document.fr.action = path; document.fr.submit(); } --> </script> </head> <title>新問処発行</title> <body> <form name="fr" onSubmit="true" method="POST" > <div align="left"> <h3> 新問処発行</h3> <br> <日付> (XXXX/XX/XX)<br> <input type="text" align="left" maxlength="10" name=" " size="15" > <br> <タイトル>(100文字以内)<br> <textarea rows="5" cols="60" name="title" onkeyup="checkLength(this, 100);" style="ime-mode:active"></TEXTAREA> <br> <% returnPath0 = "sendRequest('/mondai/Monsyo_NewFileInputDataServlet')"; returnPath1 = "sendRequest('/mondai/Monsyo_ToppageServlet')"; %> <br> <input type="button" value="入力" onClick="<%= returnPath0 %>"/> <input type="button" value="戻る" onClick="<%= returnPath1 %>"/> </div> </form> </body> </html> ---------------------------------------------

  • サーブレットの動作

    以下のようなサーブレットのプログラムがあります。 本サーブレットを実行すると、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
  • javax.servlet は存在しませんと出ます。

    JAVA初心者です。 Tomcat5.0をインストールしてサーブレットをコンパイルしようとするのですが以下のようなコメントが出て上手くいきません。 PATHの設定が原因だと思うのですがインターネットで色々調べたのですが分かりません。PATHの意味がいまいち分かっていませんがよろしくお願い致します。 システム環境変数は CATALINA_HOME C:\Program Files\Apache Software Foundation\Tomcat 5.0 JAVA_HOME C:\Program Files\Java\jdk1.6.0_15 ユーザー変数は 変数名 path 変数値 c:\j2sdk1.4.2\bin エラー内容が c:\javasrc>javac HelloServlet.java HelloServlet.java:5: パッケージ javax.servlet は存在しません。 import javax.servlet.*; ^ HelloServlet.java:6: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.*; ^ HelloServlet.java:8: シンボルを見つけられません。 シンボル: クラス HttpServlet public class HelloServlet extends HttpServlet{ ^ HelloServlet.java:10: シンボルを見つけられません。 シンボル: クラス HttpServletRequest 場所 : HelloServlet の クラス public void doGet(HttpServletRequest req,HttpServletResponse res) ^ HelloServlet.java:10: シンボルを見つけられません。 シンボル: クラス HttpServletResponse 場所 : HelloServlet の クラス public void doGet(HttpServletRequest req,HttpServletResponse res) ^ HelloServlet.java:11: シンボルを見つけられません。 シンボル: クラス ServletException 場所 : HelloServlet の クラス throws IOException,ServletException { ^ エラー 6 個 になります。

  • RequestDispatcherの使用方法

    RequestDispatcherの使用方法について教えてください doPostメソッドにて以下のロジックを実行しています。 public void doPost(HttpServletRequest req, HttpServletResponse res){ Strin uri= "/aaa/bbb/ccc/ddd.jsp"; RequestDispatcher dis = request.getRequestDispatcher(uri); dis.foward(req, res); return; } この処理でfowardのところからreturnに進まず再度doPost()がよばれてしまい 無限ループ状態になります。 RequestDispatcher に設定されている情報は以下です。 servletPath = "bbb"; pathInfo = "/aaa/bbb/ccc/ddd.jsp"; 情報が足りていないとは思いますが よろしくお願い致します。

    • ベストアンサー
    • Java
  • 初めての、Servlet→JSP

    今、DB検索Servletを開発しています。 そこで、コンパイル時のエラーについて、いきずまったので少し質問 させてください。 内容は、Servletで、コネクションをDBに接続し、検索。 JSPで表示といった、システムです。 public class goo extends HttpServlet { public void init() throws ServletException { /* DB接続処理 */ } public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { try{ Statement statement = con.createStatement(); String query ="SELECT * FROM test"; ResultSet ResObj = statement.executeQuery(query); ResObj.close(); statement.close(); } catch(Exception ex){ ex.print.StackTrace(); } try{ req.setAttribute("ResObj",ResObj); getServletConfig(). getServletContext(). getRequestDispatcher("kekka.jsp"); forward(req,res); } catch(Exception ex){ ex.print.StackTrace(); } } } で、コンパイルのエラーが、 定義されてない変数、クラス、またはパッケージ名: ResObj req.setAttribute("ResObj",ResObj);                 ^ と、出ます。 定義とは、 ResultSet ResObj = statement.executeQuery(query); の内容ではないのですか? それとも、他で定義しないとダメなんですか? ご指摘、宜しくお願いします。

    • ベストアンサー
    • Java
  • beanの利用

    これは、ブラウザから、Parameterを受け取り、DBで検索内容を取得してくると言う、内容です。 一部省略しますが、下記に表示します。 /*GooServlet*/ public class KensakuServlet5 extends HttpServlet{ public void doPost (HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException { dbAccess dbaccess = new dbAccess(); String id = req.getParameter("id"); dbaccess.setId(id); dbaccess.Execute(); req.setAttribute("dba",dbaccess); RequestDispatcherrd=sc.getRequestDispatcher ("/Hyouji.jsp"); rd.forward(req,res); /*dbAccess*/ public class dbAccesss { private String id = getId(); public void Execute(){ /*DB接続処理*/ while(resultset.next()){ id = resultset.getString("id"); } public void setId(String val){id = val;} public String getId(){return(id);} } /*Hyouji.jsp*/ <%@ page contentType="text/html;charset=Shift_JIS" %> <jsp:useBean id='dba'scope='request'class='dbAccess'/> <html> <body> <%=dba.getId()%> </body> </html> です。少し、省略しましたが・・。 で、今回の質問は、ファイルへの書き出しを加える事なのです。 ファイルへの書き出しは、下記のような流れです。 FileOutputStream fos = new FileOutputStream("c:\\inetpub\\hello.text"); OutputStreamWriter osw = new OutputStreamWriter(fos , "Shift_JIS"); BufferedWriter bw = new BufferedWriter(osw); bw.write(goo); } このような処理を、beanで取得した値(dba.getId())を、ファイルに書き出したいのです。 説明が下手ですみませんが、ご助言よろしくお願いします。

    • ベストアンサー
    • Java
  • サーブレットとMysqlについて

    JSP サーブレット Mysqlについて質問です。 私が今実現させたいことを簡単に説明します。 画面側にはtextboxがあり、このtextboxは追加ボタンによって、 どんどん追加されていきます。 サーブレット側はこのtextboxの全ての値をDBに書き込みたいです。 例えば、textboxが二つなら、一つ目のINSERTでDBのname列にtextbox一個目の値を書き込み、二つ目のINSERTでDBのname列にtextboxニ個目の値を書き込む。 ソースを書いてみたのですが、いろいろと違いがあると思いますので、ご教示をお願いします。 現在は下記ソースを実行してもDBは更新されません・・ もしかしたら、DBの設定がおかしいのでしょうか・・ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name10 = request.getParameterValues("sonota"); for (int i = 0; i < name10.length; i++) { System.out.println(i + " " + name10[i]); name10[i] = new String(name10[i].getBytes("8859_1"), "UTF-8"); } Connection conn = null; CallableStatement cs = null; PreparedStatement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/Sample_db"; String dbUser = "root"; String dbPass = "taratara"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, dbUser, dbPass); String sql= "insert into Sample_db.Sample_table (name) values (name10[i]);"; stmt = conn.prepareStatement(sql); for (String n : name10) { stmt.setString(1, n); stmt.executeUpdate(); } int cnt = stmt.executeUpdate(); stmt.close(); }catch(Exception e){ //exception RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); } } }

    • ベストアンサー
    • Java