Servlet 中的登录系统
Login System in Servlet
我在 Servlet 的登录系统中遇到问题。
当我单击登录按钮时应该执行 DoLoginServlet 然后访问数据库并检查登录然后重定向到 userInfoView.jsp 。
但是当我单击按钮时出现错误。
主页:index.jsp
<a href="${pageContext.request.contextPath}/MyJsps/login.jsp" target="_blank"><img src="<c:url value="/images/login1.png"/>"
登录页面:login.jsp
<%@ page language="java" contentType="text/html; charset=windows-1256"
pageEncoding="windows-1256"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6 lt8"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="no-js ie7 lt8"> <![endif]-->
<!--[if IE 8 ]> <html lang="en" class="no-js ie8 lt8"> <![endif]-->
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->
<html lang="en" class="no-js">
<!--<![endif]-->
<head>
<meta charset="UTF-8" />
<!-- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> -->
<title>Login and Registration</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description"
content="Login and Registration Form with HTML5 and CSS3" />
<meta name="keywords"
content="html5, css3, form, switch, animation, :target, pseudo-class" />
<meta name="author" content="Codrops" />
<link rel="shortcut icon" href="<c:url value="../favicon.ico"/>">
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/demo.css"/>" />
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/style.css"/>" />
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/animate-custom.css"/>" />
</head>
<body>
<div class="container">
<!-- Codrops top bar -->
<!--/ Codrops top bar -->
<header>
<nav class="codrops-demos"></nav>
</header>
<section>
<div id="container_demo">
<!-- hidden anchor to stop jump http://www.css3create.com/Astuce-Empecher-le-scroll-avec-l-utilisation-de-target#wrap4 -->
<a class="hiddenanchor" id="toregister"></a> <a class="hiddenanchor"
id="tologin"></a>
<div id="wrapper">
<div id="login" class="animate form">
<form method="POST" action="/doLogin" autocomplete="on"> <!-- here--!>
<h1>Log in</h1>
<p>
<label for="username" class="uname" data-icon="u"> Your
email</label> <input id="username" name="username" required
type="email" placeholder="eg. /////@gmail.com" />
</p>
<p>
<label for="password" class="youpasswd" data-icon="p">
Your password </label> <input id="password" name="password" required
type="password" placeholder="eg. X8df!90EO" />
</p>
<p class="keeplogin">
<input type="checkbox" name="loginkeeping" id="loginkeeping"
value="loginkeeping" /> <label for="loginkeeping">Keep
me logged in</label>
</p>
<p class="login button">
<input type="submit" value="Login" />
</p>
<p class="change_link">
Not a member yet ? <a href="#toregister" class="to_register">Join
us</a>
</p>
</form>
</div>
DoLoginServlet Class:
package com.magician.project.servlets;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.magician.project.beans.UserAccount;
import com.magician.project.utils.DBUtils;
import com.magician.project.utils.MyUtils;
@WebServlet(name = "doLogin",urlPatterns = { "/doLogin" })
public class DoLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DoLoginServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String password = request.getParameter("password");
String rememberMeStr = request.getParameter("loginkeeping");
boolean remember= "Y".equals(rememberMeStr);
UserAccount user = null;
boolean hasError = false;
String errorString = null;
if (userName == null || password == null
|| userName.length() == 0 || password.length() == 0) {
hasError = true;
errorString = "Required username and password!";
} else {
Connection conn = MyUtils.getStoredConnection(request);
try {
user = DBUtils.findUser(conn, userName, password);
if (user == null) {
hasError = true;
errorString = "User Name or password invalid";
}
} catch (SQLException e) {
e.printStackTrace();
hasError = true;
errorString = e.getMessage();
}
}
// If error, forward to /login.jsp
if (hasError) {
user = new UserAccount();
user.setUserName(userName);
user.setPassword(password);
// Store information in request attribute, before forward.
request.setAttribute("errorString", errorString);
request.setAttribute("user", user);
// Forward to login.jsp
RequestDispatcher dispatcher= this.getServletContext().getRequestDispatcher("/MyJsps/login.jsp");
dispatcher.forward(request, response);
}
// If no error
// Store user information in Session
// And redirect to userInfo page.
else {
HttpSession session = request.getSession();
MyUtils.storeLoginedUser(session, user);
// If user checked "Remember me".
if(remember) {
MyUtils.storeUserCookie(response,user);
}
// Else delete cookie.
else {
MyUtils.deleteUserCookie(response);
}
// Redirect to userInfo page.
response.sendRedirect(request.getContextPath() + "/MyJsps/userInfoView.jsp");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
另一个问题:
以及我如何 运行 从主页而不是 login.jsp 登录 servlet class。
然后使用servlet 运行 login.jsp .
登录 servlet class :
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "login",urlPatterns = { "/login"})
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Forward to /loginView.jsp
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/MyJsps/login.jsp");
dispatcher.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
第一个问题:
<form method="POST" action="/doLogin" autocomplete="on">
将其更改为:
<form method="GET" action="${pageContext.request.contextPath}/doLogin" autocomplete="on">
第二个问题:
调用登录 servlet
<a href="${pageContext.request.contextPath}/login" target="_blank"><img src="<c:url value="/images/login1.png"/>"
我在 Servlet 的登录系统中遇到问题。 当我单击登录按钮时应该执行 DoLoginServlet 然后访问数据库并检查登录然后重定向到 userInfoView.jsp 。 但是当我单击按钮时出现错误。
主页:index.jsp
<a href="${pageContext.request.contextPath}/MyJsps/login.jsp" target="_blank"><img src="<c:url value="/images/login1.png"/>"
登录页面:login.jsp
<%@ page language="java" contentType="text/html; charset=windows-1256"
pageEncoding="windows-1256"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6 lt8"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="no-js ie7 lt8"> <![endif]-->
<!--[if IE 8 ]> <html lang="en" class="no-js ie8 lt8"> <![endif]-->
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->
<html lang="en" class="no-js">
<!--<![endif]-->
<head>
<meta charset="UTF-8" />
<!-- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> -->
<title>Login and Registration</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description"
content="Login and Registration Form with HTML5 and CSS3" />
<meta name="keywords"
content="html5, css3, form, switch, animation, :target, pseudo-class" />
<meta name="author" content="Codrops" />
<link rel="shortcut icon" href="<c:url value="../favicon.ico"/>">
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/demo.css"/>" />
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/style.css"/>" />
<link rel="stylesheet" type="text/css"
href="<c:url value="/css/animate-custom.css"/>" />
</head>
<body>
<div class="container">
<!-- Codrops top bar -->
<!--/ Codrops top bar -->
<header>
<nav class="codrops-demos"></nav>
</header>
<section>
<div id="container_demo">
<!-- hidden anchor to stop jump http://www.css3create.com/Astuce-Empecher-le-scroll-avec-l-utilisation-de-target#wrap4 -->
<a class="hiddenanchor" id="toregister"></a> <a class="hiddenanchor"
id="tologin"></a>
<div id="wrapper">
<div id="login" class="animate form">
<form method="POST" action="/doLogin" autocomplete="on"> <!-- here--!>
<h1>Log in</h1>
<p>
<label for="username" class="uname" data-icon="u"> Your
email</label> <input id="username" name="username" required
type="email" placeholder="eg. /////@gmail.com" />
</p>
<p>
<label for="password" class="youpasswd" data-icon="p">
Your password </label> <input id="password" name="password" required
type="password" placeholder="eg. X8df!90EO" />
</p>
<p class="keeplogin">
<input type="checkbox" name="loginkeeping" id="loginkeeping"
value="loginkeeping" /> <label for="loginkeeping">Keep
me logged in</label>
</p>
<p class="login button">
<input type="submit" value="Login" />
</p>
<p class="change_link">
Not a member yet ? <a href="#toregister" class="to_register">Join
us</a>
</p>
</form>
</div>
DoLoginServlet Class:
package com.magician.project.servlets;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.magician.project.beans.UserAccount;
import com.magician.project.utils.DBUtils;
import com.magician.project.utils.MyUtils;
@WebServlet(name = "doLogin",urlPatterns = { "/doLogin" })
public class DoLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DoLoginServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String password = request.getParameter("password");
String rememberMeStr = request.getParameter("loginkeeping");
boolean remember= "Y".equals(rememberMeStr);
UserAccount user = null;
boolean hasError = false;
String errorString = null;
if (userName == null || password == null
|| userName.length() == 0 || password.length() == 0) {
hasError = true;
errorString = "Required username and password!";
} else {
Connection conn = MyUtils.getStoredConnection(request);
try {
user = DBUtils.findUser(conn, userName, password);
if (user == null) {
hasError = true;
errorString = "User Name or password invalid";
}
} catch (SQLException e) {
e.printStackTrace();
hasError = true;
errorString = e.getMessage();
}
}
// If error, forward to /login.jsp
if (hasError) {
user = new UserAccount();
user.setUserName(userName);
user.setPassword(password);
// Store information in request attribute, before forward.
request.setAttribute("errorString", errorString);
request.setAttribute("user", user);
// Forward to login.jsp
RequestDispatcher dispatcher= this.getServletContext().getRequestDispatcher("/MyJsps/login.jsp");
dispatcher.forward(request, response);
}
// If no error
// Store user information in Session
// And redirect to userInfo page.
else {
HttpSession session = request.getSession();
MyUtils.storeLoginedUser(session, user);
// If user checked "Remember me".
if(remember) {
MyUtils.storeUserCookie(response,user);
}
// Else delete cookie.
else {
MyUtils.deleteUserCookie(response);
}
// Redirect to userInfo page.
response.sendRedirect(request.getContextPath() + "/MyJsps/userInfoView.jsp");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
另一个问题: 以及我如何 运行 从主页而不是 login.jsp 登录 servlet class。 然后使用servlet 运行 login.jsp .
登录 servlet class :
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "login",urlPatterns = { "/login"})
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Forward to /loginView.jsp
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/MyJsps/login.jsp");
dispatcher.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
第一个问题:
<form method="POST" action="/doLogin" autocomplete="on">
将其更改为:
<form method="GET" action="${pageContext.request.contextPath}/doLogin" autocomplete="on">
第二个问题: 调用登录 servlet
<a href="${pageContext.request.contextPath}/login" target="_blank"><img src="<c:url value="/images/login1.png"/>"