兄弟们好!

这些日子博主一直在精进spring的一些框架,所以很久没上博客了..不过今天呢突然想回忆一下以前的servlet编程的小故事。

闲话不扯了。。

回忆起来貌似servlet是个控制器,没错,的确它内部可以通过获取请求的url来调用对应的方法来提供服务,所以它是控制器,可能这就是springmvc为什么带有@Controller的类也有这个功能吧哈哈哈哈哈哈!!!!额那么我们用servlet干什么啊? 其实吧也就是去拼接一个动态的网页,因为jsp就是servlet呀!只要我们用servlet把一些信息绑定到页面上就可以实现动态网页了,想想只不过是把servlet看作view和model的中转站,博主常常说的一句话就是:我们编写项目很重要,但是更重要的是我们去理解这个项目。

那么我站在开发者的角度是如何理解一个web项目的呢?其实蛮有意思的,我觉得mvc这种常用的设计模式在web项目中好比一个平面,它是二维的,它可以清晰地合理地疯狂地为我们提供一些服务,不知道你试没试把所有项目的代码写到一个java类中(呵呵)。。。那么web项目是二维的对吗? 那肯定对啊,除非你推翻了mvc设计模式! 不过随着时代的发展或是人类大脑的发展、经验的积累,我说web项目是三维的,这有错吗? 不知道你用没用过一些web框架开发一个项目,例如我们用springmvc这个不错的框架,当然它也包括mvc这个二维的平面啦!这个平面在mvc框架中就不是很简单了!

看看springmvc中比较重要的五个组建组成了mvc的二维平面,首先请求要发给前端控制器来处理哦,在那之前该过滤的过滤,然后前端控制器通过映射处理器的配置来决定调用哪一个控制器来处理,而控制器呢就差不多是servlet啦,它返回了结果和视图给前端控制器,最后前端控制器通过视图解析器的配置来决定前端用什么技术展现!是不是听上去比传统的servlet高级一点? 其实嘛,我之前讲得都是二维平面啦!那么我说的三维平面是什么呢?就是我们在开发的过程中,在控制器里我们要建立一个“z轴”方便我们对代码的排列,这个z轴也可以说成分层,简单的分层我们分为表示层(Controller)、服务层(Service)、持久层(Repository),那么我们为什么要分层?因为我们的项目是要维护的!开发者不是代码猿而是艺术家,我们考虑的是如何把代码写成一个逻辑性很强的文章。可能你没听过“高内聚,低耦合”这个说法,意思是我们要遵守单一功能准则,而且类与类之间耦合度要尽量的低,那么我们这个分层就是这句话的实现。我们一个controller就处理一类业务,其中包含了一类业务的服务,那么服务中涉及到访问数据持久化的部分,我们要把它单独设置到持久层去,业务层只留业务逻辑,而低耦合体现在我们要用注入的方式来控制对象,也就是spring的一个特别重要的特性——spring容器。我记得有个叫外观模式的设计模式说的貌似是这个特性吧,是有n个组件类和一个整合类,整合类中包含了每个组件的对象,然后组件的构架和联系都在整合类中实现,而组件类仅仅是我们熟悉的javabean。。。

好啦,我现在说web项目是三维的有错吗?不过每个人理解不同的啦!等等等等!!!哎兄弟!我又说web项目是四维的!你服不服???别以为我是喝醉了!那么我来谈谈我个人对四维这个概念的理解!

我们先扯点tomcat是怎么工作的吧,首先呢你发个请求是吧,tomcat先解析你的域名通过dns(dns我就不详细说了,rfc2181上有规范说明)映射到一个ip地址,然后要访问这个ip地址我们用tcp的方式进行三次握手(握手也不说了),然后连接建立成功后我们便开始进入核心的步骤——tomcat内部处理请求。这个步骤我可以详细说说,哎你说这个servlet处理那么多请求,是不是每个请求都由一个servlet实例来处理啊??? 那肯定不是啊! 你在想什么,如果有一万个请求就有一万个实例,那服务器还不炸了? 事实上servlet是单例的,它随着服务器上的项目发布而诞生,随着服务器关机而死亡,当有多请求访问服务器的时候,每个请求依据自己所在的游览器而被tomcat分配一个线程,所有线程来共享这个servlet实例,tomcat中有个线程池,池子大小可以配置,当一个请求发来的时候就从池子中拿一个线程来执行servlet中对应方法,再请求再拿,一直拿到池子没线程了,就开始等吧等到有请求处理完。哎你别跟我说组件要修改临界资源的事哈!因为那个的去参考线程同步的解决方案,博主能力有限只能谈谈浅显操作。。tomcat依据url的虚拟目录来在发布的项目中寻找指定的项目,找到之后再接着往下找web.xml文件,找到之后再找里面你配置的servlet网名,并调用与其对应的servlet类里面的service方法,所以有时候我们看到访问出错,错误码500是怎么回事?

