总结:request、cookie、session、context的区别

这四个对象有不同级别的作用域和生命周期。

(1)request:解决了一次请求内的数据共享问题(作用域:一次请求)

 req.setAttribute("uname", "张三");    // 在servlet中添加request参数

(2)cookie:解决了同一用户不同请求的数据共享的问题(作用域:一次会话/或者设置定时)

 Cookie c = new Cookie("uname", "张三");  // 创建Cookie对象c.setPath("CookieServlet");                  // 指定共享cookie的Servletresp.addCookie(c);                         // 将cookie添加到响应对象中

(3)session:解决了同一用户不同请求的数据共享问题(作用域:会话创建->浏览器关闭)

 // session 技术是依赖Cookie 技术的服务器端的数据存储技术// cookie存储在本地浏览器,而session存储在服务器HttpSession hs=req.getSession();   // 在servlet中获取session对象hs.setAttribute("uname","张三");   // 数据存储

(4)context:解决了不同用户的数据共享问题(作用域:服务器启动->服务器关闭)

 ServletContext sc=this.getServletContext();        // 在servlet中获取context对象sc.setAttribute("str", "ServletContext对象学习");// 数据存储

ServletContext / ServletConfig 对象学习

通过前面知识点的学习,我们对于请求的处理已经可以说比较灵活了,但是还不够。我们再介绍两个重要的对象:ServletContext 对象和ServletConfig 对象


ServletContext 对象:

问题:
Request 解决了一次请求内的数据共享问题,session 解决了用户不同请求的数据共享问题,那么不同的用户的数据共享该怎么办呢?

解决:
使用ServletContext 对象

作用:
解决了不同用户的数据共享问题

原理:
ServletContext 对象由服务器进行创建,一个项目只有一个对象。不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也就是同一个对象了,该对象由用户共同拥有。

特点:
服务器进行创建
用户共享
一个项目只有一个

生命周期:
服务器启动到服务器关闭

作用域:
项目内

使用:
获取ServletContext 对象
使用作用域进行共享数据流转
获取web.xml 中的全局配置
获取webroot 下项目资源流对象
获取webroot 下资源绝对路径

案例:
网页浏览器次数统计,详见源码

代码示例

(1)ServletContextServlet.java

package com.bjsxt.servlet;import java.io.IOException;
import java.io.InputStream;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*** ServletContext对象学习:*        问题:*            不同的用户使用相同的数据*       解决:*            ServletContext对象*       特点:*            服务器创建*          用户共享*       作用域:*            整个项目内*      生命周期:*           服务器启动到服务器关闭*        使用:*             获取ServletContext对象*                     //第一种方式:ServletContext sc=this.getServletContext();//第二种方式:ServletContext sc2=this.getServletConfig().getServletContext();//第三种方式:ServletContext sc3=req.getSession().getServletContext();*             使用ServletContext对象完成数据共享*                   //数据存储*                         sc.setAttribute(String name, Object value);*                    //数据获取*                         sc.getAttribute("str") 返回的是Object类型*                  注意:*                         不同的用户可以给ServletContext对象进行数据的存取。*                       获取的数据不存在返回null。*            获取项目中web.xml文件中的全局配置数据*                     sc.getInitParameter(String name); 根据键的名字返回web.xml中配置的全局数据的值,返回String类型。*                                                       如果数据不存在返回null。*                   sc.getInitParameterNames();返回键名的枚举*                 配置方式:注意 一组<context-param>标签只能存储一组键值对数据,多组可以声明多个  <context-param>进行存储。*                      <context-param><param-name>name</param-name><param-value>zhangsan</param-value></context-param>作用:将静态数据和代码进行解耦。获取项目webroot下的资源的绝对路径。String path=sc.getRealPath(String path);  获取的路径为项目根目录,path参数为项目根目录中的路径获取webroot下的资源的流对象InputStream is = sc.getResourceAsStream(String path);注意:此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。path参数为项目根目录中的路径* * * @author MyPC**/
public class ServletContextServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//获取ServletContext对象//第一种方式:ServletContext sc=this.getServletContext();//第二种方式:ServletContext sc2=this.getServletConfig().getServletContext();//第三种方式:ServletContext sc3=req.getSession().getServletContext();System.out.println(sc==sc2);System.out.println(sc==sc3);//使用ServletContext对象完成数据共享//数据存储sc.setAttribute("str", "ServletContext对象学习");//获取项目web.xml的全局配置数据String str = sc.getInitParameter("name2");System.out.println("全局配置参数:"+str);//获取项目根目录下的资源的绝对路径//String path="D:\\apache-tomcat-7.0.56\\webapps\\sc\\doc\\1.txt";String path=sc.getRealPath("/doc/1.txt");System.out.println(path);//获取项目根目录下资源的流对象InputStream is = sc.getResourceAsStream("/doc/1.txt");}
}

