-Servlet外でのHTML出力-

このQ&Aのポイント
  • Servletの処理でHTMLを出力する方法についての質問です。
  • セッションが切れた状態でもHTMLを出力する方法についての質問です。
  • セッション切れ後の処理で同じようにHTMLを出力する方法があるかどうか質問しています。
回答を見る
  • ベストアンサー

-Servlet外でのHTML出力-

お世話になります。 Servletの処理で・・・ PrintWriter out = res.getWriter(); out.println("<html><body>"); out.println("<form>"); out.println("<td>HelloWolrld</td>"); out.println("</form>"); out.println("</body></html>"); out.close(); ・・・のようなHTML出力がありますが、 セッション切れ後の処理(HttpSessionBindingListener 実装)で同じように画面にHTMLを出力する方法はありませんか?? セッションが切れた状態では無理な気がするのですが・・・ ・・・何とかなりませんか??

noname#30420
noname#30420
  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • tajiri
  • ベストアンサー率45% (5/11)
回答No.2

>基本的にはセッションが切れた時に指定のページに飛びたいだけです。 > >現在、HttpSessionBindingListenerを実装してセッション切れ後の処理までは行き着くのですが、その後のページ表示方法が分からないと言った現状です。 >やはり・・・これも不可能ですかね?? 単刀直入にいうと不可能だと思います。 HTTPの仕組みから考えるとわかりやすいのですが HTTPはセッションレスです。 (この点は理解されてますか?) それを補完するためにHttpSessionという 仕組みによって接続がつながっているように 見せています。 そのセッションがタイムアウトになるということは 実際の接続が切れたあと、しばらくして セッションも切れたことになります。 そのため返すためのブラウザへの接続は切れているので ブラウザに表示させることは不可能になります。 それだったらServletにリクエストがあった時点で、 すでにセッションのオブジェクトがあるかどうかで 判断するのが妥当だと思いますがいかがでしょう?

noname#30420
質問者

お礼

やはり無理でしたか・・・ 分かりました。ありがとうございます。

その他の回答 (1)

  • tajiri
  • ベストアンサー率45% (5/11)
回答No.1

どうしたいのか要望がよくわからないのですが・・・・ セッションが切れた瞬間を補足したいのですか? それとも単にセッションが生きてるかどうかが わかればいいのでしょうか? 前者であればクライアントに返すのは不可能だと 思いますが、後者であればif文で振り分ければ いいと思います。

noname#30420
質問者

補足

すみません・・・説明不足ですね。 基本的にはセッションが切れた時に指定のページに飛びたいだけです。 現在、HttpSessionBindingListenerを実装してセッション切れ後の処理までは行き着くのですが、その後のページ表示方法が分からないと言った現状です。 やはり・・・これも不可能ですかね??

