0%

ViewResolver视图解析器

ViewResolver进行视图解析,将逻辑视图名解析成真正的视图,首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。

1
2
3
4
5
public interface ViewResolver {

View resolveViewName(String viewName, Locale locale) throws Exception;

}
阅读全文 »

HandlerAdapter处理适配器

HandlerMapping通过request找到了handler,HandlerAdapter是具体使用Handler来干活的,每个HandlerAdapter封装了一种Handler的具体使用方法

由于Spring经过很长时间的版本迭代,为了适配老版本,Spring 中的处理器的实现有很多种方式,比如可以实现 Controller 接口,也可以用 @Controller+@RequestMapping 注解将方法作为一个处理器等,这就导致 Spring 不知道怎么调用用户的处理器逻辑。因此需要一个处理器适配器,由处理器适配器去调用处理器的逻辑

HandlerAdapter按照特定规则去执行Handler,通过扩展适配器可以对更多类型的处理器进行执行

1
2
3
4
5
6
7
8
9
10
11
12
public interface HandlerAdapter {

// 判断是否可以使用某个Handler
boolean supports(Object handler);

// 具体使用handler完成工作
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

// 获取Last-Modified资源最后一次修改时间
long getLastModified(HttpServletRequest request, Object handler);

}
阅读全文 »

HandlerMapping处理器映射器

作用是根据request找到相应的处理器Handler和Interceptors,然后封装成HandlerExecutionChain对象返回

1
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;

实现类

HandlerMapping帮助DispatcherServlet进行web请求的url到具体处理类的匹配,用来根据请求的url查找Handler,内部维护的Map<String, Object>映射,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等

1
private final Map<String, Object> handlerMap = new LinkedHashMap<String, Object>();
阅读全文 »

DispatcherServlet前端控制器

配置

DispatcherServlet充当SpringMVC的前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。与其他Servlet一样,DispatcherServlet必须在Web应用程序的web.xml文件中进行配置

阅读全文 »

memcached过期删除

  • Lazy Expiration(延迟过期)

    Memcached不会监控记录是否过期,而是在外部来获取数据的时候,才检查记录的时间戳,因此称为Lazy Expiration。

  • LRU(Least Recently Used 最近最少使用)

    当空间不足的时候,Memcached会优先使用已经过期的数据空间,如果还不够,那么就会把最近最少使用的对象的空间释放出来使用。

  • 懒惰删除机制

    删除item对象时,不释放内存,作删除标记,指针放入slot回收插槽,下次分配的时候直接使用

当某个值过期后,并没有从内存删除,因此,stats 统计时,curr_item 有其信息,当某个新值去占用它的位置时,当成空 chunk 来占用,当 get 值时,判断是否过期,如果过期,返回空并且清空,curr_item 就减少了.

这个过期,只是让用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除,这个称为 lazy expiration,惰性失效,这样做的好处是节省了 cpu 时间和检测的成本

删除机制

memcached使用的是lru(least recently used 最近最少使用)删除机制

原理

当某个单元被请求时,维护一个计数器,通过计数器来判断最近谁最少被使用,就把谁踢出

即使某个 key 是设置的永久有效期,也一样会被踢出来,称为永久数据被踢现象