(2)ServletContextServlet2.java

package com.bjsxt.servlet;import java.io.IOException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class ServletContextServlet2 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//创建ServletContext对象ServletContext sc=this.getServletContext();//获取数据System.out.println("ServletContextServlet2.service()"+sc.getAttribute("str"));}
}

ServletConfig 对象:

问题:
使用ServletContext 对象可以获取web.xml 中的全局配置文件,在web.xml 中
每个Servlet 也可以进行单独的配置,那么该怎么获取配置信息呢?

解决:
使用ServletConfig 对象

作用:
ServletConfig 对象是Servlet 的专属配置对象,每个Servlet 都单独拥有一个ServletConfig 对象,用来获取web.xml 中的配置信息。

使用:
获取ServletConfig 对象
获取web.xml 中servlet 的配置信息

代码示例

(1)web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>07-ServletConfig</display-name><servlet><servlet-name>ServletConfigServlet</servlet-name><servlet-class>com.bjsxt.servlet.ServletConfigServlet</servlet-class><init-param><param-name>config</param-name>     <!-- 在这里(项目内)配置ServletConfig需要获取的内容:键 --><param-value>utf-8</param-value>  <!-- 在这里(项目内)配置ServletConfig需要获取的内容:值 --></init-param></servlet><servlet-mapping><servlet-name>ServletConfigServlet</servlet-name><url-pattern>/sg</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

(2)ServletConfigServlet.java

package com.bjsxt.servlet;import java.io.IOException;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*** ServletConfig对象学习:*         问题:*             如何获取在web.xml中给每个servlet单独配置的数据呢?*        解决:*             使用ServletConfig对象*      使用:*             获取ServletConfig对象*          获取web.xml中的配置数据* @author MyPC**/
public class ServletConfigServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//获取ServletConfig对象ServletConfig sc=this.getServletConfig();//获取web.xml中的配置数据String code=sc.getInitParameter("config");System.out.println(code);}
}

LoginServlet检测思路:

 * 请求中文乱码解决:*    1、使用String进行数据重新编码*             uname=new String(uname.getBytes("iso8859-1"),"utf-8");*  2、使用公共配置*         get方式:*          步骤一:req.setCharacterEncoding("utf-8");*            步骤二:*                在tomcat的目录下的conf目录中修改server.xml文件:在Connector标签中增加属性 useBodyEncodingForURI="true"*         post方式:*             req.setCharacterEncoding("utf-8");* Servlet流程总结:*         浏览器发起请求到服务器(请求)*      服务器接受浏览器的请求,进行解析,创建request对象存储请求数据*      服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法*      servlet的方法执行进行请求处理*            //设置请求编码格式*             //设置响应编码格式*             //获取请求信息*           //处理请求信息*               //创建业务层对象*                  //调用业务层对象的方法*           //响应处理结果*请求转发学习:*        作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。*     使用:*             req.getRequestDispatcher("要转发的地址").forward(req, resp);*               地址:相对路径,直接书写servlet的别名即可。*        特点:*            一次请求,浏览器地址栏信息不改变。*       注意:*         请求转发后直接return结束即可。*reuqet作用域:*       解决了一次请求内的servlet的数据共享问题*重定向:*        解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题。*     使用:*            resp.sendRedirect(String uri);*     示例:*            resp.sendRedirect("/login/main");*        特点:*         两次请求,两个request对象。*           浏览器地址栏信息改变*     时机:*         如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。*           如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。 *解决主页面用户名显示为null的问题:*        原因:*         因为在用户登录成功后使用重定向显示主页面,两次请求,而用户的信息*         在第一次请求中,第二次请求中没有用户数据,所以显示为null*       解决:*            使用session*使用ServletContext对象完成网页计数器*        在用户登录校验中创建计数器并自增,然后存储到ServletContext对象中*     在主页面里取出计数器数据显示给用户即可。*

三天免登陆、访问次数统计、用户信息显示 Demo


下面放主要代码。orm框架部分,见github。

github地址:
https://github.com/HanquanHq/ServletNote01_LoginSystem