関連するQ&A

  • HTMLからデータを受け取るサーブレットについて

    教本の教え通りにコードを記述してるつもりなんですが,うまくいきません。コンパイルもうまくいきtomcatでHTML画面からデータを送信してもサーブレットはうまく応えてくれません。どなたか教えてください。 (fromhtml_365.java) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class fromhtml_365 extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{ res.setContentType("text/html; charset=shift_JIS"); PrintWriter out = res.getWriter(); out.println("<html><head>"); out.println("<title>サーブレットからパラメータを受信</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>受信したパラメータ</h1>"); out.println("<h2>"); out.println(req.getParameter("param")); out.println("</h2>"); out.println("</hody></html>"); } } (html_366.html) <HTML> <HEAD><TITLE>サーブレットにパラメータを送信</TITLE></HEAD> <BODY> <H1>サーブレットにパラメータを送信</H1> <FORM ACTION="/examples/servlet/fromhtml_365"> 送信パラメータ<INPUT TYPE="TEXT" NAME="param"><BR> <INPUT TYPE="SUBMIT" value="送信"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • Java
  • index.htmlの代わりにサーブレットを実行

    localhost:8080でindex.htmlを表示する代わりにServlet.classを実行したいのですがtomcat5の設定を教えてください。ちなみにlocalhost:8080/servletで実行するところまでは、本に載ってたので分かってます。 public class Servlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML>"); out.println("<BODY>"); out.println(new java.util.Date()); out.println("</BODY>"); out.println("</HTML>"); } }

    • ベストアンサー
    • Java
  • Servletが動かない

    下記のようなサーブレットを作成し、web.xmlも記述して動かしてみようとしたところ下記のようなエラーが発生して動きません。(Win2000、Tomcat4.1) ~~~HelloWorldServlet.java package test_servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = res.getWriter(); out.println("<html>"); out.println("<head>"); out.println("</head>"); out.println("<body>"); for (int i = 1; i <= 10; i++) { out.println("Hello World" + Integer.toString(i)); } out.println("</body>"); out.println("</html>"); } } ~~~web.xml <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>HellowWorld</servlet-name> <servlet-class>test_servlet.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HellowWorld</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> </web-app> ~~~http://localhost:8080/hello接続時のスタック javax.servlet.ServletException: クラス test_servlet.HelloWorldServlet はサーブレットではありません

    • ベストアンサー
    • Java
  • セッションタイムアウトになった時

    やりたいことは 1)セッション情報を取り出す 2)取り出した値を使ってDBに書き込みする 3)セッション情報を破棄する です。 http://oshiete1.watch.impress.co.jp/qa455453.html ほぼここの方と同じです。 ここの方はうまくいったようなのですが・・・ 初心者で悩んでいます。よろしくお願いいたします。 HttpSessionBindingListener セッションが切れた(valueUnbound)時 getAttribute("aaa")で "1111111"←ユーザーIDを取得したい。 req_.getSession().getAttribute("aaa");で取得できません。 よろしくお願いします。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /** セッション開始終了処理のテストサーブレット **/ public class SessionServlet extends HttpServlet implements HttpSessionBindingListener { HttpServletRequest req_; HttpServletResponse res_; public void valueBound(HttpSessionBindingEvent arg0) { System.out.println("valueBound"); } public void valueUnbound(HttpSessionBindingEvent arg0) { System.out.println(req_.getSession().getAttribute("aaa")); System.out.println("valueUnBound"); } public void service (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req_=req; res_=res; HttpSession session1 = req.getSession(); res.setContentType("text/html; charset=Shift_JIS"); req.setCharacterEncoding("Shift_JIS"); PrintWriter out = res.getWriter(); // パラメータの取得 String act = req.getParameter("act"); // ログイン処理 if (act == null) { // セッション変数の作成、設定 SessionServlet data = new SessionServlet(); session1.setAttribute("aaa", "1111111"); session1.setAttribute("data", data); // セッション開始画面の表示 out.println("<html><body>"); out.println("<h1>セッション開始</h1>"); out.println("<form method=\"POST\" action=\"SessionServlet?act=lo\">"); out.println("<input type=\"submit\" value=\"logout\">"); out.println("</form>"); out.println("</body></html>"); out.close(); // ログアウト処理 } else { // セッション終了画面の表示 out.println("<html><body>"); out.println("<h1>セッション終了</h1>"); out.println("</body></html>"); out.close(); // セッションの無効化 session1.invalidate(); } } }

  • Servletでテキストボックスに入力された内容を追記したい。

    Servletでテキストボックスとボタンを置きsubmitすると下にいくつも追記できるようにしたいです。そのときに ブラウザを複数起動しても独立して稼動できるようにしたいです。 自分の考えとしては、submitしたデータをArrayListに取り込んでhtmlに返そうと思って下記のブログラムを 書いてみましたがうまく作動しませんでした。 何か良い方法がありましたら教えてください。 import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletTest extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException { ArrayList al = new ArrayList(); // ヘッダに出力形式をセット res.setContentType("text/html; charset = Shift_JIS"); // 出力ストリームを作成 PrintWriter pw = res.getWriter(); // テキストボックスからデータを受け取る String input = req.getParameter("param"); al.add(input); // テキストボックスが空の場合 if(input == null) { input = ""; } // HTML文を出力 pw.println("<html><head>"); pw.println("<title>SrvletTest</title>"); pw.println("</head>"); pw.println("<body>"); pw.println("<form>"); pw.println("<input type = 'text' name = 'param' maxlength = 20>"); pw.println("<input type = 'submit'><br>"); for(int i = 0; i < al.size(); i++) { pw.println(al.get(i)); } pw.println("</form>"); pw.println("</body></html>"); pw.close(); } }

    • ベストアンサー
    • Java
  • JavaServletで出力したページへの、vodafoneからの閲覧でエラー

    モバイル端末用のサイトを、JavaServletにて構築しています。 とりあえず簡単なページを表示させるところから始めたのですが、IE、DoCoMo端末、au端末からは正常に見れるのに、vodafone端末から見ようとすると「このページは表示できません。このページへのアクセスは規制されています。(P40123E)」と出ます。 vodafoneで閲覧できるようにする方法をご存知の方いらっしゃいましたら、ご教授いただけないでしょうか。よろしくお願い致します。 ■テスト環境: Windows2000 pro SP4 Tomcat 5.0.27 J2SE 1.4.2 vodafone V602SH ■出力されるHTMLソース: <html> <head> <title>Hello World Servlet</title> </head> <body> Hello JAVA World </body> </html> ■JavaServletプログラムソース: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldServlet extends HttpServlet { public void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ContentTypeを設定 response.setContentType("text/html; charset=Shift_JIS"); // 出力用PrintWriterを取得 PrintWriter out = response.getWriter(); // 出力 out.println("<html>"); out.println("<head>"); out.println("<title>Hello World Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("Hello JAVA World"); out.println("</body>"); out.println("</html>"); } }

  • 【Servletのエラーについて教えて下さい!】

    こんにちわ。いつもありがとうございます。 サーブレットをコンパイル後、実行するとHTTPのPOSTメソッドは、このURLではサポートされていません。 と表示されます。 前のJSPからはmethod="POST"にて送信しているのですが・・・ すみませんが、ご教授下さい! ソースは以下となります。 よろしくお願い致します! import javax.servlet.http.*; import java.sql.*; import java.io.*; public class EditingServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { /*フィールドの宣言*/ Connection conn = null; res.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = res.getWriter(); out.println("<html><head></head><body>"); String Str = req.getParameter( "Str" ); try { String user = "ID", pwd="PW"; Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String url="jdbc:sqlserver://10.121.67.247:1433;DatabaseName=Name"; /*JDBC URL*/ conn = DriverManager.getConnection(url,user,pwd); Statement stmt = conn.createStatement(); stmt.executeUpdate("UPDATE T_Strfer SET フラグ ='1' WHERE id='"+ Str +"'"); out.println("データを更新しました!<br>"); } catch (ClassNotFoundException e) { out.println("クラスが見つかりません。"); } catch (SQLException e) { out.println("データの更新に失敗しました。 "); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) {} } out.println("</body></html>"); out.close(); } }

    • ベストアンサー
    • 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
  • eclipse servlet 404対処方法

    初めて質問させて頂く者です。宜しくお願いします。Java初心者です。 eclipse4.3のtomcatプロジェクトを使い、以下のServletコードを作成しました。 ブラウザアドレスバーに以下アドレスを入れて実行しましたが、HTTPステータス404が表示されます。 どのように改善したら良いかアドバイスをお願い致します。長文申し訳ございません。本当に困っています。 環境:windows8.1 eclipse4.3 ディレクトリ:jwapp(プロジェクト名) -test(パッケージ名) -First(ファイル名) 指定アドレス:localhost:8080/jwapp/servlet/test.First web.xmlファイルはWEB-INFの中に置いています。 記述は以下のとおりです。↓ <?xml version="1.0" encoding="ISO-8859-1"?> <web-app version="2.5" 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_5.xsd"> <servlet> <servlet-name>first</servlet-name> <servlet-class>test.First</servlet-class> </servlet> <servlet-mapping> <servlet-name>first</servlet-name> <url-pattern>/first</url-pattern> </servlet-mapping> </web-app> Servletのコードは以下のとおりです。↓ package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class First01 extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException{ res.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=res.getWriter(); out.println("<html)"); out.println("<head>"); out.println("<title>テスト</title>"); out.println("<h1>テスト</h1>"); out.println("</body>"); out.println("</heml>"); } }

    • ベストアンサー
    • Java
  • servlet のbackground

    servletのプログラムが表示するHTML文書の 壁紙を設定したいのですが、よく分かりません。 c:/resin_home/webapps/myri/WEB-INF/classes の 中のservletのプログラム中で、 out.println("<body background=\"mypic/back.gif\">"); と出力しています。 mypicディレクトリはどこに置けばちゃんと表示されますか?