此案例能够实现简单的用户登录和注销登录,学习session基础的参考
第一步:创建数据库
<?xml version="1.0" encoding="utf-8"?>
<user-list>
<user id="1">
<name>张三</name>
<password>123456</password>
</user>
<user id="2">
<name>李四</name>
<password>1234567</password>
</user>
<user id="3">
<name>王五</name>
<password>12345678</password>
</user>
</user-list>
第二步:在entity中创建实体类
package zdh.cn.entity;
public class User {
private String id;
private String name;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password
+ "]";
}
}
第三步:导入解析xml文档工具类
此步骤需要导入两个jar包
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar
public class XMLUtil {
/**
* 读取xml文件,返回document对象
*/
public static Document getDocument(){
try {
Document doc = new SAXReader().read(new File("e:/user.xml"));
return doc;
} catch (DocumentException e) {
e.printStackTrace();
//把转换为运行时异常抛出即可!
throw new RuntimeException(e);
}
}
/**
* 传如docuemnt对象,写出到xml文件中
*/
public static void write2xml(Document doc){
try {
OutputStream out = new FileOutputStream("e:/user.xml");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
} catch (Exception e) {
e.printStackTrace();
//把转换为运行时异常抛出即可!
throw new RuntimeException(e);
}
}
}
第四步:在dao中创建数据库的工具类
public class UserDao {
//根据用户名查找该用户,返回用户对象
public User findByName(String name){
Document doc = XMLUtil.getDocument();
Element nameEle = (Element)doc.selectSingleNode("//name[text()='"+name+"']");
User user = null;
if(nameEle!=null){
user=new User();
Element userEle = nameEle.getParent();
user.setId(userEle.attributeValue("id"));
user.setName(userEle.elementText("name"));
user.setPassword(userEle.elementText("password"));
}
return user;
}
public static void main(String[] args) {//测试工具是否能用
UserDao u = new UserDao();
System.out.println( u.findByName("张三"));
}
}
第五步:创建html文件
<!DOCTYPE html>
<html>
<head>
<title>login.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<form action ="/SessionLoginDemo/LoginServlet" method="post">
用户名:<input type="text" name="name"><br/>
密 码:<input type="password" name="password"><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
用户登录:
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//解决post提交的参数的中文乱码问题
request.setCharacterEncoding("utf-8");
//解决输出问题的中文乱码问题
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
UserDao dao = new UserDao();
User user = dao.findByName(name);
if(user!=null){
//说明存在此用户
if(user.getPassword().equals(password)){
//说明账号和密码正确
HttpSession session = request.getSession(true);
session.setAttribute("User", user);
response.sendRedirect(request.getContextPath()+"/UserindexServlet");
}
else{
response.getWriter().write("用户名存在,但是密码输入有误!"+"<a href='"+request.getContextPath()+"/login.html'>返回登录页面</a>");
}
}else{
response.getWriter().write("用户不存在!"+"<a href='"+request.getContextPath()+"/login.html'>返回登录页面</a>");
}
}
}
登录后的首页:
public class UserindexServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession(false);
if (session == null) {
// 没有登录成功过
response.sendRedirect(request.getContextPath() + "/login.html");
return;
} else {
User user = (User) session.getAttribute("User");
if (user != null) {
// 成功登录过
response.getWriter().write("欢迎回来:" + user.getName());
response.getWriter().write("<a href='"+request.getContextPath()+"/LoutServlet'>安全退出</a>");
} else {
// 没有成功登录过
response.sendRedirect(request.getContextPath() + "/login.html");
return;
}
}
}
}
注销:
public class LoutServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession(false);
if (session == null) {
response.sendRedirect(request.getContextPath() + "/login.html");
return;
}else{
session.removeAttribute("User");//不能使用session.invalidate();方法,此方法将删除所有的session信息,这里只删除user信息
response.getWriter().write("注销成功"+"<a href='"+request.getContextPath()+"/login.html'>返回登录页面</a>");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}