网络应用程序设计(idea版)——实验四:会话管理

目录 

实验预习报告

一、实验目的

二、实验原理

三、实验预习内容

实验报告

一、实验目的

二、实验要求

三、实验内容与步骤


实验预习报告

一、实验目的

1. 了解Web服务器对客户会话跟踪的各种方法;

2. 重点掌握使用HttpSession对象跟踪会话的方法;

3. 掌握使用Cookie技术跟踪会话的方法;

4. 了解URL重写和隐藏表单域的方法。

二、实验原理

HTTP协议是无状态的协议。在很多情况下,Web服务器必须能够跟踪客户的状态。比如,对于一个购物网站,在一个时刻可能有多个客户购物,Web服务器必须能够区分不同的客户。一般情况下,Web服务器为每个客户配置了虚拟的购物车(ShoppingCart)。当某个客户请求将一个商品放入购物车时,Web服务器必须根据发出请求的客户的身份,找到该客户的购物车,然后把商品放入其中。

Web服务器跟踪客户的状态通常有4种方法:

(1)使用HttpSession对象管理会话;(2)使用持久的Cookie对象;(3)使用URL重写机制;(4)使用隐藏的表单域。

三、实验预习内容

1. 什么是会话,一个会话的生产周期从什么时候,到什么时候结束?

会话:是客户与服务器之间的不中断的请求-响应序列。

开始:当一个未知的客户向web应用程序发送第一个请求时就开始了一个会话。

结束:当客户结束会话或服务器在一定时限内没有接到客户任何请求时,会话结束。

2. 服务器是如何识别管理属于某一个特定客户的会话的?

一个客户对应一个会话,服务器能够识别出请求来自于哪个客户的会话。

3. 什么是Cookie,它的作用是什么?Cookie会给客户端带来安全隐患吗?

Cookie:是客户访问Web服务器时,服务器在客户端用户硬盘上存放的信息,好像是服务器送给客户的“点心”。Cookie实际上是一小段的文本信息。

作用:可以在客户端上保存用户数据,起到简单的缓存和用户身份识别等作用;保存用户的登陆状态,用户进行登陆,成功登陆后,服务器生成特定的cookie返回给客户端,客户端下次访问该域名下的任何页面,将该cookie的信息发送给服务器,服务器经过检验,来判断用户是否登陆;记录用户的行为。

安全问题:客户可能认为Cookie会带来安全问题,因此禁用Cookie。事实上,Cookie并不会造成严重的安全威胁。Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统。另外,由于浏览器一般只允许存放300个Cookie,每个站点的Cookie最多存放20个,每个Cookie的大小限制为4 KB,因此Cookie不会塞满你的硬盘,更不会被用作“拒绝服务”攻击手段。

4. 如何使用隐藏表单域传递会话信息,一般用在什么情况下?

在HTML页面中,可以使用下面代码实现隐藏的表单域:

 <input type="hidden" name="session" value="a1234">;

当表单提交时,浏览器将指定的名称和值包含在GET或POST的数据中。这个隐藏域可以用来存储有关会话的信息。

实验报告

一、实验目的

1. 了解Web服务器对客户会话跟踪的各种方法;

2. 重点掌握使用HttpSession对象跟踪会话的方法;

3. 掌握使用Cookie技术跟踪会话的方法;

4. 了解URL重写和隐藏表单域的方法。

二、实验要求

1. 实验前进行预习,完成实验预习报告;

2.按照每一项实验内容进行上机实践与编程,将程序源代码和运行结果图附在实验报告中实验内容对应的部分。

3. 实验预习报告和实验报告打印装订在一起。

4. 将每一次实验的源代码按目录组织保存并压缩,按照老师指定的要求进行提交。代码保存方式如:exp04表示实验四的Web项目的名称,其下保存各项实验内容的源文件及相关资源,将整个exp04文件夹进行压缩后命名为班级-姓名-实验04,如计171-张三-实验04。

三、实验内容与步骤

1. 使用HttpSession对象管理会话。在名为exp04的Web项目下,创建一个名为ShowSessionInfo的Servlet,显示当前客户的会话ID、会话创建时间、最近一次访问会话的时间、该客户访问会话次数等信息,运行的结果要求如下图所示。

配置pom.xml依赖:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>exp04</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>exp04 Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <!-- servlet 版本和 tomcat 版本有对应关系,切记 -->
      <version>3.1.0</version>
      <!-- 这个意思是我们只在开发阶段需要这个依赖,部署到 tomcat 上时就不需要了 -->
      <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.14.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.24</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.31</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>exp04</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

ShowSessionInfo:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
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;

@WebServlet(name = "ShowSessionInfo",value = "/ShowSessionInfo")
public class ShowSessionInfo extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=gb2312");
        HttpSession session = request.getSession(true);
        String heading = null;
        String info="Information about your session";
        Integer accessCount = (Integer) session.getAttribute("accessCount");
        if(accessCount==null)
        {
            accessCount = new Integer(1);
            heading = "Welcome,enter this page first time! ";
        }
        else
        {
            heading = "Welcome Back! ";
            accessCount = accessCount+1;
        }

        session.setAttribute("accessCount",accessCount);
        PrintWriter out = response.getWriter();
        out.println("<HTML>");
        out.println("  <BODY><center>");
        out.println("<h2>"+heading + "</h2>" +"<h3>" +info+"</h3>");

        out.println("<table border='0'>");
        out.println("<tr bgcolor=\"ffad0\"><td><b>Info Type</b><td><b>Value</b>\n");
        out.println("<tr><td>ID:<td>"+session.getId()+"\n");
        out.println("<tr><td>Creation Time:<td>");
        out.println(""+new Date(session.getCreationTime())+"\n");
        out.println("<tr><td>Time of last access:<td>");
        out.println(""+new Date(session.getLastAccessedTime())+"\n");
        out.println("<tr><td>Access number:<td>"+accessCount+"\n");
        out.println("</table>");
        out.println(" </center> </BODY>");
        out.println("</HTML>");
    }
}

