1 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
/**
* 老紫竹JavaEE培训教程(java2000.net)
*/
%>
<!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>Insert title here</title>
</head>
<body>
<%
// 判断是否登录,如果没有则转向到login.jsp
// 读取的标志必须和login里面设置的成功标志相同
String loginSign = (String) session.getAttribute("LOGIN_SIGN");
if ("1".equals(loginSign)) {
// 显示登录成功的信息和退出登录的连接
String loginUsername = (String)session.getAttribute("LOGIN_USERNAME");
out.print("欢迎回来:"+loginUsername+"<br><br><a href='logout.jsp'>退出登录</a>");
} else {
// 没有登录,则转到登录界面
out.print("请先<a href='login.jsp'>登录</a>");
}
%>
</body>
</html>
2 login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
/**
* 老紫竹JavaEE培训教程(java2000.net)
*/
%>
<!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>
</head>
<body>
登录
<form method="post" name="LOGIN_FORM" id="LOGIN_FORM" action="logincheck.jsp"><br />
用户名:<input type="text" id="username" name="username" size="20" maxlength="20" /><br />
密码:<input type="password" id="password" name="password" size="20" maxlength="20" /><br />
<input type="submit" value="登录" /></form>
</body>
</html>
3 logincheck.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
/**
* 老紫竹JavaEE培训教程(java2000.net)
*/
%>
<!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>
</head>
<body>
<a href="login.jsp">返回登录</a>
<%
// 设置请求数据的编码方式
// 应尽可能放在其它代码的前面
request.setCharacterEncoding("UTF-8");
// 判断登录方式必须是POST
if ("POST".equals(request.getMethod())) {
// 从request对象里读取参数
String username = request.getParameter("username");
String password = request.getParameter("password");
// 判断用户名和密码必须填写
if (username == null || username.trim().length() == 0) {
out.println("请填写用户名");
} else if (password == null || password.trim().length() == 0) {
out.println("请填写密码");
} else {
// 去掉前后的空格等
username = username.trim();
password = password.trim();
// 判断用户名和密码
if ("admin".equals(username) && "1234".equals(password)) {
out.println("登录成功");
// 将登陆成功标志记录到Session中
session.setAttribute("LOGIN_SIGN","1");
// 另外,也可以保存登录人的用户名来判断是否登录
// 对应的判断LOGIN_USERNAME是否为null来判断是否登录
// 个人更推荐这个方式
session.setAttribute("LOGIN_USERNAME","admin");
// 返回主页的链接
out.println("<a href='index.jsp'>返回主页</a>");
} else {
out.println("用户名或密码失败!");
}
}
} else {
out.print("请使用POST提交方式");
}
%>
</body>
</html>
4 logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
/**
* 老紫竹JavaEE培训教程(java2000.net)
*/
%>
<!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>Insert title here</title>
</head>
<body>
<%
// 可以单独清除session对应登录数据
// 请注意,此操作不能在 invalidate之后运行,否则出现
// Session already invalidated 的异常信息
session.removeAttribute("LOGIN_SIGN");
session.removeAttribute("LOGIN_USERNAME");
// 也可以简单的将session全部失效
// 从安全考虑,推荐这个做法
session.invalidate();
%>
退出登录成功,
<a href='index.jsp'>返回主页</a>
</body>
</html>
5 总结
所有要说的,都在代码里面了。 如何确认用户登录,有些朋友喜欢放到Filter里面进行,也是一个不错的注意,值得推荐。我这里只是把原理说一下,具体的大家可以自由发挥
6 测试
1 大家可以测试一下session.invalidate()之后再操作session,看看错误信息
2 可以修改一下那个登录后的连接,改成自动跳转到主页或者再次登录页面