一、Servlet and JSP
1.Preliinary Topics
(1)What do Web Server and Client do?
(2)URL
(3)Web server单独不能做的
【1】动态内容【2】保存数据到服务器
2.Servlets
(1)Inroduction
Servlets under control of a container
(2)What does the container do?
3.JSP
二、Core Spring
1.Spring采用四种策略简化JaVA开发
通过依赖注入和面向接口编程实现松耦合;
通过面向切面编程和惯例实现声明式编程;
通过面向切面编程和模板消除样板式代码;
2.Spring容器
3.俯瞰Spring风景线
4.Spring Porfolio作品集
三、装配Bean
1.Spring配置的可选方案
2.自动化装备Bean
3.通过代码装配Bean
@Bean
public CDPlayer cdPlayer()
{
return new CDPlayer(sgtPeppers());
}
4.环境和Profile
@Profile(“prod”)
@Qualifier(“cold”)
激活Profile,只有被激活了的peofile才会被初始化
5.条件化Bean
6.处理自动化装配Bean的歧义性
7.Bean的作用域
【1】单例(Singleton):在整个应用中,只创建bean的一个实例。
【2】原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
【3】会话(Session):在Web应用中,为每个会话创建一个bean实例。
【4】请求(Rquest):在Web应用中,为每个请求创建一个bean实例。
8.运行时值注入
【1】属性占位符(Property placeholder)。
【2】Spring表达式语言(SpEL)。
【1】使用bean的ID来引用bean;
【2】调用方法和访问对象的属性;
【3】对值进行算术、关系和逻辑运算;
【4】正则表达式匹配;
【5】集合操作。
四、Spring on the web
1.getting started with Spring MVC
2.接受请求的输入
@RequestParam(“max”) long max;
五、Rendering web views
1.creating Velocity views
#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )
#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end
2.使用Apache Tiles视图定义布局
六、Advanced Spring MVC
@Bean //默认
public MultipartResolver multipartResolver() throws IOException {
return new StandardServletMultipartResolver();
}
还可以限制文件大小类型啥的,不过好像是要在Servlet中配置
【1】特定的Spring异常将会自动映射为指定的HTTP状态码;
【2】异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码;
【3】在方法上可以添加@ExceptionHandler注解,使其用来处理异常。
@RequestMapping(value="/{spittleId}", method=RequestMethod.GET)
public String spittle(
@PathVariable("spittleId") long spittleId, Model model) {
Spittle spittle = spittleRepository.findOne(spittleId);
if (spittle == null) {
throw new SpittleNotFoundException();
}
model.addAttribute(spittle);
return "spittle";
}
七、Persisting Data with MyBatis
1.what is mybatis
2.Hibernate
3.One to One Relationship
4.One TO Many Relationship
5.Mybatis一个强大的特性就是它的动态SQL能力
if when otherwise where set foreach
6.Cache
(1)Mybatis包含一个非常强大的缓存特性。默认是没有开启缓存的。
(2)如果要开启缓存,只需要添加一行<cache/>
(3)cache效果如下
【1】映射语句文件中的所有 select 语句将会被缓存。
【2】映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
【3】缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
【4】根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
【5】缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
【6】缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
这个更高级的配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会 导致冲突。
(4)参数
可用的收回策略有
LRU :最近最少使用
FIFO:先进先出
SOFT:软引用,移除基于垃圾回收器状态和软引用规则的对象
WEAK:弱引用,更积极地移除基于垃圾回收器状态和弱引用规则的对象
默认的是LRU
flushinterval:刷新间隔
size:引用数目,默认是1024
ReadOnly只读
八、面向切面的Spring
1. What is aspect-oriented programming?
切面可以帮我们模块化横切关注点
2.AOP的术语
(1)通知(Advice)
【1】前置通知【2】后置通知【3】返回通知【4】异常通知【5】环绕通知
3.Advising controllers为控制添加通知
方法:
@ExceptionHandler注解标注的方法;
@InitBinder注解标注的方法;
@ModelAttribute注解标注的方法。
4.Transaction in Spring Spring中的事务
九、网络安全应用和方法
1.Spring Security简介
以上的配置会使用默认的configure方法,导致没有人能够进入系统。为了满足要求,需要进行配置
2.配置用户存储
【1】配置用户存储
基于内存的用户存储、基于数据库进行认证、基于LDAP进行认证
【2】指定那些请求需要认真,那些请求不需要认证,以及所需要的权限
【3】提供一个自定义的登录页面,替代原来简单的默认登陆项
3.拦截请求
(1)对每个请求进行细粒度安全性控制的关键在于重载configure(HttpSecurity)方法。如下的代码片段展现了重载的configure(HttpSecurity)方法,它为不同的URL路径有选择地应用安全性:
(1)使用Spring表达式进行安全保护
(2)强制通道的安全性
(3)防止跨站请求伪造
Spring Security通过一个同步token的方式来实现CSRF防护的功能。它将会拦截状态变化的请求(例如,非GET、HEAD、OPTIONS和TRACE的请求)并检查CSRF token。如果请求中不包含CSRF token的话,或者token不能与服务器端的token相匹配,请求将会失败,并抛出CsrfException异常。这意味着在你的应用中,所有的表单必须在一个“_csrf”域中提交token,而且这个token必须要与服务器端计算并存储的token一致,这样的话当表单提交的时候,才能进行匹配。
十、Spring web flow
1.在Spring中配置web flow
(1)装配流程执行器
(2)配置流程注册表
(3)处理流程请求
2.Spring web flow可供选择的状态
十一、缓存
1.使用Redis操作key-value数据
(1)连接到Redis
Spring Data Redis提供了四种连接工厂
JedisConnectionFactory
JredisConnectionFactory
LettuceConnectionFactory
SrpConnectionFactory
@Bean
public RedisConnectionFactory redisCF() {
JedisConnectionFactory cf = new
JedisConnectionFactory();
cf.setHostName(“redis-server”);
cf.setPort(7379);
cf.setPassword(“foobared”);
return cf;
}
2.使用Redis Template
(1)SpringData Redis提供了两个模版
RedisTemplate//简化了Redis的数据访问,使持久化各种类型的key和value,并不局限于字节数组
StringRedisTemplate//扩展了RedisTemplate,只关注String类型
@Bean
public RedisTemplate<String, Product>
redisTemplate(RedisConnectionFactory cf) {
RedisTemplate<String, Product> redis = new
RedisTemplate<String, Product>();
redis.setConnectionFactory(cf);
return redis;
}
redis.opsForValue().set(product.getSku(), product);
Product product = redis.opsForValue().get("123456");//简单值
(2)使用key和value的序列化器
当某个条目保存到Redis key-value存储的时候,key和value都会使用Redis的序列化器(serializer)进行序列化。Spring Data Redis提供了多个这样的序列化器,包括:
GenericToStringSerializer:使用Spring转换服务进行序列化;
JacksonJsonRedisSerializer:使用Jackson 1,将对象序列化为JSON;JSON轻量级的数据交换格式
Jackson2JsonRedisSerializer:使用Jackson 2,将对象序列化为JSON;
JdkSerializationRedisSerializer:使用Java序列化;
OxmSerializer:使用Spring O/X映射的编排器和解排器(marshaler和unmarshaler)实现序列化,用于XML序列化;
StringRedisSerializer:序列化String类型的key和value。
3.启用对缓存的支持
(1)Spring对缓存的支持有两种方式:
注解驱动的缓存
XML声明的缓存
4.为方法添加注解以支持缓存
十二、Spring消息
1.异步消息简介
没有等待
消息定向与解耦
位置独立性
保证交付
2.基于JMS的消息功能
(1)Java消息服务(Java message service)是一个Java标准,定义了使用消息代理的通用API
【1】Spring通过基于模板的抽象为JMS功能提供了支持,这个模板也就是JmsTemplate
【2】Spring还提供了消息驱动POJO的理念:这是一个简单的Java对象,它能够以异步的方式响应队列或主题上到达的消息。