【任务目标】

通过所学Session知识,使用Session技术模拟用户登录。

当用户访问某个网站的首页时,首先会判断用户是否登录,如果已经登录,则在首页中显示用户登录信息,否则进入登录页面,实现用户登录功能,然后显示用户登录信息。

源代码下载(访问密码: 6429):https://url47.ctfile.com/f/64055047-1497444695-231929?p=6429

1.创建实体类

右击entity文件夹,选择New—>Java Class,名字为User

代码参考如下:

package cn.itcast.session.entity;

public class User {
    private String username;
    private String password;

    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;
    }
}
2.创建Servlet

右击Servlet,选择New—>Create New Servlet,名字为IndexServlet

IndexServlet.java参考代码如下:

package cn.itcast.session.servlet;
import cn.itcast.session.entity.User;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "IndexServlet",urlPatterns="/IndexServlet")
public class IndexServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,HttpServletResponse response)
            throws ServletException, IOException {
        // 解决乱码问题
        response.setContentType("text/html;charset=utf-8");
        // 创建或者获取保存用户信息的Session对象
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if (user == null) {
            response.getWriter().print(
                    "您还没有登录,请<a href='/chapter05/login.html'>登录</a>");
        } else {
            response.getWriter().print("您已登录,欢迎你," + user.getUsername() + "!");
            response.getWriter().print(
                    "<a href='/chapter05/LogoutServlet'>退出</a>");
            // 创建Cookie存放Session的标识号
            Cookie cookie = new Cookie("JSESSIONID", session.getId());
            cookie.setMaxAge(60 * 30);
            cookie.setPath("/chapter05");
            response.addCookie(cookie);
        }
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

然后创建第二个LoginServlet,代码参考如下:

package cn.itcast.session.servlet;
import cn.itcast.session.entity.User;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "LoginServlet",urlPatterns="/LoginServlet")
public class LoginServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        PrintWriter pw = response.getWriter();
        //假设正确的用户名 是itcast 密码是123
        if (("itcast").equals(username) && ("123").equals(password)) {
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            request.getSession().setAttribute("user", user);
            response.sendRedirect("/chapter05/IndexServlet");
        } else {
            pw.write("用户名或密码错误,登录失败");
        }
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

最后创建一个Servlet,名字为LogoutServlet,代码参考如下:

package cn.itcast.session.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet(name = "LogoutServlet",urlPatterns="/LogoutServlet")
public class LogoutServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
            throws ServletException, IOException {
        // 将Session对象中的User对象移除
        request.getSession().removeAttribute("user");
        response.sendRedirect("/chapter05/IndexServlet");
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)throws ServletException, IOException {
        doGet(request, response);
    }
}

创建完的结构如下:

3.创建登录页面

右击web文件夹,选择New—>HTML File,名字为login.html

代码参考如下:

<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html">
    <title>Title</title>
</head>
<body>
<form name="reg" action="http://localhost:8080/chapter05/LoginServlet"
      method="post">
    用户名: <input name="username" type="text"/><br/>
    密码:  <input name="password" type="password"/><br/>
    <input type="submit" value="提交" id="bt"/>
</form>
</body>
</html>
3.启动测试

注意,测试之前,需要保证你的地址是正确的。

如果不改上面的内容,就改代码。

启动tomcat,访问下面的地址:

http://localhost:8080/chapter05/login.html