其实就是:

try{

new Servlet().service();

}catch(Exception){

Request.getRequestDispatcher(“500.html”).forward();

}

看见没,你的service方法或者servlet类崩了就报500,而你service方法生命错了就报405,有意思吧?

待更新下一篇...

从浅谈servlet及tomcat到品味spring家族相关推荐

  1. 浅谈Servlet的本质

    浅谈Servlet的本质 孟军补充:其实这里的servlet引擎就是servletAPI规范,也就是接口规范,何必说的如此文邹邹的,真是. servlet的本质其实就是servletAPI,程序员se ...

  2. servlet对java的重要性_浅谈Servlet技术中的Listener起到的作用

    Listener是在servlet2.3中加入的,主要用于对Session,request,context等进行监控. 使用Listener需要实现响应的接口.触发Listener事件的时候,tomc ...

  3. 浅谈servlet与jsp的关系

    servlet是用java语言编写的,是一个java类.主要功能是用来接受.处理客户端的请求,并把处理结果返回到客户端显示.Jsp是servlet发展后期的产物.在没有jsp之前,servlet利用输 ...

  4. java与jsp的关系_浅谈servlet与jsp的关系

    servlet是用java语言编写的,是一个java类.主要功能是用来接受.处理客户端的请求,并把处理结果返回到客户端显示.Jsp是servlet发展后期的产物.在没有jsp之前,servlet利用输 ...

  5. 浅谈Servlet与JSP

    前言 提高Java Web 开发,不得不说http协议,接下来就说Servlet 和 Jsp 这两个java类. 正文 1.什么是JSP? JSP(Java Server Pages)是Sun 公司指 ...

  6. 【Servlet】浅谈 Servlet 之 保存作用域

    CSDN话题挑战赛第2期 参赛话题:学习笔记 Servlet保存作用域 一.保存作用域类型 二. `request` 保存作用域 三. `session` 保存作用域 四. `ServletConte ...

  7. 浅谈学习Javaee所需安装的一系列工具(Tomcat篇)

    浅谈学习Javaee所需安装的一系列工具(Tomcat篇) 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Tomcat是什么? 二.使用步骤 1.下载. 2.环 ...

  8. 浅谈tomcat中间件的优化【转】

    今天来总结一下tomcat的一些优化的方案,由于本人才疏学浅,写的不好,勿喷! tomcat对于大多数从事开发工作的童鞋应该不会很陌生,通常做为默认的开发环境来为大家服务,不过tomcat默认的一些配 ...

  9. jquery ajax和servlet,浅谈ajax在jquery中的请求和servlet中的响应

    在jsp中,首先,你需要导入jquery的架包: 获取可返回站点的根路径: String path = request.getContextPath(); %> 在jquery中写ajax请求: ...

最新文章

  1. (Shadow,Gradient)
  2. SSL介绍与Java实例
  3. zabbix_agent安装(Centos+Ubuntu)
  4. 【转】3.2SharePoint服务器端对象模型 之 访问文件和文件夹(Part 2)
  5. toj 4607 Multiple of 17
  6. python经济统计_给统计人讲python(3)模拟城市_数据分析
  7. [单选题]对下面的表达式描述正确的是: (T/t)(M/m)
  8. sql azure 语法_Azure SQL数据同步–在Azure SQL数据库之间复制数据和架构更改
  9. 锁、threading.local、线程池
  10. 「三分钟系列03」3分钟看懂什么是三次握手/四次挥手
  11. JavaScript30秒, 从入门到放弃之Array(七)
  12. 2021-06-26初识JavaScript
  13. CSS3 基础(1)——选择器详解
  14. 08 域控 架构主机 转移_win2000域控迁移至win2008
  15. java计算时间差 (日时分秒)
  16. matlab向量与x正方向的夹角_matlab 一个向量和矩阵中各行向量的夹角余弦值
  17. kafka2.2源码分析之KafkaChannel
  18. 基于iOS 10封装的下载器(支持存储读取、断点续传、后台下载、杀死APP重启后的断点续传等功能)
  19. Eclipse+Maven配置TestNG框架
  20. 手动查杀skypee病毒(AutoIt3木马)

热门文章

  1. python+selenium实现12306自动登录刷票抢票(自己做黄牛?!)
  2. 代替M-1086S比例阀控制器
  3. matlab做信号发生,声卡和Matlab的虚拟信号发生器的工作原理
  4. 【VS】visual studio 代码格式化工具--clang-format
  5. 蓝松AI人像抠图的接口说明
  6. Multisim 11.0-14.0
  7. VAE与GAN的关系(2)
  8. 政府形象塑造_让您的同事塑造您的职业目标的4个理由
  9. Android 打开系统文件管理器,并返回选中文件的路径
  10. 如何在深度学习中用指定的GPU来跑代码