JAVA-EE使用Cookie保存信息并通过欢迎页机制实现登陆免登录效果------计算机网络经典

小灰灰 2024-02-21 10:02 26阅读 0赞
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title>欢迎页</title>
  7. </head>
  8. <body>
  9. <h1>用户登录</h1>
  10. <hr>
  11. <form action="<%=request.getContextPath()%>/user/login" method="post">
  12. username:<input type="text" name="username"><br>
  13. password:<input type="password" name="password"><br>
  14. 10天免登录:<input type="checkbox" name="flag" value="1"><br>
  15. <input type="submit" value="login">
  16. </form>
  17. <h1>
  18. <a href="<%=request.getContextPath()%>/cookie/generate">
  19. 服务器生成Cookie,然后把Cookie传给浏览器,浏览器收到,再放到客户端上
  20. </a>
  21. </h1>
  22. <h1>
  23. <a href="<%=request.getContextPath()%>/sendCookie">
  24. 浏览器发送Cookie给服务器
  25. </a>
  26. </h1>
  27. <%-- 前端发送请求路径的时候,如果请求路径是绝对路径,要以/开始,加项目名--%>
  28. <%-- <h1><a href="<%=(request.getContextPath())%>/dept/list">查看部门列表</a></h1>--%>
  29. </body>
  30. </html>
  31. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  32. <!DOCTYPE html>
  33. <html>
  34. <head>
  35. <meta charset="utf-8">
  36. <title>欢迎页</title>
  37. </head>
  38. <body>
  39. <h1>用户登录</h1>
  40. <hr>
  41. <form action="<%=request.getContextPath()%>/user/login" method="post">
  42. username:<input type="text" name="username"><br>
  43. password:<input type="password" name="password"><br>
  44. 10天免登录:<input type="checkbox" name="flag" value="1"><br>
  45. <input type="submit" value="login">
  46. </form>
  47. <h1>
  48. <a href="<%=request.getContextPath()%>/cookie/generate">
  49. 服务器生成Cookie,然后把Cookie传给浏览器,浏览器收到,再放到客户端上
  50. </a>
  51. </h1>
  52. <h1>
  53. <a href="<%=request.getContextPath()%>/sendCookie">
  54. 浏览器发送Cookie给服务器
  55. </a>
  56. </h1>
  57. <%-- 前端发送请求路径的时候,如果请求路径是绝对路径,要以/开始,加项目名--%>
  58. <%-- <h1><a href="<%=(request.getContextPath())%>/dept/list">查看部门列表</a></h1>--%>
  59. </body>
  60. </html>
  61. package com.bjpowernode.oa.web.action;
  62. import com.bjpowernode.oa.utils.DBUtil;
  63. import jakarta.servlet.ServletException;
  64. import jakarta.servlet.annotation.WebServlet;
  65. import jakarta.servlet.http.*;
  66. import java.io.IOException;
  67. import java.sql.Connection;
  68. import java.sql.PreparedStatement;
  69. import java.sql.ResultSet;
  70. import java.sql.SQLException;
  71. @WebServlet("/Welcome")
  72. public class Welcome extends HttpServlet
  73. {
  74. @Override
  75. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  76. {
  77. Cookie[] cookies = request.getCookies();
  78. String username = null;
  79. String password = null;
  80. if (cookies != null)
  81. {
  82. for(int i = 0; i < cookies.length; i++)
  83. {
  84. if("username".equals(cookies[i].getName()))
  85. {
  86. username = cookies[i].getValue();
  87. }
  88. if("password".equals(cookies[i].getName()))
  89. {
  90. password = cookies[i].getValue();
  91. }
  92. }
  93. }
  94. if(username != null && password != null)
  95. {
  96. Connection connection = null;
  97. PreparedStatement statement = null;
  98. ResultSet resultSet = null;
  99. boolean flag = false;
  100. try
  101. {
  102. connection = DBUtil.getConnection();
  103. String sql = "select * from t_user where username = ? and pssword = ?";
  104. statement = connection.prepareStatement(sql);
  105. statement.setString(1,username);
  106. statement.setString(2,password);
  107. resultSet = statement.executeQuery();
  108. if(resultSet.next())
  109. {
  110. flag = true;
  111. }
  112. }
  113. catch (SQLException e)
  114. {
  115. throw new RuntimeException(e);
  116. }
  117. finally
  118. {
  119. DBUtil.close(connection,statement,resultSet);
  120. }
  121. if(flag)
  122. {
  123. HttpSession session = request.getSession();
  124. session.setAttribute("username",username);
  125. response.sendRedirect(request.getContextPath() + "/dept/list");
  126. }
  127. else
  128. {
  129. response.sendRedirect(request.getContextPath() + "/index.jsp");
  130. }
  131. }
  132. else
  133. {
  134. response.sendRedirect(request.getContextPath() + "/index.jsp");
  135. }
  136. }
  137. }
  138. package com.bjpowernode.oa.web.action;
  139. import com.bjpowernode.oa.utils.DBUtil;
  140. import jakarta.servlet.ServletException;
  141. import jakarta.servlet.annotation.WebServlet;
  142. import jakarta.servlet.http.*;
  143. import java.io.IOException;
  144. import java.sql.Connection;
  145. import java.sql.PreparedStatement;
  146. import java.sql.ResultSet;
  147. import java.sql.SQLException;
  148. @WebServlet("/Welcome")
  149. public class Welcome extends HttpServlet
  150. {
  151. @Override
  152. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  153. {
  154. Cookie[] cookies = request.getCookies();
  155. String username = null;
  156. String password = null;
  157. if (cookies != null)
  158. {
  159. for(int i = 0; i < cookies.length; i++)
  160. {
  161. if("username".equals(cookies[i].getName()))
  162. {
  163. username = cookies[i].getValue();
  164. }
  165. if("password".equals(cookies[i].getName()))
  166. {
  167. password = cookies[i].getValue();
  168. }
  169. }
  170. }
  171. if(username != null && password != null)
  172. {
  173. Connection connection = null;
  174. PreparedStatement statement = null;
  175. ResultSet resultSet = null;
  176. boolean flag = false;
  177. try
  178. {
  179. connection = DBUtil.getConnection();
  180. String sql = "select * from t_user where username = ? and pssword = ?";
  181. statement = connection.prepareStatement(sql);
  182. statement.setString(1,username);
  183. statement.setString(2,password);
  184. resultSet = statement.executeQuery();
  185. if(resultSet.next())
  186. {
  187. flag = true;
  188. }
  189. }
  190. catch (SQLException e)
  191. {
  192. throw new RuntimeException(e);
  193. }
  194. finally
  195. {
  196. DBUtil.close(connection,statement,resultSet);
  197. }
  198. if(flag)
  199. {
  200. HttpSession session = request.getSession();
  201. session.setAttribute("username",username);
  202. response.sendRedirect(request.getContextPath() + "/dept/list");
  203. }
  204. else
  205. {
  206. response.sendRedirect(request.getContextPath() + "/index.jsp");
  207. }
  208. }
  209. else
  210. {
  211. response.sendRedirect(request.getContextPath() + "/index.jsp");
  212. }
  213. }
  214. }
  215. package com.bjpowernode.oa.web.action;
  216. import com.bjpowernode.oa.utils.DBUtil;
  217. import jakarta.servlet.ServletException;
  218. import jakarta.servlet.annotation.WebServlet;
  219. import jakarta.servlet.http.*;
  220. import java.io.IOException;
  221. import java.sql.Connection;
  222. import java.sql.PreparedStatement;
  223. import java.sql.ResultSet;
  224. import java.sql.SQLException;
  225. import java.util.Map;
  226. @WebServlet({"/user/login","/user/exit"})
  227. public class UserServlet extends HttpServlet
  228. {
  229. //JSessionID=??这个键值对数据就是cookie保存的信息
  230. //对于session关联的cookie来说,这个cookie是保存在浏览器的运行内存中的
  231. //用户再次发送请求的时候,会自动把运行内存中的cookie放到请求头内一并发送
  232. //服务器就是根据这个值找到对应的对象
  233. //session存储在服务器上的,cookie是储存在电脑机器上的
  234. //cookie可以存在浏览器运行内存中,也可以放在硬盘内保存
  235. //cookie和session都是为了保存会话的状态
  236. //这两个机制存在的目的就是为了解决我们的http协议的无状态无连接协议的问题
  237. //(无状态无连接)没有请求和响应时,双方不知道对方是否还在
  238. @Override
  239. public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  240. String servletPath = request.getServletPath();
  241. if("/user/login".equals(servletPath))
  242. {
  243. doLogin(request,response);
  244. }
  245. else if("/user/exit".equals(servletPath))
  246. {
  247. doExit(request,response);
  248. }
  249. }
  250. //将购物车中的商品编号放到cookie当中,cookie保存到硬盘
  251. //下一次再打开,自动读取本地cookie,就还会显示这些商品
  252. //购物网站未登录不允许查看商品和保存购物车的原理是,为了记录数据,什么用户喜欢什么样的东西
  253. //和针对不同用户给出不同的优惠力度(大数据杀熟),并且可以防止爬虫,和减轻服务器压力(没有购买欲望的客户不让你看)
  254. //十天免登录的实现原理如下,保存一个记录了用户名和密码的cookie到本地
  255. //当十天内再次访问该网站时,会自动在请求头内发送这个账号用户名和密码到服务器,服务器接收到这个cookie
  256. //解密后实现登录
  257. //cookie和session都是Http协议的一部分,因为Http协议是无状态和无连接的协议
  258. //Http协议规定,任何一个cookie都是由name和value组成的
  259. //在java的servlet中,对cookie提供了那些支持?
  260. //jakarta.servlet.http.HttpCookie
  261. //Cookie是带有路径的,不同的cookie会带不同的路径,方便对应的提交信息和用于握手机制的实现
  262. //我们java的cookie主要是在response中将信息作为回传给浏览器的,在服务器中只是做一个信息的处理
  263. //在Http协议中规定如下,在浏览器发送请求时,会自动携带该路径下的cookie在请求头中给服务器
  264. //cookie的name和value都是字符串,cookie的name和value都是字符串
  265. private void doExit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  266. {
  267. HttpSession session = request.getSession(false);
  268. if(session != null && session.getAttribute("username") != null)
  269. {
  270. //销毁session的方法,session.invalidate()
  271. session.invalidate();
  272. response.sendRedirect(request.getContextPath() + "/index.jsp");
  273. }
  274. }
  275. protected void doLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  276. {
  277. request.setCharacterEncoding("UTF-8");
  278. String username = request.getParameter("username");
  279. String password = request.getParameter("password");
  280. String loginSet = request.getParameter("flag");
  281. Connection connection = null;
  282. PreparedStatement statement = null;
  283. ResultSet resultSet = null;
  284. boolean flag = false;
  285. try
  286. {
  287. connection = DBUtil.getConnection();
  288. String sql = "select * from t_user where username = ? and pssword = ?";
  289. statement = connection.prepareStatement(sql);
  290. statement.setString(1,username);
  291. statement.setString(2,password);
  292. resultSet = statement.executeQuery();
  293. if(resultSet.next())
  294. {
  295. flag = true;
  296. }
  297. }
  298. catch (SQLException e)
  299. {
  300. throw new RuntimeException(e);
  301. }
  302. finally
  303. {
  304. DBUtil.close(connection,statement,resultSet);
  305. }
  306. if(flag)
  307. {
  308. HttpSession session = request.getSession();
  309. session.setAttribute("username",username);
  310. if(loginSet != null && "1".equals(loginSet))
  311. {
  312. //存储登录名
  313. Cookie name = new Cookie("username",username);
  314. //存储密码
  315. Cookie LoginPassword = new Cookie("password",password);
  316. //生命周期都设为1小时,实验够了
  317. name.setMaxAge(60 * 60);
  318. LoginPassword.setMaxAge(60 * 60);
  319. //保存到浏览器中
  320. name.setPath(request.getContextPath());
  321. LoginPassword.setPath(request.getContextPath());
  322. //添加到响应中去
  323. response.addCookie(name);
  324. response.addCookie(LoginPassword);
  325. }
  326. response.sendRedirect(request.getContextPath() + "/dept/list");
  327. }
  328. else
  329. {
  330. response.sendRedirect(request.getContextPath() + "/Error.jsp");
  331. }
  332. }
  333. }
  334. package com.bjpowernode.oa.web.action;
  335. import com.bjpowernode.oa.utils.DBUtil;
  336. import jakarta.servlet.ServletException;
  337. import jakarta.servlet.annotation.WebServlet;
  338. import jakarta.servlet.http.*;
  339. import java.io.IOException;
  340. import java.sql.Connection;
  341. import java.sql.PreparedStatement;
  342. import java.sql.ResultSet;
  343. import java.sql.SQLException;
  344. import java.util.Map;
  345. @WebServlet({"/user/login","/user/exit"})
  346. public class UserServlet extends HttpServlet
  347. {
  348. //JSessionID=??这个键值对数据就是cookie保存的信息
  349. //对于session关联的cookie来说,这个cookie是保存在浏览器的运行内存中的
  350. //用户再次发送请求的时候,会自动把运行内存中的cookie放到请求头内一并发送
  351. //服务器就是根据这个值找到对应的对象
  352. //session存储在服务器上的,cookie是储存在电脑机器上的
  353. //cookie可以存在浏览器运行内存中,也可以放在硬盘内保存
  354. //cookie和session都是为了保存会话的状态
  355. //这两个机制存在的目的就是为了解决我们的http协议的无状态无连接协议的问题
  356. //(无状态无连接)没有请求和响应时,双方不知道对方是否还在
  357. @Override
  358. public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  359. String servletPath = request.getServletPath();
  360. if("/user/login".equals(servletPath))
  361. {
  362. doLogin(request,response);
  363. }
  364. else if("/user/exit".equals(servletPath))
  365. {
  366. doExit(request,response);
  367. }
  368. }
  369. //将购物车中的商品编号放到cookie当中,cookie保存到硬盘
  370. //下一次再打开,自动读取本地cookie,就还会显示这些商品
  371. //购物网站未登录不允许查看商品和保存购物车的原理是,为了记录数据,什么用户喜欢什么样的东西
  372. //和针对不同用户给出不同的优惠力度(大数据杀熟),并且可以防止爬虫,和减轻服务器压力(没有购买欲望的客户不让你看)
  373. //十天免登录的实现原理如下,保存一个记录了用户名和密码的cookie到本地
  374. //当十天内再次访问该网站时,会自动在请求头内发送这个账号用户名和密码到服务器,服务器接收到这个cookie
  375. //解密后实现登录
  376. //cookie和session都是Http协议的一部分,因为Http协议是无状态和无连接的协议
  377. //Http协议规定,任何一个cookie都是由name和value组成的
  378. //在java的servlet中,对cookie提供了那些支持?
  379. //jakarta.servlet.http.HttpCookie
  380. //Cookie是带有路径的,不同的cookie会带不同的路径,方便对应的提交信息和用于握手机制的实现
  381. //我们java的cookie主要是在response中将信息作为回传给浏览器的,在服务器中只是做一个信息的处理
  382. //在Http协议中规定如下,在浏览器发送请求时,会自动携带该路径下的cookie在请求头中给服务器
  383. //cookie的name和value都是字符串,cookie的name和value都是字符串
  384. private void doExit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  385. {
  386. HttpSession session = request.getSession(false);
  387. if(session != null && session.getAttribute("username") != null)
  388. {
  389. //销毁session的方法,session.invalidate()
  390. session.invalidate();
  391. response.sendRedirect(request.getContextPath() + "/index.jsp");
  392. }
  393. }
  394. protected void doLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  395. {
  396. request.setCharacterEncoding("UTF-8");
  397. String username = request.getParameter("username");
  398. String password = request.getParameter("password");
  399. String loginSet = request.getParameter("flag");
  400. Connection connection = null;
  401. PreparedStatement statement = null;
  402. ResultSet resultSet = null;
  403. boolean flag = false;
  404. try
  405. {
  406. connection = DBUtil.getConnection();
  407. String sql = "select * from t_user where username = ? and pssword = ?";
  408. statement = connection.prepareStatement(sql);
  409. statement.setString(1,username);
  410. statement.setString(2,password);
  411. resultSet = statement.executeQuery();
  412. if(resultSet.next())
  413. {
  414. flag = true;
  415. }
  416. }
  417. catch (SQLException e)
  418. {
  419. throw new RuntimeException(e);
  420. }
  421. finally
  422. {
  423. DBUtil.close(connection,statement,resultSet);
  424. }
  425. if(flag)
  426. {
  427. HttpSession session = request.getSession();
  428. session.setAttribute("username",username);
  429. if(loginSet != null && "1".equals(loginSet))
  430. {
  431. //存储登录名
  432. Cookie name = new Cookie("username",username);
  433. //存储密码
  434. Cookie LoginPassword = new Cookie("password",password);
  435. //生命周期都设为1小时,实验够了
  436. name.setMaxAge(60 * 60);
  437. LoginPassword.setMaxAge(60 * 60);
  438. //保存到浏览器中
  439. name.setPath(request.getContextPath());
  440. LoginPassword.setPath(request.getContextPath());
  441. //添加到响应中去
  442. response.addCookie(name);
  443. response.addCookie(LoginPassword);
  444. }
  445. response.sendRedirect(request.getContextPath() + "/dept/list");
  446. }
  447. else
  448. {
  449. response.sendRedirect(request.getContextPath() + "/Error.jsp");
  450. }
  451. }
  452. }
  453. <?xml version="1.0" encoding="UTF-8"?>
  454. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  455. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  456. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  457. version="4.0">
  458. <session-config>
  459. <!-- 代表session的超时时间是30分钟,如果30分钟到,session对象就会被销毁-->
  460. <session-timeout>30</session-timeout>
  461. </session-config>
  462. <!-- 使用欢迎页机制跳转到cookie登录-->
  463. <welcome-file-list>
  464. <welcome-file>Welcome</welcome-file>
  465. </welcome-file-list>
  466. </web-app>
  467. <?xml version="1.0" encoding="UTF-8"?>
  468. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  469. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  470. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  471. version="4.0">
  472. <session-config>
  473. <!-- 代表session的超时时间是30分钟,如果30分钟到,session对象就会被销毁-->
  474. <session-timeout>30</session-timeout>
  475. </session-config>
  476. <!-- 使用欢迎页机制跳转到cookie登录-->
  477. <welcome-file-list>
  478. <welcome-file>Welcome</welcome-file>
  479. </welcome-file-list>
  480. </web-app>

发表评论

表情:
评论列表 (有 0 条评论,26人围观)

还没有评论,来说两句吧...

相关阅读