登录功能实现-登录成功跳转主页面
涉及的技术知识点
-
Cookie
-
Session会话
-
JSTL标签
Cookie
-
HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出。这样的设计严重阻碍的Web程序的设计。如:在我们进行网购时,买了一条裤子,又买了一个手机。由于http协议是无状态的,如果不通过其他手段,服务器是不能知道用户到底买了什么。而Cookie就是解决方案之一。
-
Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。
-
Cookie的用途
网上商城购物车
用户登录状态的保持
-
Cookie的限制性
-
Cookie作为请求或响应报文发送,无形中增加了网络流量。
-
Cookie是明文传送的安全性差。
-
各个浏览器对Cookie有限制,使用上有局限
-
Cookie的默认时效就是当前浏览器的内存
-
-
Cookie的具体使用
-
创建cookie
设置cookie的路径,默认的路径就是web应用名(context值)
-
读取cookie
Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { System.out.println(cookie.getName()+","+cookie.getValue()); } }else{ System.out.println("没有收到cookie"); }
根据context路径,获取对应的cookie。就是根据服务器路径获取对应的cookie
-
-
cookie案例
@WebServlet(name = "CookieServlet",urlPatterns = "/cookieServlet") public class CookieServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = new Cookie("username","Admin"); /*保存到客户端(浏览器)*/ response.addCookie(cookie); /*cookie的默认时效就是在当前浏览器内存中*/ } }
在浏览器端输入地址,查看浏览器设置,
Session
-
使用Cookie有一个非常大的局限,就是如果Cookie很多,则无形的增加了客户端与服务端的数据传输量。而且由于浏览器对Cookie数量的限制,注定我们不能在Cookie中保存过多的信息,于是Session出现。
-
Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。
-
Session的工作原理
-
Session的创建时机是在request.getSession()方法第一次被调用时。
-
注意:浏览器不关闭,cookie就不会失效,JESSIONID还在,同一个session重复使用,但是每次请求的reques对象不同,request会创建多次。
-
Session被创建后,同时还会有一个名为JSESSIONID的Cookie被创建。
-
这个Cookie的默认时效就是当前会话。
-
简单来说,Session机制也是依赖于Cookie来实现的
-
-
Session的具体使用
-
Session的时效问题
Session默认有效时间为30分钟(浏览器每次请求的间隔),可以在服务器的web.xml配置中修改.
-
Cookie与Session的关系:
将cookie对应成一个例子:去一个小吃店里买饭,买十次送一次,记录的原理是店家给顾客一个卡片,在上面盖章。顾客可以自制一个戳,伪造盖章。
Session则是将这个方案改进,依旧是去买饭,买十次送一次,这时候店家自己记录次数,顾客第一次买之后,给顾客一个JSESSIONID,顾客之后吃饭报这个id,店家自己记录,这样就避免了顾客作弊的情况。但是session需要依赖cookie去传递这个JSESSIONID。
-
浏览器端查看设置
URL重写(了解)
-
整个会话控制技术体系中,保持JSESSIONID的值主要通过Cookie实现。但Cookie在浏览器端可能会被禁用,所以我们还需要一些备用的技术手段,例如:URL重写。
-
URL重写其实就是将JSESSIONID的值以固定格式附着在URL地址后面,以实现保持JSESSIONID,进而保持会话状态。这个固定格式是:URL;jsessionid=xxxxxxxxx
-
实现方式
具体功能展示
从登录界面login.jsp
跳转到主页面main.jsp
,显示登陆者的账号信息。这里只给出jsp代码,
<%--
Created by IntelliJ IDEA.
User: kuber
Date: 2020/10/27
Time: 22:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主界面</title>
</head>
<body>
<h1 align="center">欢迎<font color="red">${sessionScope.loginUser.username}</font>登录</h1>
<br>
<br>
<h2 align="center">员工信息表</h2>
<c:if test="${!empty emps}">
<table align="center" border="1px" cellspacing="0px" width="70%">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>部门编号</th>
<th>部门名称</th>
<th>部门位置</th>
<th>操作</th>
</tr>
<c:forEach items="${emps}" var="emp">
<tr align="center">
<td>${emp.id}</td>
<td>${emp.name}</td>
<td>${emp.age}</td>
<td>${emp.dept_id}</td>
<td>${emp.department.dep_name}</td>
<td>${emp.department.dep_location}</td>
<td>
<a href="#">修改</a>
<a href="#">删除</a>
</td>
</tr>
</c:forEach>
</table>
</c:if>
<c:if test="${empty emps}">
<h3 align="center">没有任何员工信息</h3>
</c:if>
<br>
<h2 align="center"><a href="#">添加员工信息</a></h2>
</body>
</html>