session登录和退出

news/2024/5/18 15:05:08 标签: session, servlet, cookie

session_0">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销毁
在这里插入图片描述


http://www.niftyadmin.cn/n/899439.html

相关文章

元组和字典的拆包(多值参数函数)

元组和字典的拆包 在定义函数的时候&#xff0c;之前传递的参数都是单值的&#xff08;数字&#xff0c;字符串等&#xff09;&#xff0c;现在来学习多值参数&#xff08;元组和字典&#xff09;的传递&#xff1a; *args&#xff0c;用来接收元组 *kwargs&#xff0c;用来…

ajax实现用户登录校验和注册校验用户名是否存在

案例一&#xff1a;实现用户登录用ajax校验 如果是使用ajax异步提交表单&#xff0c;action属性可以不写&#xff0c;或者值为空 需求&#xff1a; 登录时用ajax判断名字和密码是否出错&#xff0c;如果出错并给出提示。出错的状况有&#xff1a; 没有输入用户名和密码用户名密…

面向对象编程的三个特征

面向对象编程有三个特征&#xff0c;即&#xff1a;封装&#xff0c;继承和多态 1、封装 类把方法和属性封装在类中&#xff0c;可以供给对象来调用。 2、继承 子类可以继承父类的所有方法和属性&#xff0c;也可以引用super().对父类的方法进行重写&#xff0c;继承给我们…

过滤器Filter学习

过滤器fliter Filter 过滤器 &#xff0c; 其实就是对客户端发出来的请求进行过滤。 浏览器发出&#xff0c; 然后服务器派servlet处理。 在中间就可以过滤&#xff0c; 其实过滤器起到的是拦截的作用。 作用 对一些敏感词汇进行过滤统一设置编码自动登录 … 过滤器原理示意…

监听器Liistener学习

监听器Liistener学习 能做什么事&#xff1f; 监听某一个事件的发生。 状态的改变。 监听器的内部机制 其实就是接口回调. 接口回调 需求&#xff1a; A在执行循环&#xff0c;当循环到5的时候&#xff0c; 通知B。 事先先把一个对象传递给 A &#xff0c; 当A 执行到5的时候…

__name__函数

__name__函数 __name__存放的是"__main__"字符串&#xff0c;在python代码的编写是&#xff0c;常用到这个函数。因为这样写的代码可以作为一个模块被其他文件导入而不出现歧义&#xff0c;否则没有缩进的代码行&#xff0c;在导入(import)后将被直接执行。python的…

Servlet 3.0新特性和JDK8的新特性

Servlet 3.0新特性 与Servlet2.5相比Servlet3.0对我们的Web开发工作做了很多简化&#xff0c;主要体现在很多以前需要大段xml配置的地方&#xff0c;现在只需要一个简单的注解就可以搞定 第二点提现在文件上传上&#xff0c;Servlet3.0以前我们要实现文件上传需要借助apache的…

pycharm,from xx import 出错

pycharm,from xx import 出错 解决方法&#xff1a; 右击目录-->标记目录为&#xff1a;来源根