2. 使用HttpSession会话对象设计一个GuessNumberServlet.java,实现简单的猜数游戏:

doget()方法显示当前会话的相关信息,产生一个1-100的随机数并保存到session作用域中,显示表单让用户输入所猜数字,表单以post方式提交给该servlet本身进行处理。

dopost()方法中将用户输入的数字和session中保存的随机数进行比较,如果用户猜的结果正确,强制结束会话,通过超链接可以在此请求该Servlet重新开始一轮猜数游戏;如果结果错误,显示错误提示信息和猜数表单,允许用户重新猜数。

GuessNumberServlet:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;

@WebServlet(name = "GuessNumberServlet",value = "/GuessNumberServlet")
public class GuessNumberServlet extends HttpServlet{
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
            throws ServletException, IOException {
        int magic = (int)(Math.random()*101);
        HttpSession session = request.getSession();
        // 将随机生成的数存储到会话对象中
        session.setAttribute("num",new Integer(magic));

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("猜数字:有一个0到100之间的数字,猜猜看是多少?");
        out.println("<form action='GuessNumberServlet' method='post'>");
        out.println("<input type='text' name='guess' />");
        out.println("<input type='submit' value='确定'/>");
        out.println("</form>");
        out.println("</body></html>");
    }

    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
            throws ServletException, IOException {
        // 得到用户猜的数
        int guess = Integer.parseInt(request.getParameter("guess"));
        HttpSession session = request.getSession();
        // 从会话对象中取出随机生成的数
        int magic = (Integer)session.getAttribute("num");

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        if(guess==magic){
            session.invalidate(); // 销毁会话对象
            out.println("祝贺你,答对了!");
            out.println("<a href = 'GuessNumberServlet'>再猜一次.</a>");
        }else if(guess>magic){
            out.println("太大了! 请重新猜~");
        }else{
            out.println("太小了! 请重新猜~");
        }
        out.println("<form action='GuessNumberServlet' method='post'>");
        out.println("<input type='text' name='guess' />");
        out.println("<input type='submit' value='确定'/>");
        out.println("</form>");
        out.println("</body></html>");
    }
}

3. 编写一个CheckUserServlet,通过Cookie实现自动登录的功能。当用户以get方式请求该Servlet时,判断来自请求的cookie中是否包含用户的登录名和口令,如果有判断是否合法,如果通过验证显示欢迎信息;否则显示登录表单让用户重新填写用户名和口令,表单提交以post方式请求CheckUserServlet进行处理,如果用户登录成功并且勾选了“自动登录”,则提示登录成功,并向客户端发送cookie信息保存用户名和口令,否则提示登录失败,并在浏览器端显示登录表单让用户重新登录。

CheckUserServlet:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;

@WebServlet("/CheckUserServlet")

public class CheckUserServlet extends HttpServlet {
    String message =null;
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String value1 = "",value2="";
        Cookie cookie =null;
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(int i=0;i<cookies.length;i++){
                cookie = cookies[i];
                if(cookie.getName().equals("username")){
                    value1 = cookie.getValue();
                }
                if(cookie.getName().equals("password")){
                    value2 = cookie.getValue();
                }
            }
            if (value1.equals("scx")&&value2.equals("12345")){
                message = "欢迎您!"+value1+"再次登录该页面!";
                request.getSession().setAttribute("message",message);
                response.sendRedirect("welcome.jsp");
            }else {
                response.sendRedirect("login.jsp");
            }
        }else {
            response.sendRedirect("login.jsp");
        }
    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String username = request.getParameter("username").trim();
        String password = request.getParameter("password").trim();
        if (!username.equals("scx")||!password.equals("12345")){
            message = "用户名或口令不正确,请重试!";
            request.getSession().setAttribute("message",message);
            response.sendRedirect("login.jsp");
        }else {
            //如果用户选中了“自动登录”复选框,向浏览器发送连个Cookie
            if ((request.getParameter("check")!=null) && (request.getParameter("check").equals("check"))){
                Cookie nameCookie = new Cookie("username",username);
                Cookie pswdCookie = new Cookie("password",password);
                nameCookie.setMaxAge(60*60);
                pswdCookie.setMaxAge(60*60);
                response.addCookie(nameCookie);
                response.addCookie(pswdCookie);
            }
            message ="你已成功登录!";
            request.getSession().setAttribute("message",message);
            response.sendRedirect("welcome.jsp");
        }
    }
}

login.jsp: 

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<html>
<head>
    <title>login</title>
</head>
<body>
${sessionScope.message}<br>
<form action="CheckUserServlet" method="post">
    请输入用户名和口令:<br>
    用户名:<input type="text" name="username"/><br>
    口令:<input type="password" name="password"/><br>
    <input type="checkbox" name="check" value="check"/>自动登录<br>
    <input type="submit" value="提交"/>
    <input type="reset" value="重置"/>
</form>
</body>
</html>
welcome.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>welcome</title>
</head>
<body>
    <h1>欢迎你</h1>
</body>
</html>

4. 编写HomeServlet.java,对通过超链接请求的两个URL进行重写,在浏览器中禁用Cookie后,servlet运行效果要求如下图所示。

HomeServlet:

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 java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //HttpSession session=request.getSession();
        PrintWriter out = response.getWriter();
        String url1 = response.encodeURL("GuessNumberServlet");
        String url2 = response.encodeURL("CheckUserServlet");

        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print(" A test page showing two URLs:<br> ");
        out.println("<a href=\"" + url1 + "\">View GuessNumber Servlet</a><br>");
        out.println("<a href=\""+ url2 + "\">View CheckUser Servlet</a><br>");
        out.println("  </BODY>");
        out.println("</HTML>");
    }
}

 

 

四、思考题

1. 如何理解会话失效与超时?如何通过程序设置最大失效时间?如何通过Web应用程序部署描述文件设置最大超时时间?二者有什么区别?

答:当用户在一个指定的期限内处于不活动状态时,就将用户的会话终止,会话失效,超过设定时间终止是会话超时。public void setMaxInactiveInterval(int Interval)设置最大失效时间。在部署文件中下中设置最大超时时间。一个是通过编程方式设置,一个是在部署时就已设置。

