今回は、「Webシステムのログイン(4)―シンプルなログインの作り方―」です。
 ユーザーがログインする画面を見てみましょう。
■動画はこちら
■動画で使用しているソースコード
 数が多いので、動画内で使用しているソースコードのうち、ログインとログアウトを載せています。
 他に欲しいソースコードがありましたら、youtubeのコメント欄へどうぞ。
ログイン
サーブレット(LoginServlet.java)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package yurufuwa.prog.sample; import java.io.IOException; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; public class LoginServlet extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         //ログインページを表示         ServletContext sc = getServletContext();         RequestDispatcher rd = sc.getRequestDispatcher("/WEB-INF/jsp/login.jsp");         rd.forward(req, resp);     }     @Override     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         //入力パラメーターを取得         String userId = req.getParameter("txtUserId");         String password = req.getParameter("txtPassword");         //ユーザIDとパスワードのチェック         LoginChecker checker = new LoginChecker();         if( checker.isValid(userId, password) ) {             //セッションを作成して、ユーザID、ユーザ名を追加             HttpSession session = req.getSession(true);             session.setAttribute("USER_ID", userId);             session.setAttribute("USER_NAME", checker.getUserName());             //メニューへリダイレクト             resp.sendRedirect("./menu");         }         else {             //ログインのエラーページを表示             ServletContext sc = getServletContext();             RequestDispatcher rd = sc.getRequestDispatcher("/WEB-INF/jsp/login_err.jsp");             rd.forward(req, resp);         }     } } | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package yurufuwa.prog.sample; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.naming.InitialContext; import javax.sql.DataSource; public class LoginChecker {     private String userName = null;     public boolean isValid(String userId, String password) {         boolean ret = false;         Connection conn = null;         try {             InitialContext ctx = new InitialContext();             DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");             conn = ds.getConnection();             //SQLを発行(完全一致で検索)             PreparedStatement pstmt = conn.prepareStatement(                 "SELECT user_name FROM userinfo "                 + "WHERE user_id = ? and password = ?"             );             pstmt.setString(1, userId);             pstmt.setString(2, password);             ResultSet rs = pstmt.executeQuery();             //結果を取得             while(rs.next()) {                 userName = rs.getString(1);                 ret = true;             }             rs.close();             pstmt.close();         } catch(Exception e) {             e.printStackTrace();         } finally {             try {                 //接続を閉じる                 conn.close();             } catch(Exception e) {             }         }         return ret;     }     public String getUserName() {         return userName;     } } | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ログイン</title> <link href="./css/style.css" rel="stylesheet" /> </head> <body> <header class="header">     <div class="header_title">ログイン</div>     <div class="header_add"></div> </header> <main class="login"> <h2>ログイン</h2> <form action="./login" method="post">     <table>         <tr><td>ユーザID</td><td><input type="text" name="txtUserId" /></td></tr>         <tr><td>パスワード</td><td><input type="password" name="txtPassword" /></td></tr>     </table>     <br />     <input type="submit" value="ログイン" /> </form> </main> </body> </html> | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ログインエラー</title> <link href="./css/style.css" rel="stylesheet" /> </head> <body> <header class="header">     <div class="header_title">ログイン</div>     <div class="header_add"></div> </header> <main class="err">     <h2>ログインエラー</h2>     <p>ユーザID、または、パスワードが違います</p>     <a href="./login">ログインページに戻る</a> </main> </body> </html> | 
ログアウト
サーブレット(Sv18.java)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package yurufuwa.prog.sample; import java.io.IOException; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; public class LogoutServlet extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         //セッションを無効化         HttpSession session = req.getSession(false);         if(session != null) {             session.invalidate();         }         //ログアウトページへフォワード         ServletContext sc = getServletContext();         RequestDispatcher rd = sc.getRequestDispatcher("/WEB-INF/jsp/logout.jsp");         rd.forward(req, resp);     } } | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ログアウト</title> <link href="./css/style.css" rel="stylesheet" /> </head> <body> <header class="header">     <div class="header_title">ログアウト</div>     <div class="header_add"></div> </header> <main class="logout">     <h2>ログアウトしました</h2>     <a href="./login">ログインページに戻る</a> </main> </body> </html> | 
共通
web.xml
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" id="WebApp_ID" version="5.0">   <display-name>testWeb</display-name>   <servlet>     <servlet-name>Login</servlet-name>     <servlet-class>yurufuwa.prog.sample.LoginServlet</servlet-class>   </servlet>   <servlet>     <servlet-name>Menu</servlet-name>     <servlet-class>yurufuwa.prog.sample.MenuServlet</servlet-class>   </servlet>   <servlet>     <servlet-name>Logout</servlet-name>     <servlet-class>yurufuwa.prog.sample.LogoutServlet</servlet-class>   </servlet>   <servlet>     <servlet-name>Todofuken</servlet-name>     <servlet-class>yurufuwa.prog.sample.TodofukenServlet</servlet-class>   </servlet>   <servlet-mapping>     <servlet-name>Login</servlet-name>     <url-pattern>/login</url-pattern>   </servlet-mapping>   <servlet-mapping>     <servlet-name>Menu</servlet-name>     <url-pattern>/menu</url-pattern>   </servlet-mapping>   <servlet-mapping>     <servlet-name>Logout</servlet-name>     <url-pattern>/logout</url-pattern>   </servlet-mapping>   <servlet-mapping>     <servlet-name>Todofuken</servlet-name>     <url-pattern>/todofuken</url-pattern>   </servlet-mapping> </web-app> | 
| 1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="UTF-8"?> <Context>      <Resource         name="jdbc/mysql"          auth="Container"         type="javax.sql.DataSource"         factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"         maxActive="5" maxIdle="5" initialSize="5"         username="yuruku" password="fuwatto"         driverClassName="com.mysql.cj.jdbc.Driver"         url="jdbc:mysql://localhost/yuruku"/> </Context> | 














