face to face
Spring整合hibernate中,获取HibernateTemplate实例就是采用的IOC被动注入
2.Spring 事务
使用过程:配置redis连接池 -> 配置jedis连接工厂 -> 配置用于封装连接过程的模板类对象(RedisTemplate) -> 调用jedis方法操作数据
7:Spring中做任务调度
init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,
负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。
无论有多少客户机访问Servlet,都不会重复执行init()。
service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,
该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”
(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求
的方法相应的do功能。
destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,
负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,
这些线程已经终止或完成
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 扫描注解实例化和注入 -->
<context:component-scan base-package="com.zbjk.order">
<!-- springmvc会第二次扫描Controller注解。第一次spring不需要扫描Controller注解-->
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 导入配置文件 -->
<context:property-placeholder location="classpath:properties/*.properties" />
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 1.扫描注解 -->
<context:component-scan base-package="com.zbjk.order">
<!-- 事务只配置在spring里面,在Service层注入。
spring第一次扫描Service注解会注入事务,springmvc第二次扫描会覆盖Service注解,没有事务
-->
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service"/>
</context:component-scan>
<!-- 2.解析映射器和适配器、json转换等信息 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 地址栏直接输入工程名,指定跳的页面 -->
<mvc:view-controller path="/" view-name="login"/>
<!-- 处理restfull风格,不解析css/js -->
<mvc:resources location="/skin/" mapping="/skin/**"/>
<!-- 3.配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 可以不用写,默认就是 -->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- 1.数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 2.mabatis工厂 -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis/mybatis.cfg.xml"></property>
</bean>
<!-- 3.扫描接口并实例化接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zbjk.order.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- 4.配置事务管理器 -->
<bean id="tx"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 5.使用注解方式使用事务 -->
<tx:annotation-driven transaction-manager="tx" />
</beans>
1,用户发送请求到springmvc框架提供的DispatcherServlet 这个前端控制器(了解struts2的朋友也都知道其实struts2也有一个前端控制器web.xml中的filter标签就是)
2,前端控制器会去找处理器映射器(HandlerMapping),处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet 。
3,根据处理器映射器返回的处理器,DispatcherServlet 会找“合适”的处理器适配器(HandlerAdapter)
4,处理器适配器HandlerAdpater会去执行处理器(Handler开发的时候会被叫成controller 也叫后端控制器在struts2中action也是一个后端控制器)执行之前会有转换器、数据绑定、校验器等等完成上面这些才会去正在执行Handler
5,后端控制器Handler执行完成之后返回一个ModelAndView对象
6,处理器适配器HandlerAdpater会将这个ModelAndView返回前端控制器DispatcherServlet。前端控制器会将ModelAndView对象交给视图解析器ViewResolver。
7,视图解析器ViewResolver解析ModelAndView对象之后返回逻辑视图。
8,前端控制器DispatcherServlet对逻辑视图进行渲染(数据填充)之后返回真正的物理View并响应给浏览器。
2、springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。
3、经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。
区别:
1.get请求需注意缓存问题,post请求不需担心这个问题
2.post请求必须设置Content-Type值为application/x-form-www-urlencoded
请求转发:它是由servlet再次转发浏览器地址栏不显示最终目的地,因为不是浏览器自己发的所以他不知道最终的目的地在哪。是同一次请求,request范围有效,跳转之前是do***,跳转之后依然是do***( request.getRequestDispatcher("类名").forword(request,response))
客户端方面保持:
①Session机制
②Cookie机制
- 登录验证后,创建登录凭证(比如:用户id+登录时间+过期时间),将登录凭证进行加密(为了避免暴露信息),加密后写到浏览器的cookie,以后,每次请求都发送cookie,服务器根据对应的解密算法对其进行验证(或者将加密过的cookie内容存储到数据库,请求服务器的时候,服务器在数据库进行查找)。
③Token机制
Tomcat会话保持:1、session sticky:通过负载均衡器的负载均衡算法比如:源地址hash 和cookie
2、session cluster: session的共享存储 登陆信息存储在数据库
使用Nginx反向代理会话保持
ip_hash:
ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。
sticky_cookie_insert:
使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器在同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。
上一篇: 第四节、数据结构
下一篇: 短信小笑话,快乐度夏日
推荐阅读
-
详解如何在css中引入自定义字体(font-face)
-
详解如何在css中引入自定义字体(font-face)
-
Python第三方库face_recognition在windows上的安装过程
-
Python人脸识别第三方库face_recognition接口说明文档
-
java使用face++简单实现人脸识别注册登录
-
苹果安全神话不再 Face ID被腾讯TK教主攻破 尚有更严重漏洞
-
外形质变!iPad 8曝光:Face ID/USB-C加持、轻薄窄边框
-
iPad Air 4 360度渲染图曝光:窄边框+Face ID、颜值焕然一新
-
使用CSS3的font-face字体嵌入样式的方法讲解
-
iPad Air 4曝光:窄边框屏幕+Face ID、换用USB-C接口