servlet只是一个称谓,一个说法,是运行在服务器上的程序或者说是一个Java类。
其实就是满足一个条件的程序就可以叫servlet。就像是满足一定条件的类是javabean类。或者MVC,其实也没有对应的特定实物,这只是一个思想或者说逻辑。
不过这么说也不对,servlet其实是一个特殊的类,需要继承HTTPservlet,完成特定的功能。
在MVC 里的分层
jsp其实就是servlet。jsp会被解析成对应的servlet(Java类),去自己的tomcat安装目录下 \tomcat-7.0.91-x64--2\tomcat-7.0.91--2\work\Catalina\localhost\项目名\org\apache\jsp。去这里可以看到的,项目里的jsp对应的Java文件。
jsp其实大多是被认为是MVC里的V,是界面层,servlet被认为是C,是控制层。但是既然jsp也会转换成servlet,岂不是说jsp也是C??
而且一般认为Controller层是MVC里C。但是Controller继承 BaseController ,不继承HTTPservlet,就不是servlet了吧?。这又如何理解,还是说C层范围比较大?这两个都包含了?
前端控制器DispatherServlet是servlet,调用Controller,Controller再调用service依次下去。。。
所以看起来是C层的范围比较大?还是说MVC本身就不是特定的,只是一个分层思想而已。
这么看,其实很难对实际的代码或者框架去套MVC。毕竟jsp里还可以写逻辑呢。所以说MVC只是一个分层思想,可照着做,也可以不那么分明。
只需要大致知道,jsp写界面的,然后controller是控制层(SpringMVC里这里是有一个前端控制器DispatherServlet的,其实就是控制层针对请求去调用对应的方法,但是这个知道有这么个东西就行,不需要自己写,只要写好注释,注释方法的调用id/url, 编译器自动解决了),然后就是service层写具体方法,然后是dao层,然后xml文件里写数据库操作。
看别人代码时,知道大致是这个分层思想就行了,就可以从jsp页面顺着一路找到数据库。其他人的代码不知道,我实习时公司里的代码是这样的结构。
驻留内存?
servlet是驻留服务器内存里的。
这句话在其他地方也看到过,不怎么理解
以jsp为例。jsp第一次访问,被解析成servlet,然后调用init()初始化,然后根据请求调用service()方法。
然后这个初始化后的servlet就驻留服务器内存,有请求,就创建一个线程调用service(),直到服务器关机或者项目移除?
大概可以理解为,这个servlet一直处于可执行状态?要么正在被执行,要么就在就绪队列里?整个项目只要被请求过的jsp,全部是这个状态,以保障对客户端请求的快速反应?