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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

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

Q&A

解決済

2回答

4265閲覧

JAVAを使ったログインシステム

EVE-A

総合スコア11

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

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

0グッド

0クリップ

投稿2017/01/28 22:34

###前提・実現したいこと
初心者なのですが、
サーブレットとクッキーを使ったログインシステムを作っています。
うまい事いかないので力を貸していただけないでしょうか?
よろしくお願いします。

内容としては、
JSP(login.jsp)

servlet(Login_serv.java)

JSP(menu.jsp)

ログイン画面でIDとパスワード入力しログインButtonを押すとサーブレットに遷移しIDとパスワードをOracleで検索し一致すればメニュー画面へ遷移しSQLで取得した名前を使って「ようこそ○○さん」という表示をし、一致しなければログイン画面に遷移し「一致しません」というアラートメッセージを出したいです。
また、ログイン画面に「次回の入力を省略する」とメニュー画面のログアウトも付けたいと思っております。

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

login.jsp <%@page import="java.net.URLDecoder"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>login</title> </head> <body> <% String strPath = request.getContextPath(); Cookie[] cooks = request.getCookies(); String logout = request.getParameter("logout"); String userName = null; if( cooks != null ){ String strCookName = ""; for(int i = 0; i < cooks.length ; i++ ){ strCookName = cooks[i].getName(); if( strCookName.equals("name") ){ if (logout == null || logout.length() == 0) { userName = URLDecoder.decode(cooks[i].getValue()); } else { cooks[i].setMaxAge(0); cooks[i].setPath("/"); response.addCookie(cooks[i]); } } } } %> <div id="wrapper"> <h2>ログイン</h2> <form action="<%= strPath %>/servlet/test.Login_serv" method="post"> ID<br /> <input type="text" name="txtId" /><br /> パスワード<br /> <input type="text" name="txtPass" /><br /> <% String strMsg = (String)session.getAttribute("msg"); if(strMsg != null){ out.println(strMsg); session.removeAttribute("msg"); } %> <p id="check"><b><input type="checkbox" name="skipInput" value="skipInput" checked="checked">※ 次回の入力を省略する</b></p> <input type="submit" value="ログイン" /> <input type="reset" value="リセット" /> </form> </div> </body> </html> ``` ``````ここに言語を入力 Login_serv.java package test; import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class Login_serv extends HttpServlet{ private ServletContext session; protected void doPost (HttpServletRequest req, HttpServletResponse res) throws IOException,ServletException{ func(req,res); } protected void doGet (HttpServletRequest req, HttpServletResponse res) throws IOException,ServletException{ func(req,res); } protected void func (HttpServletRequest req, HttpServletResponse res) throws IOException,ServletException{ req.setCharacterEncoding("UTF-8"); //DB連携(Oracle) Connection con = null; Statement stmt = null; ResultSet rs = null; String strId = ""; strId = req.getParameter("txtId"); String strPass = ""; strPass = req.getParameter("txtPass"); String skipInput = ""; skipInput = req.getParameter("skipInput"); String strMsg = ""; String strPage = "menu.jsp"; try{ Class.forName("oracle.jdbc.driver.OracleDriver"); con = DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:xe", "system", "system"); stmt = con.createStatement(); String strSQL = "select f_name from t_user where f_id = ? and f_pass = ?"; PreparedStatement ps = con.prepareStatement(strSQL); ps.setString(1, strId); ps.setString(2, strPass); rs = ps.executeQuery(); if(rs.next()){ String strName = rs.getString("f_name"); session.setAttribute("name", strName); strPage = "menu.jsp"; if (skipInput != null && skipInput.equals("skipInput")) { Cookie NameCookie = new Cookie("name", URLEncoder.encode(strName)); //有効時間の設定 NameCookie.setMaxAge(60); NameCookie.setPath("/"); res.addCookie(NameCookie); } } else { if ((strId != null && strId.length() > 0) || (strPass != null && strPass.length() > 0)) { //ユーザIDかパスワードが不一致 session.setAttribute("msg", "※ユーザID、またはパスワードが違います。"); } } }catch (ClassNotFoundException e) { strMsg += "ドライバ:"; }catch (SQLException e) { strMsg += "SQL:"+e.getMessage(); }catch (Exception e) { strMsg += "???"; } finally { try { if(rs != null){ rs.close(); } if(stmt != null){ stmt.close(); } if(con != null){ con.close(); } } catch (Exception e) { } } req.setAttribute("msg", strMsg); //サーブレットからJSPに転送する。 // ServletContextインタフェース ServletContext sc = null; sc = getServletContext(); sc.getRequestDispatcher ("/jsp/login.jsp").forward(req, res); } } ``` ``````ここに言語を入力 menu.jsp <%@page import="java.net.URLDecoder"%> <%@page import="java.net.URLEncoder"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>menu</title> </head> <body> <% request.setCharacterEncoding("UTF-8"); String strPath = request.getContextPath(); String strMsg = ""; Cookie cookie[] = request.getCookies(); if(cookie != null){ for(int i=0; i<cookie.length;i++){ String cName = cookie[i].getName(); if(cName.equals("name")){ strMsg = "ようこそ" +URLDecoder.decode(cookie[i].getValue())+"さん"; } } if(strMsg == ""){ strMsg = "nameクッキーがありません"; } }else{ strMsg = "クッキーがありません"; } %> <div id="wrapper"> <%= strMsg %> <form action="/test/jsp/login.jsp"> <input type="hidden" name="logout" value="logout" /> <input type="submit" value="ログアウト" style="width:px; height:px" /> </form> </div> </body> </html> ``` ###試したこと 一通りのコードを書いてやってみたのですがエラーは発生せず遷移ログイン画面が更新するだけです。仮に、サーブレットで全てメニュー画面に遷移するように指定すると、メニュー画面に遷移し「nameクッキーがありません」となります。 サーブレットでSQL検索し検索された値が次のコードにうまくデータがセットされてないように思います。 データの受け渡しや受け取りについていまいち自分でもよくわからいのでそこを踏まえて教えていただけると助かります。 よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

IDとパスワードをCHARで登録していた為、うまく動いてませんでした。
いろいろ解決策はあるようですが今回は、VARCHAR2に切り替えて再度プログラムを修正すると動くようになりました。

http://www.cat-ears.net/?p=597

投稿2017/01/31 14:10

EVE-A

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ChromeブラウザでF12を押す。Applicationタブを押す。Cookiesを押して見る。
これでちゃんとクッキーに保存されているか見えますよ。

投稿2017/01/31 00:52

編集2017/01/31 00:55
tantanegg

総合スコア213

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EVE-A

2017/01/31 14:07

初めて知りました!ありがとうございます。 とりあえず動くようになったのでクッキーに保存されているか確認してみましたら、ありました! 情報ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問