之前的博客中提到,cookie是为了浏览器能够在本地保存数据而产生的机制,是在浏览器工作的。而session则是与之对应的,在客户端工作的。一个服务器对应多个客户端,每个客户端都有自己的session,以sessionId为key,session对象为值,存放在内存的哈希表中
方法 | 功能 |
---|---|
HttpSession getSession() | 在服务器中获取会话. 参数如果为 true, 则当不存在会话时新建会话; 参数如果为 false, 则当不存在会话时返回 null |
Cookie[] getCookies() | 返回一个数组, 包含客户端发送该请求的所有的 Cookie 对象. 会自动把Cookie 中的格式解析成键值对. |
方法 | 功能 |
---|---|
void addCookie(Cookie cookie) | 把指定的 cookie 添加到响应中 |
方法 | 功能 |
---|---|
Object getAttribute(String name) | 返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null. |
void setAttribute(String name, Object value) | 使用指定的名称绑定一个对象到该 session 会话 |
boolean isNew() | 判定当前是否是新创建出的会话 |
方法 | 功能 |
---|---|
String getName() | 返回 cookie 的名称。 |
String getValue() | 获取与 cookie 关联的值 |
void setValue(String newValue) | 设置与 cookie 关联的值。 |
实现用户登陆界面
使用form表单,实现用户名和密码的post请求提交
登陆
获取前端提交的username和password,与正确的username和password进行比较,如果正确就创建会话,将username和123的键值对存入哈希表,然后页面重定向到index,
package login;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 javax.servlet.http.HttpSession;
import java.io.IOException;//使用这个类来处理登陆请求
@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");if("123".equals(username) && "1234".equals(password)){//创建会话HttpSession session = req.getSession(true);session.setAttribute("username","123");resp.sendRedirect("index");} else {resp.setStatus(403);resp.setContentType("text/html; charset=utf8");resp.getWriter().write("用户名或密码错误!");}}
}
获取session,如果session为空就退出,否则获取哈希表中username对应的值,将其打印在页面上
package login;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 javax.servlet.http.HttpSession;
import java.io.IOException;//登陆成功后的
@WebServlet("/index")
public class IndexServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//此处是false表示,如果不存在,就不创建,返回空HttpSession session = req.getSession(false);resp.setContentType("text/html; charset=utf8");if(session == null){resp.getWriter().write("尚未登陆!禁止访问!");resp.setStatus(403);return;}String username = (String) session.getAttribute("username");resp.getWriter().write(username + "欢迎回来!");}
}