项目结构:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>04-Login</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description></description><display-name>CookieServlet</display-name><servlet-name>CookieServlet</servlet-name><servlet-class>cn.hanquan.servlet.CookieServlet</servlet-class></servlet><servlet-mapping><servlet-name>CookieServlet</servlet-name><url-pattern>/CookieServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>MainServlet</display-name><servlet-name>MainServlet</servlet-name><servlet-class>cn.hanquan.servlet.MainServlet</servlet-class></servlet><servlet-mapping><servlet-name>MainServlet</servlet-name><url-pattern>/MainServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>PageServlet</display-name><servlet-name>PageServlet</servlet-name><servlet-class>cn.hanquan.servlet.PageServlet</servlet-class></servlet><servlet-mapping><servlet-name>PageServlet</servlet-name><url-pattern>/PageServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>LoginServlet</display-name><servlet-name>LoginServlet</servlet-name><servlet-class>cn.hanquan.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>NumServlet</display-name><servlet-name>NumServlet</servlet-name><servlet-class>cn.hanquan.servlet.NumServlet</servlet-class><load-on-startup>1</load-on-startup> <!-- tomcat启动立即加载 --></servlet><servlet-mapping><servlet-name>NumServlet</servlet-name><url-pattern>/NumServlet</url-pattern></servlet-mapping><servlet><description></description><display-name>ShowServlet</display-name><servlet-name>ShowServlet</servlet-name><servlet-class>cn.hanquan.servlet.ShowServlet</servlet-class></servlet><servlet-mapping><servlet-name>ShowServlet</servlet-name><url-pattern>/ShowServlet</url-pattern></servlet-mapping></web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSP页面</title>
</head>
<body><form action='CookieServlet' method='get'><input type='submit' value='跳转到CookieServlet' /><br /></form>
</body>
</html>

CookieServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import cn.hanquan.orm.core.Query;
import cn.hanquan.orm.core.QueryFactory;
import cn.hanquan.orm.po.User;public class CookieServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");Cookie[] cks = req.getCookies();if (cks != null) {// 有cookieString uid = "";for (Cookie c : cks) {if ("uid".equals(c.getName())) {uid = c.getValue();}}if ("".equals(uid)) {// cookie不完整req.setAttribute("str", "You have cleaned cookie, please login again.");req.getRequestDispatcher("/PageServlet").forward(req, resp);return;} else {// 二次验证用户存在User u = new User();u.setUid(Integer.parseInt(uid));Query q = QueryFactory.createQuery();Object o = q.queryUniqueRow("select * from user where uid=?", User.class, new String[] { uid });if (o != null) {u = (User) o;// 登录数据存入sessionHttpSession hs = req.getSession();hs.setAttribute("user", u);// 计数器ServletContext sc = this.getServletContext();if (sc.getAttribute("nums") != null) {int nums = Integer.parseInt((String) sc.getAttribute("nums"));nums += 1;sc.setAttribute("nums", nums + "");} else {sc.setAttribute("nums", "1");}// 重定向resp.sendRedirect("MainServlet");return;} else {resp.sendRedirect("MainServlet");return;}}} else {// 没有cookieresp.sendRedirect("MainServlet");return;}}
}

LoginServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import cn.hanquan.orm.core.Query;
import cn.hanquan.orm.core.QueryFactory;
import cn.hanquan.orm.po.User;/*** 接收提交的表单,并根据登陆结果重定向* * @author Buuug**/
public class LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置请求、响应编码格式req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");// 获取表单请求信息String uname = req.getParameter("uname");String upwd = req.getParameter("upwd");System.out.println("获取到uname=" + uname + "upwd=" + upwd);// 处理请求信息if (uname == null || upwd == null) {// 避免直接访问此页报空指针resp.sendRedirect("PageServlet");return;}User u = new User();u.setUname(uname);u.setUpwd(upwd);Query q = QueryFactory.createQuery();Object result = q.queryUniqueRow("select * from user where uname=? and upwd=?", User.class,new String[] { uname, upwd });System.out.println(result);// 登录结果if (result != null) {// rightCookie c = new Cookie("uid", ((User) result).getUid() + "");c.setMaxAge(5 * 60);c.setPath("CookieServlet");resp.addCookie(c);// 登录数据存到sessionHttpSession hs = req.getSession();hs.setAttribute("user", u);// 计数器ServletContext sc = this.getServletContext();if (sc.getAttribute("nums") != null) {int nums = Integer.parseInt((String) sc.getAttribute("nums"));nums += 1;sc.setAttribute("nums", nums + "");} else {sc.setAttribute("nums", "1");}// 重定向resp.sendRedirect("MainServlet");return;} else {// wrong// 请求转发req.setAttribute("str", "用户名或密码错误");req.getRequestDispatcher("PageServlet").forward(req, resp);return;}}
}

MainServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import cn.hanquan.orm.po.User;public class MainServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {// 设置请求、响应编码格式req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");// 获取Session用户信息Object o = req.getSession().getAttribute("user");String uname = "";if (o != null) {uname = ((User) o).getUname();} else {resp.sendRedirect("LoginServlet");return;}// 获取网页浏览次数int nums = Integer.parseInt((String) this.getServletContext().getAttribute("nums"));// 响应处理结果resp.getWriter().write("<html>");resp.getWriter().write("<head>");resp.getWriter().write("</head>");resp.getWriter().write("<body>");resp.getWriter().write("<h3>欢迎 " + uname + " 访问尚学堂管理系统</h3>"); // 只有请求转发才有效resp.getWriter().write("所有用户总登录次数为:" + nums);resp.getWriter().write("<hr>");resp.getWriter().write("<form action='ShowServlet' method='get'>");resp.getWriter().write("<input type='submit' value='查看个人信息'>");resp.getWriter().write("</form>");resp.getWriter().write("</body>");resp.getWriter().write("</html>");}
}

NumServlet.java

package cn.hanquan.servlet;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;/*** 计算总登录次数* * 在ServletContext和1.txt中,nums以String类型存储、读取。* 在读取至java内存之后,转换成int类型进行运算。* * @author Buuug**/
public class NumServlet extends HttpServlet {@Override/*** 读文件*/public void init() throws ServletException {String path = this.getServletContext().getRealPath("/nums/1.txt");FileReader fr = null;BufferedReader br = null;System.out.println("读 :" + path);try {fr = new FileReader(path);br = new BufferedReader(fr);String nums = br.readLine();// 写入ServletContextthis.getServletContext().setAttribute("nums", nums);} catch (Exception e) {e.printStackTrace();} finally {try {fr.close();} catch (IOException e) {e.printStackTrace();}try {br.close();} catch (IOException e) {e.printStackTrace();}}}@Override/*** 写文件*/public void destroy() {// 写入txtint nums = Integer.parseInt((String) this.getServletContext().getAttribute("nums"));String path = this.getServletContext().getRealPath("/nums/1.txt");System.out.println("写:" + path);BufferedWriter bw = null;FileWriter fw = null;try {fw = new FileWriter(path);bw = new BufferedWriter(fw);bw.write(nums + "");bw.flush();} catch (Exception e) {e.printStackTrace();} finally {try {fw.close();} catch (IOException e) {e.printStackTrace();}try {bw.close();} catch (IOException e) {e.printStackTrace();}}}}

PageServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 绘制登录页面、提交表单* * @author Buuug**/
public class PageServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");String str = (String) req.getAttribute("str") == null ? "" : (String) req.getAttribute("str");// 错误提示resp.getWriter().write("<html>");resp.getWriter().write("<head>");resp.getWriter().write("</head>");resp.getWriter().write("<body>");resp.getWriter().write("<font color='red' size='20px'>" + str + "</font>");resp.getWriter().write("<form action='LoginServlet' method='get'>");resp.getWriter().write("用户名:<input type='text' name='uname' value=''/><br/>");resp.getWriter().write("密码:<input type='password' name='upwd' value=''/><br/>");resp.getWriter().write("<input type='submit'  value='登录'/><br/>");resp.getWriter().write("</form>");resp.getWriter().write("</body>");resp.getWriter().write("</html>");}
}

ShowServlet.java

package cn.hanquan.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import cn.hanquan.orm.po.User;/*** 在MainServlet中,显示用户个人信息* * @author Buuug**/
public class ShowServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");HttpSession hs = req.getSession();if (hs.getAttribute("user") == null) {resp.sendRedirect("/CookieServlet");return;}User u = (User) hs.getAttribute("user");// 表格显示个人信息resp.getWriter().write("<html>");resp.getWriter().write("<head>");resp.getWriter().write("</head>");resp.getWriter().write("<body>");resp.getWriter().write("<table border='1px'>");resp.getWriter().write("<tr>");resp.getWriter().write("<td>用户名</td>");resp.getWriter().write("<td>" + u.getUname() + "</td>");resp.getWriter().write("</tr>");resp.getWriter().write("<tr>");resp.getWriter().write("<td>密码</td>");resp.getWriter().write("<td>" + u.getUpwd() + "</td>");resp.getWriter().write("</tr>");resp.getWriter().write("</table>");resp.getWriter().write("</body>");resp.getWriter().write("</html>");}
}

【Servlet】ServletContext、ServletConfig对象学习、用户登录系统完善相关推荐

  1. python系统-python实现用户登录系统

