`
文章列表

redis分布式锁

redis是做为缓存的主流选择,这里主要拿它和memcached比较一下: redis是单线程模型,没有锁的概念,不存在资源竞争,对于同一key是原子操作;memcached是多线程模型。利用自身的cas操作实现锁的操作(等同与乐观所,每一个key对应会产生一个64bit的标记,当某个线程更新key的值是会比较这个标记有没有变化,有变化则放弃更新); redis中有一个setnx函数(set if not exist,当且仅当 key 不存在,将 key 的值设为 value ,并返回1;若给定的 key 已经存在,则 SETNX 不做任何动作,并返回0),可以利用它来实现一个简单的分布式锁 ...
Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而实际使用时,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但是在实际项目中,同时配置Spring和SpringMVC时会出现一些奇怪的异常,比如 ...

aop 通知类型

一、声明一个切面类 1、首先要将这个类放入容器中,基于注解,在类头信息加入@Component 2、将这个类声明成切面类,在头信息加入@Aspect注解 3、可以基于切面中的方法,比如前置通知,后置通知,返回通知,异常通知,以及环绕通知写自己的业务逻辑,定义切点"execution(* com.liyi.service.*.*(..))",即那些方法需要执行这些方法。如果想获取到方法的名字和参数,可以在方法中加入JoinPoint参数,可以获取到进入切面的方法细节。     3.1 前置通知:执行目标方法前拦截到的方法。没有特殊注意的地方,只需要一个连接点,JoinP ...

shiro 和 SESSSION

shiro 在web项目里默认使用的是web容器提供的session,也就是说shiro使用的session是web容器产生的,并不是自己产生的,在用于非web环境时可用其他来源代替。在web工程启动的时候它就和容器绑定在了一起,这是通过web.xml里面的shiroFilter实现的。通过session.getSession()方法会在浏览器cokkice产生JESSIONID,当关闭浏览器,此JESSIONID就被清除掉了。再次打开浏览器访问需重新登录,此时服务器内存中仍然存有此session,并没有失效。只是浏览器没有发送与之关联的JESSISIONID,所以服务器需要重新产生一个新的 ...
1. 入口 spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。 参见:http://blog.csdn.net/zs15932616453/article/details/8832343 2、主要机制 springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,参数的传递是直接注入到方法中的,是该方法独有的。 struts2是类级别的拦截, 一个类对应 ...
spring mvc freemarker 中遍历枚举 1枚举类型有一个本地方法叫values(),这个方法可以直接返回枚举数组。所以可以利用这个遍历。 enum public enum BooleanEnum { TRUE(Boolean.TRUE, "是"), FALSE(Boolean.FALSE, "否"); private final Boolean value; private final String info; private BooleanEnum(Boo ...
JSR-303是一个数据验证的规范,但是spring并没有对其进行实现,Hibernate Validator是实现了这一规范的,通过此这个实现来讲SpringMVC对JSR-303的支持。 JSR-303的校验是基于注解的,首先要把这些注解标记在需要验证的实体类的属性上或 ...
1.Spring mvc处理json需要使用jackson的类库,因此需要先引入jackson包 2在spring mvc中解析输入为json格式的数据:使用@RequestBody来设置输入 @RequestMapping("helloJson") public @ResponseBody JsonTest helloJson() { JsonTest jt = new JsonTest(); jt.setName("用户名!"); jt.setPassword("密码"); ...
Global site tag (gtag.js) - Google Analytics