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

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

ただいまの
回答率

89.10%

取得したセッション情報をログとして出力させたい

解決済

回答 1

投稿 編集

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

ypk

score 24

初めまして。
現在サーブレットの学習をしているものです。

現在、Login.javaにて、ログインの成功時にEclipseのコンソールにUserDAOにて取得した情報を出力させたいと考えています。

出力させたい情報は以下の通りです。

            info.setloginid("000014");//loginidの値
            info.setadmin(0);//管理者フラグの値
            info.setname("tarou");//名前

上記3つの情報をセッション変数userに格納し、それをLogin.javaにて「上記3つの情報を取得できている」ということをログで示したいと考えています

イメージとしては、以下の写真のように

イメージ説明

outActionLog メソッドに、ログに出力したい内容を引数として渡すことで、ログ出力ができたらと考えています。

しかし、取得したセッション情報を、ログにどうやって出力をすればよいのかがわかりません。

どなたかお力を貸していただけると嬉しいです。

どうぞよろしくお願いいたします。

▼過去の質問
https://teratail.com/questions/273094

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("UTF-8"); %>
<% String dbConnectionError = (String)request.getAttribute("dbConnectionError"); %>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

                   <% if(dbConnectionError != null){ %>
                <p><font color="red"><%= dbConnectionError %></font></p>
                <%} %>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="exam.LoggerTester" %>
<% request.setCharacterEncoding("UTF-8"); %>
<% String loginErrorMessage = (String)request.getAttribute("loginErrorMessage"); %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
            <title>書籍管理システム-<ログイン></title>
            <link rel="stylesheet" href="header.css">
    </head>

<div class="container">
    <header><div class="header_logo_font">
<p>書籍管理システムログイン</p>
</div>
</div><hr>
</header>
    <body>

    <%
     LoggerTester lt = new LoggerTester();
     lt.outActionLog("login.jsp", "処理開始");
    %>

        <div class="body">
        <div class="content">
          <div align="center">
              <table border="0">
                  <form action="Login" method="POST">

                  <div class="break">
                  <font color="#fff">空欄作成のために使用。画面に映りません。</font>
                  </div>

                  <div class="break">
                  <font color="#fff">空欄作成のために使用。画面に映りません。</font>
                  </div>

                <center>
                   <% if(loginErrorMessage != null){ %>
                <p><font color="red"><%= loginErrorMessage %></font></p>
                <%} %>
                </center>
                  <div class="break">
                  <font color="#fff">空欄作成のために使用。画面に映りません。</font>
                  </div>

                     <p>ユーザーID
                     <input class="center" type="text" name="user_id" value="" size="24">
                     <p>パスワード
                    <input class="center" type="password" name="password" value="" size="24">
                    <br><br>
                     <input class="login" type="submit" name="login" value="ログイン"></div>


                  </form>
              </table>

    </div>
    </div>
    </div>
    </body>

<footer>
<hr>

</div>
</html>
package dao;

import java.io.Serializable;
import java.sql.SQLException;

public class UserDAO implements Serializable {

    //アクセサメソッド
    private String _loginid;
    private String _userpassword;
    private int _admin;
    private String _name;

    public void setloginid(String loginid) {
        this._loginid = loginid;
    }
    public String getloginid() {
        return this._loginid;
    }

    public void setuserpassword(String userpassword) {
        this._userpassword = userpassword;
    }
    public String getuserpassword() {
        return this._userpassword;
    }

    public void setadmin(int admin) {
        this._admin = admin;
    }
    public int getadmin() {
        return this._admin;
    }

    public void setname(String name) {
        this._userpassword = name;
    }
    public String getname() {
        return this._name;
    }



//セットした情報を取得
    public  ArrayList<UserDAO> selectUser(String loginid, String userpassword)
            throws ClassNotFoundException,SQLException{



        if("000014".equals(loginid) && "aaaaa".equals(userpassword)) {

            ArrayList<UserDAO> user = new ArrayList<UserDAO>();

            UserDAO info = new UserDAO();
            info.setloginid("000014");
            info.setadmin(0);
            info.setname("tarou");
            user.add(info);

            // 戻り値の設定
            return user;


        }else {

            return null;

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • dodox86

    2020/06/30 09:36

    「ログを出力」とは、どこに出力されたいのでしょう。標準エラー出力?(たいてい、WEBサーバーのエラーログ)、データベース?、ローカルのファイル? log4jを使って、とか? 様々な出力先、方法があります。

    キャンセル

  • ypk

    2020/06/30 09:59

    ご指摘ありがとうございます。
    ご提示いただいた中ですと、今回私が出力をしたい場所は標準エラー出力に該当すると思います。outActionLog メソッドに、ログに出力したい内容を引数として渡すことで、ログ出力がEclipseの写真のコンソールのようにログの出力ができたらと思いました。

    キャンセル

  • dodox86

    2020/06/30 11:15

    Eclipseのコンソールは分かりませんが、標準エラー出力であれば、
    System.err.println("標準エラー出力に出したい文字列"); で出てくると思います。サーブレットであればたいていエラーログに出力される内容です。

    キャンセル

  • ypk

    2020/06/30 11:39

    ありがとうございます。
    やってみます

    キャンセル

回答 1

checkベストアンサー

0

サーブレットには標準で log(出力する文字列) や log(出力する文字列, throwable)の機能がありますので、こちらを使うことも可能かと。

(logメソッドは サーブレットの親クラスである GenericServlet に実装されています )

logメソッドをそのまま使うと、出力したサーブレットクラス名が必ず出ますので、それを回避する場合は、

getServletContext().log(...) 


が使えます。

ただしいずれもサーブレット(ないしはJSP)のみで使えるものです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/06/30 13:19

    ありがとうございます。

    log("user");

    というソースコードを追加した結果、

    情報: exam.Login: user [火 6月 30 13:14:40 JST 2020]

    というログがコンソールに出力されました。

    なお、私の認識では、このuserには以下のセッション情報が格納されているものと認識しています。


    info.setloginid("000014");
    info.setadmin(0);
    info.setname("tarou");


    つまり、userの中身である、「上記3つの情報が格納されている」ということがログの出力で確認ができると嬉しいのですが、そういったことは可能でしょうか。可能でしたらどのようにすればよいのでしょうか。

    お手数をおかけしますが、どうぞよろしくお願いいたします。

    キャンセル

  • 2020/06/30 21:46

    logの中身には文字列を格納しますので、log(user)とした場合は、UserクラスがtoString()にて出力したい内容を記述します。なお、EclipseなどのIDEからtoString()メソッドを自動生成した方が間違いはありません。

    キャンセル

  • 2020/07/01 11:09

    ご丁寧にありがとうございます。
    どうぞよろしくお願いいたします。

    キャンセル

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

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