2. 能否通过客户机的IP地址实现会话跟踪?

答:容器不能使用客户的IP地址唯一标识客户。因为是通过局域网访问Internet尽管在局域网中每个客户有一个IP地址,但对于服务器来说,客户的实际IP地址是路由器的IP地址,所以该局域网的所有客户的IP地址都相同。

3. 假如开发的Web应用程序是假设客户支持Cookie的,但应用程序部署后,你发现大多数客户禁用了Cookie,这对应用程序有何影响?如何修改它?

答:来自网站的所有Cookie都被阻止,并且计算机上现有的Cookie不能被网站读取。可在Internet选项中设置。

java应用软件程序设计
04-28
这里边包括:第1章 Java图形用户界面编程 1实例1 布局管理 2实例2 设计软件启动界面 9实例3 实现多色窗口 11实例4 切分窗口 13实例5 丰富多彩的按钮 15实例6 在窗口中显示背景图 16实例7 在窗体中绘制图形 18实例8 利用JNI实现窗口特效 20实例9 文件选择对话框 24实例10 改变字体 26实例11 应用JTree 28实例12 应用JTable 30实例13 记事本 32实例14 使用JTextPane 36实例15 实现多文档视图 37实例16 使用进度条 39实例17 使用工具提示 42实例18 不同界面的风格 43第2章 Java的二维和三维图形处理 45实例19 颜色处理 46实例20 合成效果 47实例21 多种字体效果 49实例22 合成两个图片 53实例23 实现多种线形 58实例24 混合效果 62实例25 纹理与色彩处理 63实例26 实现填充效果 66实例27 变形与转换处理 67实例28 绘制弧线 69实例29 剪裁效果 74实例30 跳动的文字特效 78实例31 火焰与水纹特效 82实例32 盖房子特效 91实例33 旋转的方块特效 95实例34 光照效果特效 103第3章 Java输入/输出编程 109实例35 读取文件 110实例36 写入文件 111实例37 压缩文件 112实例38 打印文本文件 114实例39 读取配置文件 115实例40 流操作 117实例41 管道操作 118实例42 标准I/O重定向 121实例43 文件过滤器 122实例44 获取文件信息 123第4章 Java网络编程 125实例45 选择字体 126实例46 UDP与TCP/IP的简单应用 129实例47 聊天室 131实例48 浏览FTP 136实例49 局域网广播 147实例50 建立HTTP连接 151实例51 迷你浏览器 152实例52 扫描应用端口 154实例53 监控HTTP 155实例54 收发电子邮件 156实例55 一个简单的代理服务器 164实例56 扫描网站信息 173实例57 远程方法调用 174实例58 调用JINI方法 176第5章 Java数据库编程 179实例59 应用JDBC-ODBC桥 180实例60 使用单独JDBC连接驱动程序 184实例61 数据库基本操作 185实例62 使用游标 189实例63 使用事务 191实例64 实现SQL语句的检索功能 192实例65 SQL嵌套检索 194实例66 获取数据库基本信息 195第6章 Java C/S结构编程 197实例67 实现C/S多线程 198实例68 客户端程序 200实例69 服务器端程序 201实例70 C/S结构聊天室 203实例71 基于C/S的小游戏 209实例72 应用C/S数据库 237实例73 实现客户端程序 242实例74 实现一个简单的代理服务器 246实例75 C/S结构的分布式运算 248第7章 Java B/S结构编程 253实例76 简单的Servlet程序 254实例77 简单的留言簿 256实例78 JSP+Java Bean的计数器 258实例79 数据库查询 260实例80 文件的上传下载 262实例81 收发E-mail 267实例82 B/S结构的聊天室 269实例83 网上选课 276实例84 B/S结构的商业应用——购物车 282实例85 通过JSP调用Applet程序 285实例86 JSP与XML的结合 288第8章 Java安全控制编程 291实例87 控制访问权限 292实例88 产生密钥 296实例89 单钥加解密 299实例90 双钥加解密 301实例91 数字签名 303实例92 实现SSL协议 306实例93 简单的HTTPS服务 314第9章 Java Web Service编程 319实例94 使用DOM的层次模型 320实例95 使用SAX事件模型 324实例96 JAXP编程 327实例97 JDOM编程 331实例98 简单的SOAP应用 336实例99 访问SOAP RPC服务 339实例100 SOAP消息编程 342实例101 构建SOAP Script服务 347实例102 应用SOAP EJB Bean服务 354实例103 部署SOAP COM服务 358实例104 查询UDDI信息 364第10章 Java 2 Platform Enterprise Edition编程 367实例105 构建简单的EJB 368实例106 无状态会话Bean编程 371实例107 简单的累加器 374实例108 简单Bean管理的实体 377实例109 创建CMP EntityBean 386实例110 编写MessageDrivenBean 392实例111 使用JNDI 396实例112 各种EJB之间的调用过程 397实例113 使用B/S结构的EJB 402实例114 使用C/S结构的EJB组件服务 405实例115 与时间有关的函数 407实例116 EJB与UML的对应关系 412实例117 C/S结构的RMI-IIOP应用 414实例118 使用JTA与JTS 417实例119 Request-Reply模式的JMS应用 421实例120 使用Java IDL 426实例121 EJB与CORBA的交互 430实例122 基于EJB的真实世界模型 433实例123 EJB的商业应用——定购单 447第11章 Java 2 Platform Micro Edition编程 475实例124 插入和替换表单元素 476实例125 使用线程与定时 478实例126 J2ME绘图 480实例127 基于J2ME的小游戏 483实例128 建立无线HTTP连接 485实例129 收发短信 487实例130 获取基金报价 490第12章 JNI编程 493实例131 简单的JNI调用 494实例132 调用Windows API 495实例133 通过JNI运行OpenGL动画 496实例134 JNI与COM之间的调用 500实例135 隐藏Java控制台 502实例136 监控内存 505实例137 获取本机的Mac地址 508实例138 获取Java系统信息 509实例139 控制Java与C++程序的通信 510实例140 访问Windows注册表 514第13章 Java配置与集成 523实例141 J2SDK的安装配置 524实例142 使用第三方包 525实例143 安装配置Tomcat 526实例144 安装配置Apache 528实例145 安装配置WebLogic 529实例146 整合Tomcat与IIS 531实例147 整合Tomcat与Apache 532实例148 整合JBuilder与WebLocig 533实例149 安装、编译和执行一个MIDlet 535实例150 构造Jsp/javabean开发和发布环境 537 还包括第1章 记忆测试软件1.1. 设计内容1.2. 设计要求1.3. 总体设计1.4. 具体设计1.4.1. 运行效果与程序发布1.4.2. 主类Memory1.4.3. 方块 Block1.4.4. 记忆测试板MemoryTestPane1.4.5. 显示成绩 ShowRecord1.4.6. 记录成绩 Record1.4.7. 随机排列图标 RandomSetIcon1.4.8. 测试者 People1.5. 课程设计作业第2章 计算器2.1. 设计内容2.2. 设计要求2.3. 总体设计2.4. 具体设计2.4.1. 运行效果与程序发布2.4.2. 主类 ComputerPad2.4.3. 数值按钮NumberButton2.4.4. 运算符号按钮OperationButton2.5. 课程设计作业第3章 HANNOI-塔3.1. 设计内容3.2. 设计要求3.3. 总体设计3.4. 具体设计3.4.1. 运行效果与程序发布3.4.2. 主类 Tower3.4.3. Hannoi-塔 HannoiTower3.4.4. 塔点 TowerPoint3.4.5. 盘子 Disk3.5. 课程设计作业第4章 JPEG图象生成器4.1. 设计内容4.2. 设计要求4.3. 总体设计4.4. 具体设计4.4.1. 运行效果与程序发布4.4.2. 主类 MakeJPEG.java4.5. 课程设计作业第5章 标准化考试系统 (单机)5.1. 设计内容5.2. 设计要求5.3. 总体设计5.4. 具体设计5.4.1. 运行效果与程序发布5.4.2. 主类EnglishTest5.4.3. 考试区域TestArea5.4.4. 读取试题 ReadTestquestion5.5. 课程设计作业第6章 标准化考试系统 (C/S网络)6.1. 设计内容6.2. 设计要求6.3. 总体设计6.4. 具体设计6.4.1. 运行效果与程序发布6.4.2. 客户端主类Client6.4.3. 客户端选择试题界面ChoiceFile6.4.4. 客户端考试界面ClientTestArea6.4.5. 服务器端主类Server6.4.6. 服务器端读取试题 ReadTestquestion6.5. 课程设计作业第7章 标准化考试系统 (B/S网络)7.1. 设计内容7.2. 设计要求7.3. 总体设计7.4. 具体设计7.4.1. 运行效果与程序发布7.4.2. 客户端主类ClientBS7.4.3. 客户端选择试题界面ChoiceFile7.4.4. 客户端考试界面ClientTestArea7.4.5. 服务器端主类Server7.4.6. 服务器端读取试题 ReadTestquestion7.5. 课程设计作业第8章 日历记事本8.1. 设计内容8.2. 设计要求8.3. 总体设计8.4. 具体设计8.4.1. 运行效果与程序发布8.4.2. 主类CalendarPad8.4.3. 记事本NotePad8.4.4. 年Year8.4.5. 月Month8.5. 课程设计作业18.6. 课程设计作业2第9章 学籍管理系统9.1. 设计内容9.2. 设计要求9.3. 总体设计9.4. 具体设计9.4.1. 运行效果与程序发布9.4.2. 主类StudentManager9.4.3. 录入界面StudentSituation9.4.4. 查询界面Inquest9.4.5. 修改界面ModifySituation9.4.6. 删除界面Delete9.4.7. 学生对象Student9.5. 课程设计作业第10章 图书查询系统 (B/S网络)10.1. 设计内容10.2. 设计要求10.3. 总体设计10.4. 具体设计10.4.1. 运行效果与程序发布10.4.2. 客户端主类DatabaseClient10.4.3. 服务器端主类DatabaseServer10.5. 课程设计作业第11章 中国象棋打谱软件11.1. 设计内容11.2. 设计要求11.3. 总体设计11.4. 具体设计11.4.1. 运行效果与程序发布11.4.2. 主类 Chess11.4.3. 对弈棋盘ChessBoard11.4.4. 棋子ChessPiece11.4.5. 棋点 ChessPoint11.4.6. 走棋法则Rule11.4.7. 步骤MoveStep11.4.8. 记录棋谱MakeChessManual11.4.9. 棋谱演示Demon11.5. 课程设计作业111.6. 课程设计作业2第12章 魔板游戏12.1. 设计内容12.2. 设计要求12.3. 总体设计12.4. 具体设计12.4.1. 运行效果与程序发布12.4.2. 主类PuzzleFrame12.4.3. 魔板PuzzlePad12.4.4. 魔板中的点SquarePoint12.5. 课程设计作业第13章 挖雷游戏13.1. 设计内容13.2. 设计要求13.3. 总体设计13.4. 具体设计13.4.1. 运行效果与程序发布13.4.2. 主类Game13.4.3. 方块 Block13.4.4. 雷区 MineSquare13.4.5. 雷标数目 FindAroundMineMarkNumber13.4.6. 雷标判断 DetermineMineMarkIsRightOrWrong13.4.7. 成片挖开区域 DetermineDigArea13.4.8. 无雷连通区 FindSafeArea13.4.9. 随机布雷 RandomSetMine13.4.10. 周围地雷个数FindAroundMineNumber13.4.11. 显示剩余雷数CountMine13.4.12. 计时器TimeCount13.4.13. 英雄榜录入对话框Record13.4.14. 显示英雄榜对话框ShowRecord13.4.15. 挖雷成功DecideWinner13.5. 课程设计作业第14章 网络聊天室 (B/S模式)14.1. 设计内容14.2. 设计要求14.3. 总体设计14.4. 具体设计14.4.1. 运行效果与程序发布14.4.2. 客户端主类ClientChat14.4.3. 客户端输入妮称界面InputNameTextField14.4.4. 客户端聊天界面ChatArea14.4.5. 服务器端主类ChatServer14.5. 课程设计作业第15章 局域网络广播系统15.1. 设计内容15.2. 设计要求15.3. 总体设计15.4. 具体设计15.4.1. 运行效果与程序发布15.4.2. 客户端主类Receive15.4.3. 服务器端主类BroadCastWord15.5. 课程设计作业
PHPWeb开发技术指南——pdf格式
03-23
译者序 序言 前言 第一部分 高级PHP 第1章 开发思想 1 1.1 PHP与我 1 1.2 计划的重要性 2 1.3 编码规范 3 1.3.1 选择名字 3 1.3.2 使代码更易读 5 1.3.3 添加注释 8 1.3.4 选择谈话式名字 13 1.3.5 保持清晰一致的接口 15 1.3.6 将代码结构化为逻辑群 16 1.3.7 抽取单独的代码块 16 1.4 使用文件将函数分类 16 1.5 编写文档 17 1.6 一个API设计实例 18 1.7 小结 22 第2章 高级语法 23 2.1 PHP语法 23 2.2 定义常量 24 2.3 数组函数 25 2.4 PHP和OOP 31 2.4.1 类:PHP 3.0和PHP 4.0的对比 35 2.4.2 执行类 36 2.4.3 读取对象 37 2.4.4 构造函数 38 2.4.5 继承 38 2.4.6 特殊的OOP函数 39 2.5 链接清单 41 2.6 关联数组 49 2.6.1 多维数组 50 2.6.2 变量参数 51 2.7 多态和自变代码 62 2.7.1 动态函数生成程序 63 2.7.2 自变计数器 67 2.8 小结 68 第3章 应用程序设计:一个实际的例子 69 3.1 项目概观 69 3.2 比较技术环节 70 3.3 IRC网络基础 73 3.4 使应用程序适用于网络 75 3.5 连接网络的接口 76 3.5.1 接口结构 78 3.5.2 下游信息交流 79 3.5.3 上游信息交流 80 3.5.4 在共享的存储器中设置一个标志 83 3.5.5 用户接口 84 3.5.6 开发者的接口 84 3.5.7 HTML开发者的接口 85 3.5.8 代码开发者的接口 85 3.6 管理和安全 90 3.6.1 网络等级 90 3.6.2 PHP/Web服务器等级 90 3.6.3 数据库等级 90 3.6.4 IRC等级 91 3.7 执行 91 3.8 小结 91 第二部分 Web应用 第4章 Web应用程序思想 93 4.1 HTTP和“会话” 93 4.1.1 保持状态 93 4.1.2 用cookies进行“会话”ID传输 95 4.1.3 URL手工改写 95 4.1.4 动态路径 96 4.1.5 DNS技巧 98 4.1.6 实际应用中的折衷方案 99 4.1.7 PHP的内嵌“会话”库 100 4.2 安全性考虑 106 4.2.1 不要信任Web 107 4.2.2 不要重新发明加密法 111 4.2.3 开发组需要资深人员 118 4.2.4 认证 118 4.3 为什么适用性很重要 120 4.3.1 Web应用程序的“适用性” 121 4.3.2 打折式适用性工程 124 4.3.3 适用性:只要做就可以了 126 4.4 小结 126 第5章 基本网络应用程序策略 127 5.1 PHP正常表格 127 5.2 方案策划 133 5.2.1 团队合作 133 5.2.2 目录结构 134 5.3 CVS:一致本系统 135 5.3.1 CVS时间节省器: GUIS和CVS web 139 5.3.2 高级CVS 140 5.4 三层式应用程序 145 5.4.1 传统的客户端/服务器 145 5.4.2 PHP和多层应用程序 146 5.4.3 PHP和COM 147 5.4.4 PHP和Java 149 5.5 小结 150 第6章 PHP数据库访问 151 6.1 PHPLib:PHP基础库 151 6.1.1 PHPLib的历史 151 6.1.2 优点和缺点 152 6.1.3 重要文件 152 6.1.4 PHPLib客户化 152 6.2 数据库基本概念 153 6.2.1 可移植性 153 6.2.2 调试模式 154 6.2.3 错误处理 154 6.2.4 DB_Sql实例 154 6.2.5 会话 156 6.2.6 自动撤退 157 6.2.7 网页捕捉 157 6.2.8 串行器 157 6.2.9 会话实例 157 6.2.10 缩写I:page_open( ) 160 6.2.11 缩写II:purl( )、url( )和pself( ) 161 6.3 认证 162 6.3.1 PHP认证的优点 162 6.3.2 Auth实例 162 6.3.3 Auth内核 163 6.3.4 管理许可等级 165 6.3.5 位运算 166 6.4 小结 170 第7章 尖端应用程序 171 7.1 知识库 171 7.1.1 必要条件清单 172 7.1.2 条件清单 173 7.1.3 模板类 175 7.1.4 SQL递推式 179 7.1.5 身份确认 180 7.1.6 完成的产品 180 7.2 PHP和XML 180 7.2.1 什么是XML 180 7.2.2 DocBook 183 7.2.3 WML(Wireless Markup Language) 184 7.2.4 RDF—Resource Description Framework 184 7.2.5 XML文档 184 7.2.6 PHP和Expat 190 7.2.7 DOM—Document Object Model 197 7.2.8 LibXML—一个基于DOM的XML 分析 200 7.3 用WDDX相互交换数据 205 7.3.1 WDDX 205 7.3.2 挑战 205 7.3.3 可能的情况 206 7.3.4 用WDDX抽象化数据 206 7.3.5 WDDX数据类型 207 7.3.6 PHP和WDDX 208 7.3.7 WDDX函数 208 7.4 小结 210 第8章 案例研究 211 8.1 BizChek.com 211 8.1.1 Web 邮件 211 8.1.2 选择PHP 212 8.1.3 渴望升级 213 8.1.4 结论 213 8.2 SixCMS 213 8.2.1 公司背景 213 8.2.2 开放代码的商务 214 8.2.3 为什么用PHP 214 8.2.4 技术考虑事项 214 8.2.5 实际生活中的PHP 215 8.2.6 PHP:一个商业优势 216 8.3 Marketplayer.com 216 8.3.1 公司的背景 216 8.3.2 PHP产品 217 8.3.3 为什么选择PHP 217 8.3.4 在MarketPlayer.com产品开发中使用PHP的优势 217 8.3.5 PHP实际生活中的竞争 218 8.3.6 会话 218 8.3.7 PHP服务器集成 219 8.3.8 代码管理 219 8.3.9 前景 219 8.4 小结 219 8.5 参考 220 第三部分 深入研究PHP 第9章 扩充PHP 4.0:探究PHP内核 221 9.1 概述 221 9.2 什么是Zend?什么是PHP? 221 9.3 扩充可能性 222 9.3.1 外部模块 222 9.3.2 内嵌模块 223 9.3.3 Zend引擎 223 9.4 源代码格式 223 9.4.1 宏 224 9.4.2 内存管理 225 9.4.3 目录和文件函数 225 9.4.4 字符串处理 226 9.4.5 复杂类型 226 9.5 PHP的自动建造系统 226 9.6 创建扩充 228 9.7 编辑模块 229 9.7.1 编辑使用Make 229 9.7.2 手工编辑 229 9.8 使用扩充 230 9.9 故障处理 231 9.10 源代码讨论 231 9.10.1 模块结构 231 9.10.2 标题文件包含 231 9.10.3 声明输出函数 232 9.10.4 Zend函数块的声明 232 9.10.5 Zend模块的声明 234 9.10.6 Get_module()的执行 236 9.10.7 所有输出函数的实施 236 9.10.8 小结 237 9.11 接收变量 237 9.11.1 决定变量的数目 237 9.11.2 获取变量 238 9.11.3 处理数目变化的变量/选项参数 238 9.11.4 访问变量 240 9.11.5 处理参考变量传递的参数 243 9.11.6 为其他参数确保写安全 245 9.12 创建变量 246 9.12.1 概述 246 9.12.2 长(整)型 249 9.12.3 双精度(浮点)型 249 9.12.4 字符串 249 9.12.5 布尔型 250 9.12.6 数组 250 9.13 对象 253 9.14 资源 254 9.15 利用自动全局变量创建的宏 255 9.16 复制变量内容:复制构造函数 256 9.17 返回值 257 9.18 打印信息 258 9.18.1 phpinfo()中包含输出 259 9.18.2 执行信息 260 9.19 启动和关闭函数 261 9.20 调用用户函数 261 9.21 下一步该做些什么 265 9.22 参考:一些配置宏 265
web实验报告电子.rar
07-29
web实验报告:1.jsp开发环境的配置运行 2.HTML编程基础 3.Servelet技术 4.Servelet容器模型 5.会话管理 6.JSP基本语法与页面指令 7.JSP隐含对象和作用域 8 .Web组件重用和javaBeans 9表达式语言的使用 10JSTl与标签文件 11Servelet事件监听 12Servelet过滤器的使用 13Web应用的安全性 14 javaweb期中实验
网络应用程序设计.docx
06-21
网络应用程序设计 1 一、 选择题 (1) UDP可以提供的端口数是65535 (2) 根据TCP或UDP端口的分配规则,端口254保留给特定的服务 (3) 保留给其他服务的端口是 256 (4) 在Internet中,用三元组标识一个应用层进程。这种三元组,指的是传输层 协议,主机的IP地址,传输层的端口号 (5) 在Internet中,可以标识一个完整的网间通信的是传输层协议,本地机IP地 址,本地机传输层端口,远地机IP地址,远地机传输层端口 (6) 规定纯文本电子邮件信件的格式的是 RFC822 (7) 接收电子邮件的邮局协议是 POP3 (8) 因特网上使用最多的一种应用是 email (9) SMTP命令的一般的格式命令关键字参数<CRLF> (10) SMTP客户问候SMTP服务器命令格式是 HELO 发送方的主机名<CRLF> (11) 写信字段的格式是 MAIL FROM:发信人的电子邮件地址<CRLF> (12) 请求发送邮件内容命令格式: DATA <CRLF> (13) 空操作命令格式: NOOP <CRLF> (14) 系统状态或系统帮助应答码字是 211
《计算机应用基础项目化教程》——11认知计算机-ppt课件.pptx
06-01
1 任 务 描 述 工 作 情 境 某 办公室小白,刚走进岗位,办公室配备了计算机,小白感觉操作起来不是游刃有余,此时他在同事的帮助下开始探索神秘的电脑,真正走进计算机的世界。 计 算 机 释 义 计算机(Computer)是一种能够按照事先存储的程序,自动、高速地进行大量数值计算和各种信息处理的现代化智能电子设备。 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第1页。 精品资料 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第2页。 你怎么称呼老师? 如果老师最后没有总结一节课的重点的难点,你是否会认为老师的教学方法需要改进? 你所经历的课堂,是讲座式还是讨论式? 教师的教鞭 "不怕太阳晒,也不怕那风雨狂,只怕先生骂我笨,没有学问无颜见爹娘 ……" "太阳当空照,花儿对我笑,小鸟说早早早……" 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第3页。 2 任 务 展 示 第一层 计算机硬件 第二层 数据库管理系统 第二层 系统软件 第二层 语言处理程序 第三层 办公软件 第三层 聊天工具 第三层 游戏软件 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第4页。 计 算 机 雏 形 计 算 机 人 物 计 算 机 发 展 计 算 机 应 用 3 完 成 思 路 变 才是永远的不变 算 筹 算 盘 1 2 加 法 机 3 乘 法 机 4 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第5页。 计 算 机 雏 形 计 算 机 人 物 计 算 机 发 展 计 算 机 应 用 完 成 思 路 4 计算机进化最具贡献性人物 巴贝奇 差分机 图 灵 图灵机 冯·诺依曼 体系结构 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第6页。 计 算 机 人 物 计 算 机 发 展 计 算 机 应 用 计 算 机 雏 形 完 成 思 路 5 代别 起迄 年份 代表机器 硬 件 软件 应用领域 逻辑元件 主存储器 其他 第一代 1964~1957 ENIACADVACUNIVAC-1IBM-704 电子管 水银延迟线、磁鼓、磁芯 输入输出主要采用穿孔卡片 机器语言、汇编语言 科学计算 第二代 1958~1964 IBM-7090ATLAS 晶体管 普遍采用磁芯 外存开始采用磁带、磁盘 高级语言、管理程序、监控程序、简单的操作系统 科学计算、数据处理、事务管理 第三代 1965~1970 IBM-360CDC-6000PDP-11NOVA 集成电路 磁芯、半导体 外存普遍采用磁带、磁盘 多种功能较强的操作系统、会话式语言 实现标准化系列化,应用于各个领域 第代 1970~至今 IBM-4300VAX-11IBM-PC 超大规模集成电路 半导体 各种专用外设,大容量磁盘、光盘等普遍使用 可视化操作系统、数据库、多媒体、网络软件 广泛应用于所有领域 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第7页。 计 算 机 雏 形 计 算 机 人 物 计 算 机 发 展 计 算 机 应 用 完 成 思 路 6 科 学 计 算 数 值 计 算 数 据 处 理 信 息 处 理 自 动 控 制 计算机辅助设计 计算机辅助教学 多媒体技术应用 计算机 应用领域 人 工 智 能 方 面 的 研 究 和 应 用 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第8页。 相 关 知 识 7 应会知识 重点知识 计算机近代史; 计算机的特点; 计算机的分类; 正确打开/关闭计算机; 计算机使用注意事项; 自主学习 教师演示 知 识 列 表 难点知识 计算机系统的组成; 计算机硬件系统的组成; 计算机软件系统的组成; 计算机计数制转换; 教师讲解 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第9页。 8 相 关 知 识 计 算 机 系 统 的 组 成 计算机系统 硬件系统 软件系统 主 机 外 设 系统软件 应用软件 中央处理器 内存储器 外存储器 输入设备 输出设备 运 算 器 控 制 器 寄 存 器 R A M R O M 硬 盘 光 盘 MP3 U盘 键 盘 扫 描 仪 鼠 标 显 示 器 打 印 机 绘 图 仪 操 作 系 统 语言处理程序 编 辑 程 序 连 接 程 序 管 理 程 序 调 试 程 序 故障检查程序 监 控 程 序 诊 断 程 序 各种软件包 数据库应用程序 《计算机应用基础项目化教程》——11认知计算机-ppt课件全文共36页,当前为第10页。 9 相 关 知 识 计
基于tomcat的Java-web开发;在线教学网站的开发--上传文件、下载文件和用户会话管理
kingJamesbond的博客
11-15 1716
实验目的 1)了解文件上传和下载的技术原理。 2)加深对会话的理解。 3)掌握servlet程序开发和调试的方法,增强上机动手的能力。 实验内容 在线教学网站系统增加文件上传和下载模块,实现如下功能: 1)实现在客户端将文件上传到服务器固定目录下。 2)实现在客户端从服务器固定目录下载文件。 3)当用户再次进入考试页面,可以显示上次考试的分数。(选择会话或数据库完成) 说明:文件的上传和下载目录由自己设定。 FileUpload.jsp <%@ page contentType="text/html;
JavaWeb学习篇6_IDEA设置Servlet模板、会话技术、Cookie、Cookie显示上次登录时间小案例、Session、JSP简单入门学习、验证码验证登录验证小案例
xiaosi的博客
11-03 713
目录 设置IDEA中的Servlet模板 会话技术 Cookie 简单入门使用 实现原理 Cookie细节 特点及作用 小案例:记住上次访问时间 Session 概念 快速入门使用 原理 存活时间 与Cookie的区别 JSP JSP入门学习(为了完成验证码验证小案例) 概念 原理 JSP脚本 JSP的内置对象 开始 IDEA开发环境设置Servlet注解模板 一、会话技术 会话就是发生在浏览器和服务器之间请求、响应的过程 一次会话结束于浏览器或者服务器关闭
会话管理(Cookies&Session)
qq_56794643的博客
09-25 1048
Session是指使用HttpSession对象实现会话跟踪的技术,是一种在服务器端保持会话跟踪的解决方案。Session的工作原理:服务器在创建会话对象时,会为其分配一个唯一的会话标识——SessionId,以“JSESSIONID”的属性名保存在客户端Cookie中,在用户随后的请求中,服务器通过读取Cookie中的JSESSIONID属性值来识别不同的用户,从而实现对每个用户的会话跟踪。①Cookie是把用户的数据写给用户的浏览器。②Session技术把用户的数据写。
实验3 网络程序设计
weixin_44001521的博客
12-03 1013
又是帮别人写的,之前有做过,有点经验,稍作修改,有需要的看看 基本交互功能可以直接看:多线程聊天室学习改进 1、前述 1.1 、题目要求 1.实验目的 (1)掌握Java.IO包的用法; (2)掌握Java.Net包的用法; (3)掌握一个完整应用程序的设计、实施及调试的方法 2.实验内容 请写一个基于Socket的聊天程序,两人可以加入一个组进行聊天。程序可以是基于Terminal I/O). 3.提示 (1)程序应是基于Socket,其中该程序即可以做服务器也可以做客户端; (2)设计两个类Serve
实验七 网络程序设计实验
无奈清风吹过的博客
06-17 734
完整实验报告及源码链接:https://download.csdn.net/download/qq_29711355/85641623练习Socket网络访问方法,理解网络程序的设计思想与实现方法。设计网络聊天程序,实现如下功能: (1)聊天两端具有相同的界面,包括能输入消息的文本框、发送消息按钮、消息列表文本框; (2)任意一端均可以实时发送和接收消息,并在自身的消息列表中显示消息记录。1、正确设计图形用户界面; 2、完成网络访问的界面和功能设计; 3、进行测试并分析测试结果; 4、简要说明你在该实验中的
WEB应用开发技术JSP实验指导书1.doc
10-30
WEB应用开发技术JSP实验指导书1.doc
Linux下软硬链接和动静态库制作详解
最新发布
m0_62537611的博客
04-27 634
软硬链接有什么本质区别:有没有独立的inode软链接有独立的inode,所以软链接是一个独立的文件硬链接没有独立的inode,所以硬链接不是一个独立的文件软链接就相当于你在windows下给一个应用创建了一个快捷方式。
【Linux】常用命令
m0_54666135的博客
04-23 1398
介绍一些常用的操作文件的命令,有cd命令切换目录、创建目录mkdir、删除空目录rmdir、删除文件rm、复制文件cp、移动文件mv等等操作。
Linux文件/目录高级管理一 头歌
2301_79585673的博客
04-22 652
Linux文件/目录高级管理
串口服务器可以直接连接工业路由器吗
有人物联网的博客
04-24 953
例如,在电力、水利、环保等行业的远程监控系统中,通过串口服务器将现场设备的串口数据转换为网络数据,再利用工业路由器将数据传输到远程监控中心,实现实时数据监控、故障预警和远程控制等功能。这种连接方式不仅扩展了串口设备的通信范围和功能,还提高了通信的稳定性和可靠性,为工业物联网的应用和发展提供了有力支持。首先,需要确保串口服务器和工业路由器的兼容性,选择适合的接口和协议进行连接。在工业物联网的快速发展中,串口服务器与工业路由器的搭配使用越来越广泛,为传统行业提供了更加高效、稳定的数据通信解决方案。
Linux网络编程---多进/线程并发服务器
qq_51647149的博客
04-25 565
多进程并发服务器及多线程并发服务器的实现
如何利用美国站群服务器实现有效的SEO优化策略?
zonghengcloud的博客
04-24 397
站群服务器作为一种有效的SEO策略,可以通过多个相关联的网站在不同服务器上的部署,增强网站的权威性和链接多样性。尤其是在利用美国站群服务器时,可以更好地服务于目标美国市场,同时借助美国作为互联网枢纽的优势,提高全球访问速度和稳定性。通过以上策略,可以充分利用美国站群服务器的优势,实现有效的SEO优化,提升网站在搜索引擎中的排名和曝光度。持续的努力和调整将有助于实现长期的SEO成功,推动业务的增长和发展。确保每个网站都有独立的IP地址、不同的CMS、以及独特的内容和设计,避免被搜索引擎识别为作弊行为。
shiro会话管理数据库设计
09-03
为了实现Shiro的会话管理功能,你可以设计一个简单的数据库模式。以下是一个示例: ```sql CREATE TABLE sessions ( session_id VARCHAR(50) PRIMARY KEY, session_data TEXT, start_time TIMESTAMP, last_access_time TIMESTAMP, expire_time TIMESTAMP ); ``` 上述表格包含以下字段: - `session_id`:会话ID,作为主键。 - `session_data`:存储会话的序列化数据,可以使用JSON或其他格式。 - `start_time`:会话开始时间。 - `last_access_time`:最近一次访问会话的时间。 - `expire_time`:会话的过期时间。 你可以根据实际需求进行调整和扩展。当有新会话创建时,你可以向`sessions`表中插入一条新记录;当会话数据更新时,你可以更新相应的记录;当会话过期或被删除时,你可以从表中删除相应的记录。 请注意,这只是一个简化的示例,实际的数据库设计可能与此不同,具体取决于你的需求和技术栈。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Java实验——定义一个表示学生信息的类Student,要求如下: 43163
  • 边学边记——Java中的输入输出 14169
  • 如何使用Visual Studio 2013创建一个c程序 12730
  • Java实验——编写一个程序,实现字符串大小写的转换并倒序输出 8203
  • Java实验——设计一个抽象类图形类 6867

