Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

サーブレットからHTMLをよびだしたい

BASIC認証(プログラミングによる)+DBプログラムを作成しております。

BASIC認証はサーブレットで実現しており、
認証されるとDBプログラム(HTMLファイル)が起動される手順になっています。

サーブレット(BASIC認証画面終了後)からHTML(DBプログラム初期画面)を呼び出したいのですが、
どうしたら実現できるでしょうか。

宜しければご教示して頂けると嬉しいです。

9

回答

7946

閲覧

9件の回答

評価

0

> BASIC認証はサーブレットで実現して
???
まあいいや
おいとこ

BASIC認証なら
ユーザのリクエストはHTML(DBプログラム初期画面)だから
認証を通ったら直接HTML(DBプログラム初期画面)が
表示されるはずだけど。
私の知らない何かの可能性もあるかな???

たぶん何か勘違いしているんだと思う。


単なるログイン画面とか?

だったらHttpServletResponse.sendRedirect
で飛ばしてあげればいいけど。

評価

0

サーブレットのservice()に入ってしまえば、レスポンスなんて好きにできるはずなんだが。
webapp内のファイルを表示したいなら、すでに出ているけどリダイレクトすればいい。
ローカルのどこかにあるファイルを表示したいってんなら、そのファイルを読み込んでresponseへ流してやればいい。

評価

0

失礼しました。
formを使わず、HTMLからサーブレットを
呼び出したく<applet>タグを使いたいのですが、
サーブレットが呼び出されません。

どのようにしたら呼び出されるのでしょうか。


《詳細》~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 クラス格納パス
  WEB-INF … classes
                  ・
          …pkg
                      ・
           …AuthenticationCheck.class
            Question.class
            QuestionBean.class

《一番最初に使用されるHTMLファイルの内容》~~~~~
  <html>
    <head><title>ログイン画面</title></head>
    <body>
    <applet code="AuthenticationCheck.class"
    codebase="http://localhost:8080/db_v2.00/pkg/" 
        archive="test.jar" width=200 height=100>
    <param name="speed" value="10">
    <param name="top" value="100px">
    <param name="title" value="Koji Sugiura's 
         Applet!">
    <p width=200>あなたの現在のブラウザでは、
         Java が無効になっているか、
    APPLET タグを認識しないブラウザではないで
         しょうか。
    残念ながらアプレットを実行できません。</p>
    </applet>
    </body>
</html>  

《認証プログラム》~~~~~~~~~~~~~~~~~~~~~~~~~~
package pkg;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import sun.misc.BASE64Decoder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class AuthenticationCheck extends HttpServlet{
        
        private static final long serialVersionUID = 1;

        private String authority;
        
        public void doGet(HttpServletRequest request,
                HttpServletResponse response)
            throws ServletException, IOException{

            String authorization=request.getHeader("Authorization");
            
            if(authorization == null){
                askForPassword(response);
                
                 }else{

                    String userInfo=authorization.substring(6).trim();
                    BASE64Decoder decoder = new BASE64Decoder();
                    String nameAndPassword = 
                         new String(decoder.decodeBuffer(userInfo));

                    int index=nameAndPassword.indexOf(":");
                    String user=nameAndPassword.substring(0,index);
                    String password=nameAndPassword.substring(index+1);
               
                    if(CheckPassword(user,password)){ 
                        doPost(request, response);
                  
                    }else{
                         askForPassword(response);
                
                    }
                 }
            }
          
        private void askForPassword(HttpServletResponse response){
            response.setStatus(response.SC_UNAUTHORIZED);
            response.setHeader("WWW-Authenticate",
                    "BASIC realm=\"Insider-Trading\"");
        }
          
        private boolean CheckPassword(String s1, String s2){
            boolean result = false;
            String pass = "";
            String id   = "";
            
            try {                 
                String url = "jdbc:mysql://localhost:3306/UserTable"
                              + "?useUnicode=true&characterEncoding=utf8";
                String user = "root";
                String password = "root";
                Class.forName("com.mysql.jdbc.Driver");
                
                Connection con = DriverManager.getConnection(url, user, password);
                
                Statement stmt = con.createStatement();
                String query = "SELECT * FROM USERTABLE WHERE PASSWORD = '" + s1 + "';";
                ResultSet rs = stmt.executeQuery(query);
                
                pass      = rs.getString("PASSWORD");
                id        = rs.getString("ID");
                authority = rs.getString("AUTHORITY");
                
                rs.close();
                stmt.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
                            
            } catch (Exception e) {
                e.printStackTrace();
                        
            }
            
            if(id.equals(s1)){
                
                if(pass.equals(s2)){
                    result = true;
                }else{
                        result = false;
                }
            
            }else{
                result = false;
            }
            return result;

        }
                
        protected void doPost(HttpServletRequest req,
                HttpServletResponse res)
                throws ServletException, IOException{
            
            res.sendRedirect("http://localhost:8080/db_v2.00/view/input.html");
        }
                
}

評価

0

そもそも、アプレットタグの「archive」でjarファイルを指定するようですが、このjarファイルはいったい何なのでしょうか。

ネット(※)で調べてみたのですが、分かりませんでした。

ご教示して頂けると光栄です。
何卒よろしくお願いいたします。

※http://www.nurs.or.jp/~sug/soft/java/java412.htm

評価

0

サーブレットとアプレットは
まったく別のものよ。
サーブブレットは
結果としてHTMLを返すの。

Tomcatの勉強をしなおすんじゃないの?

評価

0

〉てんこさん
いつも、ご指導ありがとうございます。
返信頂いていたのですね。
(鍵の生成したが証明受け入れ画面に移れない)

ごちゃごちゃさせてすみません。
BASIC認証が組み込めてから、TomcatやSSL認証のことを
調査させて頂きます。

実は、このプログラムの作成とSSLの調査を並行して行っています。
最初、SSL認証を先に組み込もうと思ったのですが、
どうやらBASIC認証の方が簡単であることが分かり、
BASIC認証を先に組み込んでいます。
(最終的に、今回作成しているプログラムにSSL認証も
追加しようと思っています。)

こちらの勝手な都合ですみません。



評価

0

確かAppletって、パスさえ通ってりゃ、
ブラウザからHTMLファイルを叩けば起動できたよな。

本当に、そのTomcatは動いているのか?
そのAppletは、本当に、サーバーから送られてきたものなのか?
logsフォルダがなかったことといい、
そもそも起動してなかったりして・・・。

評価

0

一度にひとつのことをやれ。
簡単なものから理解しながらステップアップしろ。
認証なんて基本が分かってからのことだ。

評価

0

はい。すみません。
もう少し、サーブレットを理解してからにしてみます。

沢山の回答ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。