专栏名称: java那些事
分享java开发中常用的技术,分享软件开发中各种新技术的应用方法。每天推送java技术相关或者互联网相关文章。关注“java那些事”,让自己做一个潮流的java技术人!《java程序员由笨鸟到菜鸟》系列文章火热更新中。
目录
相关文章推荐
芋道源码  ·  告警:MyBatis-Plus中慎用@Tra ... ·  17 小时前  
芋道源码  ·  30K ... ·  昨天  
芋道源码  ·  很抱歉,考虑停更了,死磕AI暴利项目! ·  昨天  
芋道源码  ·  入职第一天,看了公司代码,牛马沉默了 ·  3 天前  
51好读  ›  专栏  ›  java那些事

为什么不应该重写service方法?

java那些事  · 公众号  · Java  · 2019-03-01 16:00

正文

请到「今天看啥」查看全文


  • 浏览器也很聪明,当你再次(点击链接,或者F5,或者回车,但是不能是ctrl+F5)请求这个资源时,浏览器会询问server这个资源自上次告诉我的最后修改时间以来有没有被修改(请求头中If-Modified-Since)。(见图二)

  • 如果资源没有被修改,server返回304状态码,并不会再次将资源发送给浏览器,浏览器则很知趣的使用本地的缓存文件。(见图二)

  • 所以所有的静态资源如果没有发生变化,通常是不会传递多次的,不管什么浏览器或者server都应该遵守这种询问的约定。看起来很爽啊,很智能是不是?这种约定的机制就是 http缓存协商——这是约定优于配置的又一体现。

    有了缓存协商的知识,理解为什么我们不应该重写service就很容易了。还是从代码出发,这次我们看一个复杂一点的例子。

    在这个例子中,我们请求一个控制器(MeServlet),然后转向一个视图(index.html),为了简单起见,web.xml中将只有这个servlet的配置:


    < web-app >
    < servlet >
    < servlet-name > me servlet-name >
    < servlet-class > com.me.web.MeServlet servlet-class >
    servlet >
    < servlet-mapping >
    < servlet-name > me servlet-name >
    < url-pattern > /test url-pattern >
    servlet-mapping >
    web-app >


    然后是MeServlet:


    public class MeServlet extends HttpServlet {
    @Override
    protected void service (HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
    {
    /**
    * 1. 处理具体的业务:
    * -- 处理请求参数
    * -- 检查缓存
    * -- 处理具体数据
    * -- 更新缓存
    */

    doBizLogic(req, res);
    /**
    * 2. 根据处理的结果转向具体的视图:
    * -- 这里假设就是 index.html
    */

    getServletContext()
    .getRequestDispatcher( "/index.html"






    请到「今天看啥」查看全文


    推荐文章
    分布式实验室  ·  培训:3天带你快速上手Kubernetes | 上海站
    7 年前