分类专栏

  • Java实验 10篇
  • 软件测试 3篇
  • 网络应用程序设计实验 4篇
  • 学习记录 45篇
  • 刷题记录 43篇

最新评论

  • 边学边记——Java中的输入输出

    2301_80905412: //获取输入流对象 Scanner scanner=new Scanner(System.in);

  • Java实验——定义一个表示学生信息的类Student,要求如下:

    生菜虾: 你可以对应上,命名能清晰易懂就好啦

  • Java实验——定义一个表示学生信息的类Student,要求如下:

    晏晏Y: 小姐姐,请问一下构造方法中getsex,为啥不能写成getsSex.不应该和成员变量sSex对应着吗?

  • 使用函数求某个范围内的素数(例如100~200)

    2301_80815958: 这个好像有点问题,好像2 3 5不行

  • Java实验——编写一个程序,实现字符串大小写的转换并倒序输出

    2301_79665585: 这算是优化吗,我有点不明白表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Java——Java易错选择题复习(2)(计算机网络)
  • Java——Java选择题复习(1)(Java基础,进程,多线程,操作系统)
  • 边学边记——数据结构☞和搜索有关的数据结构(搜索树,Set,Map,哈希表)
2023年44篇
2022年59篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司贺州优秀网站设计延安网络推广报价黄石设计公司网站价格南充网站关键词优化价格苏州网站改版推荐上饶阿里店铺运营推荐台州外贸网站设计多少钱衢州SEO按天收费哪家好南山网站开发价格坂田网站建设设计报价鄂州设计公司网站多少钱昌吉网站推广系统多少钱湛江网站开发推荐宣城网站搭建推荐荆州百度seo公司锦州关键词按天计费价格郴州百搜标王多少钱淮安网站建设多少钱昭通百度竞价推荐荆门seo网站推广公司保山网站改版多少钱信阳seo优化哪家好坪山外贸网站制作价格黑河SEO按效果付费哪家好吉祥推广网站报价沧州高端网站设计价格新余网站建设设计公司南昌阿里店铺运营推荐吉祥关键词按天扣费价格延边网站制作设计推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化