質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Java

    13497questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    5694questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • servlet

    455questions

    Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

JSP、サーブレットでログイン画面&FORM認証

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 469

Okuto

score 5

 前提・実現したいこと

ごく普通なJSPとServletを使ったログイン画面&FORM認証を作りたいのですが
サーブレットの作り方が分からなくて困っています。
MySQLのデータベースにIDとパスワードを照合して合っていれば
次の一覧ページへ~。間違っていれば再度ログインページを表示としたいです。
JSPは下記の通りです。
データベース名はTest。
テーブル名はtest。
JSPファイル名はLogin.jsp
ServletはLogin.java
次の一覧ページはTest.javaです。
ご指摘等、よろしくお願いいたします。

 発生している問題・エラーメッセージ

エラーメッセージ

 該当のソースコード

<%@ page contentType="text/html;charset=UTF-8"
  import="java.sql.*, javax.naming.*, javax.sql.*" %>

<!DOCTYPE html>
<html>
    <link rel="stylesheet" type="text/css" href="CSS/Login.css">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>ログイン</title>
  </head>
  <body>
    <h1>ログイン</h1>
    <FORM method="POST" action="Login.java">
        ID<br>
        <INPUT type="text" name="username"><br><br>
        パスワード<br>
          <INPUT type="password" name="password"><br><br>
      <INPUT type="button" value="ログイン"">
    </FORM>
  </body>
</html>

 試したこと

FORM認証で無くても構いません。
何かいい方法があれば教えていただけると幸いです。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

現在どこまでサーブレット側ができているのか分からないのでざっくり説明になりますが、

スクリプトとは違うのでaction先は.javaという表記にはなりません。
現在のアクセス先URLもサーブレットであれば ローカルの場合、 http://localhost:8080/{プロジェクト名}/Login となっているはず。

action先は何か特別な指定をしていない限り下記ですね。

<FORM method="POST" action="${pageContext.request.contextPath}/Login">

submitした情報はサーブレット側(Login.java)のdoPost()メソッドで受け取れます。
request.getParameter() の引数に入力コントロールのnameに指定した値を渡します。

public void doPost(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException,IOException{

    String name=request.getParameter("username");    
    System.out.println("username:"+name); //入力したusernameが出力されるはず
}

今回は「GET」メソッドを使いましたが「POST」メソッドを使った場合は「doPost」メソッド内にまったく同じプログラムを記述すれば大丈夫です。 

あとは受け取った情報を元にDBに対してSELECT文を実行し、
取得できればセッションにログイン情報を保存リダイレクト、できなければエラーメッセージをsetしてそのままlogin.jspを表示。

少し調べれば出てくる情報ばかりなので、あとは調べた内容を元に試行してみるだけです。
質問するときのヒントにも書いてあります。

投稿前に自分で一度調べてみましょう。そして調べたことを元に、一度は自分でやってみましょう。

やってみないことには覚えませんので、上記参考に(リンクも散りばめてありますので)、自身で色々やってみてください。
一気にやろうとすると混乱するかもしれないので、下記のように対応項目を細分化して1個ずつおさえていくと良いです。

  • Login.javaのdoPost()にて入力した情報を受け取り、画面出力する
  • DBに接続する
  • SELECT文でデータを取得する
  • 取得したデータが意図したデータか出力して確認する
  • リダイレクトする
  • セッションに情報を保存して出力する
  • リダイレクトした先に保存したセッション情報を出力する

上記を併せて、やりたいことを構成する。
※入力チェックも入れたければ適宜入れてください。

失敗したとしてもプログラムが関知している範囲の中でエラーメッセージが画面に出力されるだけで、
PCが壊れたりそういうような悪影響は(意図的にそのようにプログラムをしない限りは)まずありません。
プログラミングに限らずですが、失敗しただけ技術力が身に付きます。

がんばってください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/10 22:35

    返信遅くなりましたが
    無事できました!
    ありがとうございます!

    キャンセル

  • 2018/06/10 22:40

    解決したようで何よりですが、
    回答をどこまで理解できて、実際にご自身でどこまで実現できたか というところは気になりますね。

    https://teratail.com/help/question-tips#questionTips4-2
    > あなたの反応がなかったり、お礼の言葉だけだったりすると、回答者は「本当に理解してもらえたのか」、「本当に回答はあっていたのか」がわかりません。
    せっかくあなたのために時間をかけて解決の手伝いをしてくれたのに、スッキリしない気持ちにさせてしまいます。
    あなたがどのアドバイスを元に、どのように解決できたのかをお礼とともに伝えましょう。

    キャンセル

  • 2018/06/11 00:45

    申し訳ございません。
    このサイトを利用し始めたのが最近でして・・・・。
    mts10806さんの言う通り、doPostから初めて
    調べながら手順を踏んでいきまして、しっかりと
    FORM認証のログインページを作ることができました。
    お時間を割いて頂いたにも関わらず、遅い返信となり誠に申し訳ありませんでした。
    ありがとうございます。

    キャンセル

  • 2018/06/11 06:01

    勘違いさせてたら申し訳ないですが、怒ってるわけではありませんので、大丈夫ですよ。
    常時張り付いてやっている人はそうそういないと思いますしね。
    私が提示リンク「質問するときのヒント」は課題解決を迅速にしたりみんなが気持ちよく利用するための手順みたいなものなので、お時間あるときにご一読ください。

    ひとまず解決できたようで何よりです。

    キャンセル

+1

以下のサイトとか参考にしてみてはどうでしょうか?
JavaDrive - FORM認証

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13497questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    5694questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • servlet

    455questions

    Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。