session登录和退出
用户登录存到session中整个会话都可以访问到,退出清楚session域中的值
页面代码
在WebContent下创建一个login文件夹在login文件夹中创建login.jsp、main.jsp、other.jsp。
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页</title>
</head>
<body>
<!-- 相对路径 -->
<!-- <form action="../LoginServlet" method="post"> -->
<!-- 绝对路径 -->
<form action="/11_session/LoginServlet" method="post">
<p>账号:<input type="text" name="username" /></p>
<p>密码:<input type="password" name="password" /></p>
<p>
<!-- <input type="checkbox" name="rememberMe" />记住密码 -->
<input type="submit" value="登录" />
</p>
</form>
</body>
</html>
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<div>
<span style="float: left;">${user.nickName },欢迎登录</span>
<a style="float: right; margin-right: 10px;" href="/11_session/LogoutServlet">
退出
</a>
<div style="clear:both;"></div>
</div>
<br />
<br />
<br />
<a href="other.jsp">其他页</a>
</body>
</html>
other.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>其他页面</title>
</head>
<body>
<h1>${user.nickName },其他页面</h1>
<a href="main.jsp">回到主页</a>
</body>
</html>
后台代码
后台登录代码
导jar包
commons-dbutils-1.6.jar
druid-1.1.10.jar
jstl-1.2.jar
mysql-connector-java-5.1.47.jar
创建user
package com.lanou3g.bean;
public class User {
private Integer id;
private String nickName;
private String userName;
private String password;
private String createtime;
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
@Override
public String toString() {
return "User [id=" + id + ", nickName=" + nickName + ", userName=" + userName + ", password=" + password
+ ", createtime=" + createtime + "]";
}
}
创建utils包
(以后utils包中的工具类就不展示代码了)
创建CookieUtil
package com.lanou3g.utils;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
public class CookieUtil {
/**
* 按照cookie的key获取对应的value
* @param key
* @param req
* @return
*/
public static String getCookieValue(String key, HttpServletRequest req) {
Cookie cookie = getCookie(key, req);
return cookie != null ? cookie.getValue() : null;
}
/**
* 按照cookie的key获取对应的cookie对象
* @param key
* @param req
* @return
*/
public static Cookie getCookie(String key, HttpServletRequest req) {
Cookie[] cookies = req.getCookies();
if (cookies == null) {
return null;
}
for (Cookie cookie : cookies) {
if (cookie.getName().equals(key)) {
return cookie;
}
}
return null;
}
}
创建DateUtils
package com.lanou3g.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
private final static String PATTERN_NORMAL = "yyyy-MM-dd HH:mm:ss";
public static String formatDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_NORMAL);
return sdf.format(date);
}
public static Date parseDate(String dateStr) {
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_NORMAL);
try {
date = sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
创建DBTools
package com.lanou3g.utils;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 数据库相关工具类
*
*
*/
public class DBTools {
public static final String JDBC_URL = "jdbc:mysql://localhost:3306/jsp_01?characterEncoding=utf8";
public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
public static final String JDBC_USERNAME = "root";
public static final String JDBC_PASSWORD = "123456";
private static DruidDataSource ds;
static {
try {
Class.forName(JDBC_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取数据源
* @return
*/
public static DataSource getDataSource() {
if(ds != null) {
return ds;
}
DruidDataSource ds = new DruidDataSource();
ds.setUrl(JDBC_URL);
ds.setUsername(JDBC_USERNAME);
ds.setPassword(JDBC_PASSWORD);
ds.setMaxActive(5);
ds.setMinIdle(1);
return ds;
}
public static Connection getConnection() throws SQLException {
return getDataSource().getConnection();
}
public static void main(String[] args) throws SQLException {
DataSource ds = DBTools.getDataSource();
System.out.println(ds.getConnection());
}
}
创建StringUtils
package com.lanou3g.utils;
public class StringUtils {
/**
* 判断字符串是否为空
* @param str
* @return
*/
public static boolean isEmpty(String str) {
return str == null || str.equals("") || str.trim().equals("");
}
}
创建接口IUSerDao
package com.lanou3g.dao;
import com.lanou3g.bean.User;
public interface IUserDao {
User findUserByUserName(String username);
}
创建接口IUserDao的实现类(UserDaoImpl)
package com.lanou3g.dao.impl;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.lanou3g.bean.User;
import com.lanou3g.dao.IUserDao;
import com.lanou3g.utils.DBTools;
public class UserDaoImpl implements IUserDao {
@Override
public User findUserByUserName(String username) {
String sql = "select * from user where username=?";
QueryRunner qr = new QueryRunner(DBTools.getDataSource());
User user = null;
try {
user = qr.query(sql, new BeanHandler<User>(User.class), username);
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
}
LoginServlet.java
登录
package com.lanou3g.web;
import java.io.IOException;
import java.io.PrintWriter;
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 com.lanou3g.bean.User;
import com.lanou3g.dao.IUserDao;
import com.lanou3g.dao.impl.UserDaoImpl;
import com.lanou3g.utils.StringUtils;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
/**
*
*/
IUserDao userDao = new UserDaoImpl();
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
// 响应响应编码
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
//空值检查
if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)) {
out.println("<script>alert('用户名获密码不能为空!');location.href='login/login.jsp';</script>");
return;
}
// 检查账号合法性
User user = userDao.findUserByUserName(username);
if(user == null) {
// 账号未注册
out.println("<script>alert('账号不存在,请重新登录!');location.href='login/login.jsp';</script>");
return;
}
if(!password.equals(user.getPassword())) {
// 密码错误
out.println("<script>alert('用户名或密码错误,请重新登录!');location.href='login/login.jsp';</script>");
return;
}
// 将用户登录信息存储到session域
req.getSession().setAttribute("user", user);
// 跳转到主页
resp.sendRedirect("login/main.jsp");
}
}
LogoutServlet
退出
package com.lanou3g.web;
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;
@WebServlet("/LogoutServlet")
public class LogoutServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 让session失效
/*
* 如果不用下面这行代码,你点完退出后session还存在,
* 如何证明呢?你直接访问项目中的other.jsp就可以看出来
*/
req.getSession().invalidate();
// 跳转到登录
resp.sendRedirect("login/login.jsp");
}
}
在url中输入地址根据数据库中的信息进行登录
main主页
其他页
当退出后,直接访问other页面可以看到session销毁