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

一、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;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值