doGet和doPost、Cookie和Session的原理及区别、Spring框架

2023-11-08

一、doGet和doPost

1、doGet

GET调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过HTML、JSP直接访问Servlet的URL时,一般用GET调用。

public class doGet_servlet extends HttpServlet {
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
     .........
  }
}

2、doPost

它用于客户端把数据传送到服务器端,是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。

public class servlet extends HttpServlet {
  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
     ........
  }
}

二、Cookie和Session的原理及区别

1、工作原理

(1)Cookie工作原理

20190917204655188

(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户

(2)Session工作原理

imgimg

img

(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
(4)name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie
(5)name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象
(6)value为SessionId不存在(Session对象默认存活30分钟),返回(1)中重新去创建Session与特殊的Cookie
(7)value为SessionId存在,返回session对象

2、Cookie和Session的区别

session
简单的说,当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。

cookie
session是服务器和客户端连接时候随机分配的,如果浏览器使用的是cookie,那么所有数据都保存在客户端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。

如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。

3、区别

(1)cookie数据存放在客户端上,session数据放在服务器上。
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,如果主要考虑到安全应当使用session。
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用cookie。
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的cookie不能超过3K。
(5)将登陆信息等重要信息存放为session;其他信息如果需要保留,可以放在cookie中。

三、Spring框架

1.Spring框架是轻量级的JavaEE框架

2.Spring可以解决企业应用开发的复杂性

3.Spring有两个核心部分:IOC和Aop

(1)IOC:控制反转,把创建对象的过程交给Spring进行管理

(2)Aop:面向切面,不修改源代码进行功能增强

1、IOC容器

(1)什么是IOC

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

(2)控制反转

把对象的创建和对象的调用过程交给Spring进行管理。使用IOC的目的:为了耦合度降低.

2、依赖注入(简称DI)

DI-Dependency Injection,即“依赖注入”,组件之间的依赖关系由容器在运行期决定,即容器动态的将某个依赖关系注入到组件当中

DI理解的关键点:“谁依赖谁,为什么需要依赖”谁依赖谁:应用程序依赖IOC容器为什么需要依赖:应用程序需要IOC容器来提供对象需要的外部资源注入什么:注入某个对象所依赖的外部资源

(1)set方法注入依赖

set方法注入依赖时,使用property标签,name属性表示类中的属性名,value属性表示当前属性的赋值

    <!--依赖注入方式:set方法-->
    <bean id="user" class="com.lanou.tools.User">
        <!--id属性注入-->	
        <property name="id" value="1"/>
        <!--name属性赋值-->
        <property name="name" value="李四"/>
    </bean>
 public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User u1 = (User) context.getBean("user");
        System.out.println(u1);
    }
(2)有参构造函数注入
<!--依赖注入方式1:有参构造-->
<bean id="user3" class="com.tulun.bean.User">
   <!--id属性的注入-->
   <constructor-arg name="id" value="22"></constructor-arg>
   <!--name属性的注入-->
   <constructor-arg name="name" value="zhangsan"></constructor-arg>
</bean>

依赖注入的属性可以是基本的类型,也可以是集合类型,也可以是自定义类型

(1)List注入

<!--List的注入-->
 <bean id="person1" class="com.tulun.bean.Person">
     <property name="list">
         <list>
            <value>hello</value>
            <value>你好</value>
            <value>123</value>
         </list>
     </property>
</bean>

(2)数组的注入

<!--数组的注入-->
 <bean id="person2" class="com.tulun.bean.Person">
     <property name="list">
        <!--array标签:注入数字-->
        <array>
           <!--value是直接给定值-->
           <value></value>
           <!--ref是存储的引用对象-->
           <!--<ref></ref>-->
        </array>
     </property>
</bean>

(3)map的注入

<!--map的注入-->
<bean id="person4" class="com.tulun.bean.Person">
   <property name="list">
      <!--map标签:注入Map类型的集合-->
      <map>
         <entry key="1" value="zhangsan"/>
      </map> 
    </property>
</bean>
(3)基于注解的形式注入依赖

@Value注解

@Component(value = "user")
public class User {
    @Value("1")
    private String id; 
    @Value("张三")
    private String name;
}

@Autowired:注入对象类型

@Component(value = "person")
public class Person {
    //自定义类型属性
    @Autowired
    private User user;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

doGet和doPost、Cookie和Session的原理及区别、Spring框架 的相关文章

  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 在 Struts 2 中传递 URL 参数而不使用查询字符串

    我想使用类似的 URL host ActionName 123 abc 而不是像这样传递查询字符串 host ActionName parm1 123 parm2 abc 我怎样才能在 Struts 2 中做到这一点 我按照下面的方法做了
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • try-with-resources 中出现死代码警告,但翻译后的 try-catch-finally 中没有出现死代码警告

    以下代码使用try 有资源 https docs oracle com javase specs jls se7 html jls 14 html jls 14 20 3Java 8 中引入的构造 偶尔抛出 方法被声明为抛出一个偶尔的异常

随机推荐

  • 贝叶斯网的R实现( Bayesian networks in R)bnlearn(3)

    4 参数学习 得到贝叶斯网的网络结构之后 可以对局部分布的参数进行参数估计了 这称作参数学习 4 1参数学习的基本方法 bnlearn包的参数学习函数是bn fit 其参数method给出了两种具体的方法 mle 为极大似然估计 bayes
  • 2023最新版Android studio安装入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

    目录 JDK安装与配置 一 下载JDK 二 JDK安装 三 JDK的环境配置 四 JDK的配置验证 Android studio安装 Android studio连接手机真机调试 以华为鸿蒙为例 一 新建一个android项目 二 进入项目
  • 如何将自建的matlab神经网络的激活函数使用gensim生成simulink模型

    要把自定义的matlab激活函数生成到simulink模型中 必须在simulink神经网络库的激活函数子库中添加相应的激活函数 如何打开simulink的神经网络库 这里有两种方法 一种是在命令窗口中输出 neural 就会弹出以下窗口
  • 玩转C++小项目之短链接Demo

    玩转C 小项目之短链接Demo 真实的短链接相对来说比较复杂 例如 hash算法 放号系统等等 今天只是从小项目角度模拟一个短链接实现 如何通过短短的几十行代码快速实现一个 其中涉及的几个关键点 如何将长链接缩短 如何存储映射关系 映射关系
  • 【实际开发17】- 静态测试

    静态测试技术 不运行被测试程序 对代码通过检查 阅读进行分析 目录 1 静态测试 1 静态测试三步曲 走查 审查 评审 2 编码的标准和规范 3 代码评审 1 代码走查 Walk Through 2 正式会议审查 Inspection 3
  • MySQL 主从复制(实时热备)原理与配置

    MySQL是现在普遍使用的数据库 但是如果宕机了必然会造成数据丢失 为了保证MySQL数据库的可靠性 就要会一些提高可靠性的技术 MySQL主从复制可以做到实时热备数据 本文介绍MySQL主从复制原理及其配置过程 术语 主从复制 maste
  • Android中文API最新中文版

    http www eoeandroid com thread 58597 1 1 html 转载于 https www cnblogs com lost in code archive 2013 03 13 2956940 html
  • import “cv2“ could not be resolved pylance(reportMissingImports)

    openCV系列文章目录 文章目录 openCV系列文章目录 前言 一 错误原因 二 解决方法 1 在vscode Python Select Interpreter 2 依然报错 cv2 error OpenCV 4 7 0 D a op
  • Vagrant Note

    Vagrant Note 1 vagrant 命令 vagrant init hashicorp precise64 需要先删除Vagrantfile文件 vagrant up 启动虚拟机 根据Vagrantfile文件启动 vagrant
  • 【Linux命令详解

    文章标题 简介 一 参数列表 二 使用介绍 1 基本用法 2 显示所有进程 3 显示进程详细信息 4 根据CPU使用率排序 5 查找特定进程 6 显示特定用户的进程 7 显示进程内存占用 8 查看进程树 9 实时监控进程 10 查看特定进程
  • 一行代码实现安慰剂检验

    1 什么是安慰剂检验 随着 因果推断方法 在实证研究中的使用比例不断提升 越来越多的文章也会进行安慰剂检验 其检验基本原理与医学中的安慰剂类似 即使用 假的政策发生时间或实验组 进行分析 以检验能否得到政策效应 如果依然得到了政策效应 则表
  • echarts tooltip显示其他字段

    这是上面的数据 let data nodes 公司名称 name 浏览器有限公司 category 0 0代表公司 1代表自然人股东 value 100 capi 持股数1200 股东列表 name 操作系统集团 category 0 va
  • -----关于Onvif链接成功但运行报错/usr/bin/ld: warning:xxx,needed by xxx,may conflict with libssl.so.1.0.0

    1 错误分析 看图 原因是openssl系统中的版本与mysql或者libevent这些库里面的openssl的版本不一致 导致链接出了问题 解决方法 重新下载与项目中mysql和libevent中openssl一样的版本 即 由于我项目中
  • Python毕业设计 机器学习新闻算法研究与实现

    文章目录 0 前言 简介 本文章博主将介绍 参与及比较算法 先说结论 实现过程 数据爬取 数据预处理 CNN文本分类 其他分类方法更新中 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达
  • C/C++实现协程及原理(详细完整版)-架构师篇

    一 协程 Coroutine 简介 协程 又称微线程 纤程 英文名Coroutine 协程的概念很早就提出来了 但直到最近几年才在某些语言 如Lua 中得到广泛应用 子程序 或者称为函数 在所有语言中都是层级调用 比如A调用B B在执行过程
  • drools 7.x 加载指定的决策表

    git https github com lccbiluox2 drools test git 1 决策表 位置 Users lcc IdeaProjects drools test src main resources com drool
  • Python异步请求:处理并发任务的结果

    Python异步请求 处理并发任务的结果 处理并发任务的结果 在异步编程中 处理并发任务的结果可能会有所不同 以下是几种常见的处理方式 使用asyncio as completed asyncio as completed 函数返回一个迭代
  • 场景题之最快返回结果

    场景题之最快返回结果 问题描述 输入中文 最快从百度翻译 谷歌翻译 有道翻译获取结果返回 代码实现 思路 采用CompletableFuture实现 多个CompletableFuture可以串行执行 也可以并行执行 其中anyOf 方法只
  • 插入排序(Insertion-Sort)-- 初级排序算法

    1 插入排序 Insertion Sort 插入排序 Insertion Sort 的算法描述是一种简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 算法描述 一般来说 插入
  • doGet和doPost、Cookie和Session的原理及区别、Spring框架

    一 doGet和doPost 1 doGet GET调用用于获取服务器信息 并将其做为响应返回给客户端 当经由Web浏览器或通过HTML JSP直接访问Servlet的URL时 一般用GET调用 public class doGet ser