    本文实例为大家分享了用户登录系统python实现代码,供大家参考,具体内容如下 注意事项: 1.使用python3执行程序.按提示输入1或2,登录或退出程序 2.输入用户名后,如果用户名被锁定及无效用 ...

  2. python登录系统的实现方法_python实现用户登录系统

    本文实例为大家分享了用户登录系统python实现代码,供大家参考,具体内容如下 注意事项: 1.使用python3执行程序.按提示输入1或2,登录或退出程序 2.输入用户名后,如果用户名被锁定及无效用 ...

  3. 设计一个可扩展的用户登录系统

    在Web系统中,用户登录是最基本的功能.如何设计一个可扩展的用户登录系统呢?本文结合实际案例对用户登录系统设计进行多维度的讲解,帮助各设计者在应用中将复杂变得简单. 来源:廖雪峰的官方网站,作者:廖雪 ...

  4. 限制在同一台电脑上只允许有一个用户登录系统

    在web应用系统中,出于安全性考虑,经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制. 具体一点就是: 1.在同一台电脑上一次只允许有一个用户登录系统: 2.一个用户在同一时间 ...

  5. java限制在同一台电脑上只允许有一个用户登录系统

    在web应用系统中,出于安全性考虑,经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制. 具体一点就是: 1.在同一台电脑上一次只允许有一个用户登录系统: 2.一个用户在同一时间 ...

  6. python用户登录_python用户登录系统

    本文实例为大家分享了用户登录系统python实现代码,供大家参考,具体内容如下 注意事项: 1.使用python3执行程序.按提示输入1或2,登录或退出程序 2.输入用户名后,如果用户名被锁定及无效用 ...

  7. python小型登录系统_python实现用户登录系统

    本文实例为大家分享了用户登录系统python实现代码,供大家参考,具体内容如下 注意事项: 1.使用python3执行程序.按提示输入1或2,登录或退出程序 2.输入用户名后,如果用户名被锁定及无效用 ...

  8. 用户登录python_python用户登录系统

    本文实例为大家分享了用户登录系统python实现代码,供大家参考,具体内容如下 注意事项: 1.使用python3执行程序.按提示输入1或2,登录或退出程序 2.输入用户名后,如果用户名被锁定及无效用 ...

  9. python做邮箱系统_python实现用户登录系统

    本文实例为大家分享了用户登录系统python实现代码,供大家参考,具体内容如下 注意事项: 1.使用python3执行程序.按提示输入1或2,登录或退出程序 2.输入用户名后,如果用户名被锁定及无效用 ...

最新文章

  1. C++ Lists(链表)
  2. 协同过滤——基于模型的算法
  3. 浙江大学计算机系统结构,高级计算机体系结构-浙江大学计算机系统结构室.pdf...
  4. 成功入职阿里P7后 一个技术老哥总结了这几句话
  5. mysql 如何按时间备份_如何定时备份mysql数据库
  6. hiho一下 第六十六周
  7. html选择拖动条,纯CSS做的滑动范围选择条
  8. 基于springboot+vue的房屋租赁系统(前后端分离)
  9. buck-boost电路中,输入电压增加后,电感电流曲线变化的推导 // 《精通开关电源设计》P44 图2-3
  10. 计算机半小时后关机代码,电脑自动关机代码
  11. java sql 搜索拼音
  12. 游戏脚本代码大全_如何用5行Python代码写出刷分游戏脚本!Python真牛!
  13. Android 项目必备(三十二)-->APP 项目产品介绍
  14. C语言编程奖学金评定,C语言计算奖学金总额
  15. Win10 微软拼音添加小鹤双拼以及其他配置
  16. oracle使用dmp文件恢复,dmp文件恢复oracle数据库
  17. 标准化(standardization,z-score)与归一化(Normalizer)分别是什么?有什么区别?
  18. deepin-wine
  19. python 源代码 macd双底 高 低_macd双底选股公式
  20. android开发笔记之有用软件列表

热门文章

  1. apache madlib 教程_Apache顶级开源项目——机器学习库MADlib简介与应用实例
  2. max日期最大值为0_excel函数技巧:MAX在数字查找中的应用妙招
  3. mysql timezone utc_在与mysql的配置当中一定要注意的一点是设置serverTimezone=UTC
  4. SPOJ3931(N个点形成三角形的最大面积)
  5. MFC内嵌web页面
  6. MySQL:为什么用limit时,offset很大会影响性能
  7. 一个卑微的程序员友链
  8. 力扣- -241.为运算表达式设计优先级
  9. 和一场音视频技术大会只有一条网线的距离
  10. 通过改进视频质量评估提升编码效率