【Java】创建登录应用程序
创建Java登录应用程序
创建一个程序,从JSP的登录页面输入用户名和密码,通过点击注册按钮来成功登录并转到菜单页面。
JSP页面
<form name="myform" action="" method="post">
<p>ユーザーID</p>
<p><input type="text" name=user_id value=""></p>
<p>パスワード</p>
<p><input type="text" name=pass value=""></p>
<input type="button" value="ログイン" name="login" onclick="buttonclick()">
</form>
JavaScript
JavaScript (简称 JS)
当在JSP页面上点击按钮时,将执行input标签的onclick属性buttonclick()的处理,并调用LoginServlet。
<script>
function buttonclick() {
document.myform.action = "<%=request.getContextPath()%>/LoginServlet";
document.myform.submit();
}
</script>
Servlet
如果能够读取用户ID和密码,将其保存到会话范围中并显示菜单页面。
如果与数据库中的值不符,则显示错误页面。
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
//リクエストパラメータを取得しuser_idとpassを変数に格納する。
String uid = request.getParameter("user_id");
String pass = request.getParameter("pass");
//beanクラスのUserをインスタンス
User user = new User(uid, pass);
//データーベース接続処理 コネクションプーリング
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/データーベース名");
con = ds.getConnection();
//データベースに登録してあるテーブルからユーザーIDとパスワードを取得
String sql = "SELECT * FROM テーブル名 WHERE カラム名 = ? AND カラム名 = ?";
ps = con.prepareStatement(sql);
ps.setString(1, uid);
ps.setString(2, pass);
rs = ps.executeQuery();
//一致する行があればメニュー画面へフォワード
if (rs.next()) {
session.setAttribute("LoginInfo", user);
RequestDispatcher dispatch = request.getRequestDispatcher("/WEB-INF/Menu.jsp");
dispatch.forward(request, response);
//なければエラー画面へフォワード
} else {
// ログインエラー
RequestDispatcher dispatch = request.getRequestDispatcher("/WEB-INF/Error.jsp");
dispatch.forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
//
}
rs = null;
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
//
}
ps = null;
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
//
}
con = null;
}
}
}
}
总结
在创建具有登录功能的应用程序时,我再次意识到需要掌握各种知识,如获取请求参数、连接池和SQL语句等。我希望在逐个功能进行复习的同时进行总结。