はじめに
Javaを使って初めてアプリケーションを作成する人にむけて記事を書いてみようと思います。
ポートフォリオや、会社の研修課題作成の参考にしていただければ幸いです。
今回は、タスクマネージャーを作成します。
これを応用することで、ツイッタークローンの作成にも活かすことができます。
アプリケーションの機能ごとに記事を投稿していきます。
1.データベース作成
2.ログイン機能
3.タスクの登録機能
4.一覧表示
-ソート機能
-検索機能
5.編集機能
6.削除機能
7.排他制御について
*詳しい説明はコード内に書いてありますので、コピペする人は消して使ってください
実行環境
eclipse4.16.0
Tomcat9
Java11
目次
1.viewの作成
2.DAOの作成
3.サーブレットの作成
4.次回予告
viewの作成
*今回だけスタイリングにBootStrapを使用しています。
login.jsp
<body>
<!-- 入力エラーがあった場合には再度このページが開かれるのでその際になぜエラーになったのかをお知らせします。リクエストスコープデータ名errorの値を受け取る-->
<%
List<String> error = (List<String>)request.getAttribute("error");
%>
<div class="container mt-5">
<div class="row justify-content-center">
<h3>ログイン画面</h3>
</div>
<!-- errorを赤色で表示させる。-->
<%for(String er : error){ %>
<div class="row justify-content-center">
<p style="color:red"><%=er %></p>
</div>
<%} %>
<div class="row justify-content-center">
<!-- login-servletを指定して、入力データ(user_id, password)を送る-->
<form action="login-servlet" method="post">
<div class="form-group">
<label>ユーザID</label>
<input type="text" name="user_id" class="form-control" placeholder="User-ID">
</div>
<div class="form-group">
<label>パスワード</label>
<input type="password" name="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
<small class="form-text text-muted">We'll never share your Password with anyone else.</small>
</div>
<button type="submit" class="btn btn-outline-info">ログイン</button>
</form>
</div>
</div>
DAOの作成
サーブレットをすっきりさせたり、あとで変更をしやすくするためにDAOにてメソッドを定義してきます。
model.dao.UserDAO.java
/**
*このメソッドでは入力されたユーザIDからユーザの情報全部を取得するときなどに使います。
* ユーザIDを引数にユーザ情報を取得するメソッド
* @param user_id
* @return ユーザ情報
* @throws SQLException
* @throws ClassNotFoundException
*/
public UserBean getUser(String user_id) throws SQLException, ClassNotFoundException {
UserBean user = new UserBean();
//SQL文user_idを指定して、レコードを取得
String sql = "select * from m_user where user_id = ?";
//データベースへ接続
try(Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)){
//受け取ったuser_idをSQL文へ代入
pstmt.setString(1, user_id);
//SQL文を実行して実行結果を取得
ResultSet res = pstmt.executeQuery();
while(res.next()) {
//実行結果よりそれぞれのカラムの値を取得
String password = res.getString("password");
String user_name = res.getString("user_name");
//userオブジェクトへセット
user.setPassword(password);
user.setUser_id(user_id);
user.setUser_name(user_name);
}
return user;
}
}
/**
* ユーザIDを引数にユーザ名を取得するメソッド
* @param user_id
* @return ユーザ名
* @throws SQLException
* @throws ClassNotFoundException
*/
public String getUserName(String user_id) throws SQLException, ClassNotFoundException {
//SQL文User_idよりuser_nameを取得
String sql = "select user_name from m_user where user_id = ?";
//usre_nameの初期値をセット
String user_name ="不明";
//データベースへ接続
try(Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)){
//受け取ったuser_idをSQL文へ代入
pstmt.setString(1, user_id);
//SQL文を実行して実行結果を取得
ResultSet res = pstmt.executeQuery();
while(res.next()) {
//実行結果よりそれぞれのカラムの値を取得
user_name = res.getNString("user_name");
}
}
return user_name;
}
/**
* ログイン認証用メソッド
* @param user_id
* @param password
* @return boolean型でtrueならログイン可能 falseならログイン不可能
* @throws SQLException
* @throws ClassNotFoundException
*/
public boolean logincheck(String user_id, String password) throws SQLException, ClassNotFoundException {
//そもそも入力欄が空欄だった場合を除外する
if (user_id == null || user_id.length() == 0 || password == null || password.length() == 0){
return false;
}
//SQL文 入力されたuser_id, passwordを指定してレコードを取得
String sql = "select * from m_user where user_id = ? && password = ?";
//データベースへ接続
try (Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)){
pstmt.setString(1, user_id);
pstmt.setString(2, password);
ResultSet res = pstmt.executeQuery();
//SQL文の実行結果があれば、ユーザが存在するのでtrue。結果が無いということはそのユーザは登録されていないのでfalse
if(res.next()) {
return true;
} else {
return false;
}
}
}
サーブレットの作成
DAOで作成したメソッドを利用して、サーブレットを作成していきます。
Servlet.Login.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//リクエストパラメータの受け取り
request.setCharacterEncoding("UTF-8");
String user_id = request.getParameter("user_id");
String password = request.getParameter("password");
//DAOオブジェクト生成
UserDAO userdao = new UserDAO();
//sessionスコープ生成・
HttpSession session = request.getSession();
try {
boolean logincheck = userdao.logincheck(user_id, password);
if(logincheck) {
//-----------入力が正しかった時の処理---------------------------------------------------
//sessionスコープへログイン状況をセット
session.setAttribute("login", true);
//ログインユーザ名と情報を取得してsessionスコープへセット
String current_user_name = userdao.getUserName(user_id);
UserBean current_user = userdao.getUser(user_id);
session.setAttribute("current_user_name", current_user_name);
session.setAttribute("current_user", current_user);
session.setAttribute("current_user_id", user_id);
//メニューセッションへ転送
RequestDispatcher rd = request.getRequestDispatcher("menu-servlet");
rd.forward(request, response);
} else {
//--------入力が違った時の処理-----------------------------------------------------------
//空欄をチェック
List<String> error = new ArrayList<String>();
if(password.equals("")) {
error.add("パスワードが空欄です");
}
if(user_id.equals("")) {
error.add("ユーザIDが空欄です");
}
error.add("ユーザIDかパスワードに誤りがあります");
request.setAttribute("error", error);
//sessionスコープへログイン状況をセット(認証不可)
session.setAttribute("login", false);
//ログイン画面へ転送
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request, response);
}
//---------その他SQLなどのエラー--------------------------------------------------------------
}catch(SQLException | ClassNotFoundException e) {
e.printStackTrace();
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request, response);
}
}
次回予告
今回は、ログイン機能の実装をしてみました。
次回は、タスクの登録機能の実装をしていきます。