一、什么是session:
1、session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简单来说,session就是一个对象,用于存储信息。

2、session的作用:
我们先来想一个问题,这个问题就是我们在游览购物网站时,我们并没有登录,但是我们任然可以将商品加入购物车,并且进行查看,当我们退出游览器后再打开游览器进行查看时,购物车中依然有我们选择的商品,这该怎么实现呢?
当然,我们可以使用cookie,但是cookie能存放大量数据吗?这时,我们就需要一种新的技术,Session。session是存储于服务器端的特殊对象,服务器会为每一个游览器(客户端)创建一个唯一的session。这个session是服务器端共享,每个游览器(客户端)独享的。我们可以在session存储数据,实现数据共享。
二、登录和注销流程
用户在请求登录之后判断是否合法,如果合法说明登录成功,并且将其加入到session集合中;用户登录之后想要注销则可以将信息从Session中删除。
1、登录界面
利用jsp文件写一个登录界面login2.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<%
HashMap<String, String> error = ((HashMap<String, String>)request. getAttribute("error"));
String fail = (String) request.getParameter("fail");
String username = "";
String password = "";
Cookie[] cookies = request.getCookies();
if (cookies!=null && cookies.length>0){
for (Cookie cookie : cookies) {
String name = cookie.getName();
if ("username".equals(name)){
username = cookie.getValue();
}
if ("password".equals(name)){
password = cookie.getValue();
}
}
}
%>
<form action="UserController" method="post">
<input type="hidden" value="login" name="userAction">
<table border="1" align="center" >
<tr align="center"><th colspan="2">登录</th></tr>
<tr><td>账号:<input type="text" name="username" value="<%=username%>"><%=fail==null?"":fail%><span style="color:red"> <%=error==null?"":error.get("username")==null?"":error.get("username")%></span></td></tr>
<tr><td>密码:<input type="text" name="password" value="<%=password%>"><span style="color:red"> <%=error==null?"":error.get("password")==null?"":error.get("password")%></span></td></tr>
<tr><td><input type="checkbox" name="autoLogin" value="1">一周内自动登录</td></tr>
<tr align="center"><td colspan="2"><input type="submit" value="登录"><input type="reset" value="重置"></td></tr>
</table>
</form>
</body>
</html>
2、controller层:
@WebServlet("/UserController")
public class UserController extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String userAction = req.getParameter("userAction");
String logout = req.getParameter("logout");
//处理中文乱码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
/**
* 注销
*/
if ("loginout".equals(userAction)){
HttpSession session = req.getSession();
session.removeAttribute("username");
req.getRequestDispatcher("/WEB-INF/pages/loginoutsuccess.jsp").forward(req,resp);
}
/**
* 查询用户信息
*/
if ("showAllUser".equals(userAction)){
String username = (String)req.getSession().getAttribute("username");
if (username!=null){
List<User> users = new UserService().showAllUser();
if (users.isEmpty()){
req.setAttribute("infor","未查询到用户相关信息");

&spm=1001.2101.3001.5002&articleId=133887832&d=1&t=3&u=999fc98c84384d6e8b46a929c876768b)
649

被折叠的 条评论
为什么被折叠?



