实现用户登录功能
登录界面使用了验证码,代码无需自己写,到网络上搜索jar包就行。自己能力不够不但效果不好,还花时间,所以建议直接使用网络资源。博客不能上传jar类型文件,验证码jar包放云盘了。链接:http://pan.baidu.com/s/1c2liv9u 密码:vu1s
JSP登录页面,userlogin.jsp
<%@ 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>用户登录界面</title>
<script type="text/javascript">
function changeCode(){
//获取验证码元素
var checkcode = document.getElementById("checkcode");
checkcode.src="/UserManage/CodeServlet?time="+new Date().getTime();
}
</script>
</head>
<body>
<form action="/UserManage/UserLoginServlet" method="post">
<table align="center" border="1" style="border-collapse:collapse;">
<tr>
<td colspan="4" align="center">用户登录</td>
</tr>
<tr height="40px">
<td>用户账户:</td>
<td colspan="3"><input type="text" name="userAccount" size="20" align="left"></td>
</tr>
<tr height="40px">
<td >用户密码:</td>
<td colspan="3"><input type="password" name="userPassword" size="20" align="left"></td>
</tr>
<!-- </table>
<table align="center"> -->
<tr height="40px">
<td>验证码:</td>
<!-- <td><input type="text" name="code" size="3" align="left"></td>
<td><a href="#" οnclick="changeCode()">换一换</a></td>
<td><img id=checkcode alt="验证码" src="/UserManage/CodeServlet" οnclick="changeCode()"/></td>
-->
<td colspan="3">
<input type="text" name="code" size="3" align="left">
<a href="#" οnclick="changeCode()">换一换</a>
<img id=checkcode alt="验证码" src="/UserManage/CodeServlet" οnclick="changeCode()"/>
</td>
</tr>
<!-- </table>
<table align="center"> -->
<tr>
<td colspan="4" align="center">
<input type="submit" value="登录">
<input type="button" value="注册"
οnclick="window.location.href='/UserManage/userregister.jsp'">
<input type="button" value="恢复账号"
οnclick="window.location.href='/UserManage/UserRecoverServlet'">
<a href="/UserManage/RecoverPWDServlet"><font >忘记密码?</font></a>
</td>
</tr>
</table>
<table align="center">
<tr>
<td align="center"><font color="RED">
<%
String UDmsg = (String) request.getAttribute("UDmsg");
String usermsg = (String) request.getAttribute("usermsg");
String codemsg = (String) request.getAttribute("codemsg");
if(UDmsg != null){
out.println(UDmsg);
}else if(usermsg != null){
out.println(usermsg);
}else if(codemsg != null){
out.println(codemsg);
}
%>
</font></td>
</tr>
</table>
<br>
</form>
</body>
</html>登录Servlet,UserLoginServlet.java
package servlet;
import java.io.IOException;
import java.util.ArrayList;
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 dao.UserDao;
import entity.User;
/**
* 用户登录验证servlet
*/
@WebServlet("/UserLoginServlet")
public class UserLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
//doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
//PrintWriter out = resp.getWriter();
resp.setHeader("pragma", "no-cache");
resp.setHeader("cache-control", "no-cache");
resp.setDateHeader("expires", 0);
HttpSession session = req.getSession();
//获取用户表单数据
String userAccount = req.getParameter("userAccount");
String userPassword = req.getParameter("userPassword");
String code = req.getParameter("code");
String scode = (String) session.getAttribute("scode");
//实例化UserDao对象
UserDao ud = new UserDao();
User user = null;
String userDisplay = ud.judgeUserDisplay(userAccount);
//用户登录验证处理
String path = resp.encodeURL("userlogin.jsp");//如果验证失败,返回登录界面
if(userDisplay == null){
String UDmsg = "很抱歉,用户不存在!您或许需要重新注册,谢谢!";
req.setAttribute("UDmsg", UDmsg);
req.getRequestDispatcher(path).forward(req, resp);
}else if(userDisplay.equals("off")){
String UDmsg = "很抱歉,用户已被删除!您或许需要找回,谢谢!";
req.setAttribute("UDmsg", UDmsg);
req.getRequestDispatcher(path).forward(req, resp);
}else if((user=ud.judgeUserPassword(userAccount,userPassword))==null){
String usermsg = "用户名或密码错误,请确认!";
req.setAttribute("usermsg", usermsg);
req.getRequestDispatcher(path).forward(req, resp);
}else if(!code.equalsIgnoreCase(scode)){
String codemsg = "验证码错误,请确认!";
req.setAttribute("codemsg", codemsg);
req.getRequestDispatcher(path).forward(req, resp);
}else if(user != null){//如果账号密码正确,跳转到用户管理界面
//向session中添加user对象
String userAccount2 = user.getUserAccount();
session.setAttribute("userAccount", userAccount2);
session.setAttribute("user", user);
//获取用户列表
ArrayList<User> list = ud.selectNotDeleteList();
req.setAttribute("list", list);
//转发到用户管理界面
String path1 = resp.encodeURL("userlist.jsp");
req.getRequestDispatcher(path1).forward(req, resp);
//String path1 = resp.encodeURL(req.getContextPath()+"/userlist.jsp");
//resp.setHeader("refresh", "1;url="+path1);
//resp.sendRedirect(path1);
}
}
}验证码Servlet,CodeServlet.java
package util;
import java.io.IOException;
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 cn.dsna.util.p_w_picpaths.ValidateCode;
/**
* 用户登录验证码
*/
@WebServlet("/CodeServlet")
public class CodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//生成验证码
ValidateCode vc = new ValidateCode(80, 20, 4, 9);
//向session中保存验证码,用于登录输入验证码判断
request.getSession().setAttribute("scode", vc.getCode());
//输出验证码
vc.write(response.getOutputStream());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}数据库操作--判断用户是否存在方法:
/**
* 判断用户是否存在
* @param userAccount 用户账号
* @return 用户显示状态on或off
*/
public String judgeUserDisplay(String userAccount) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//查询数据库比对用户信息
conn = DBUtils.getConnection();
String sql = "SELECT * FROM users WHERE user_account=?";
ps = conn.prepareStatement(sql);
//为?赋值
ps.setString(1, userAccount);
rs = ps.executeQuery();
//提取用户信息,不能直接rs.getString("user_display")抽取。
User user = new User();
while(rs.next()){
user.setUserId(rs.getInt("user_id"));
user.setUserName(rs.getString("user_name"));
user.setUserAccount(rs.getString("user_account"));
user.setUserPassword(rs.getString("user_password"));
user.setUserDisplay(rs.getString("user_display"));
user.setUserDeleteTime(rs.getString("user_deleteTime"));
}
//比对用户显示状态
if("on".equals(user.getUserDisplay())){
return "on";
}else if("off".equals(user.getUserDisplay())){
return "off";
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放资源
DBUtils.closeAll(rs, ps, conn);
}
return null;
}数据库操作--验证用户密码方法:
/**
* 判断用户密码是否正确功能
* @param userAccount 用户账户
* @param userPassword 用户密码
* @return User对象
*/
public User judgeUserPassword(String userAccount, String userPassword) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
User user = null;
try {
//查询数据库比对用户信息
conn = DBUtils.getConnection();
String sql = "SELECT * FROM users WHERE user_account=? AND user_password=?";
ps = conn.prepareStatement(sql);
//为?赋值
ps.setString(1, userAccount);
ps.setString(2, userPassword);
rs = ps.executeQuery();
//如果用户信息正确,实例化user对象
while(rs.next()){
user = new User();
user.setUserId(rs.getInt("user_id"));
user.setUserName(rs.getString("user_name"));
user.setUserAccount(rs.getString("user_account"));
user.setUserPassword(rs.getString("user_password"));
user.setUserDisplay(rs.getString("user_display"));
user.setUserDeleteTime(rs.getString("user_deleteTime"));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放资源
DBUtils.closeAll(rs, ps, conn);
}
return user;
}实现用户登录功能完成,以后会写出更完善的代码的。
转载于:https://blog.51cto.com/one2thr/1962944