Servlet执行原理
执行原理:
Tomcat是服务器 端,浏览器是客户端,这是BS架构
http://localhost:8080是Tomcat的地址,后面是资源名称。
1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2. 查找web.xml文件,是否有对应的标签体内容,找类名。
3. 如果有,则在找到对应的全类名
4. tomcat会将字节码文件加载进内存,并且创建其对象
5. 调用其service方法,所以Tomcat是severlet的一个容器
Servlet生命周期
Servlet接口中有五个方法
init()
getServletConfig()
获取ServletConfig对象 ----Servlet的配置对象
service()
getServletInfo()
destroy()
1. 被创建:执行init方法,只执行一次 * Servlet什么时候被创建? * 默认情况下,第一次被访问时,Servlet被创建 * 可以配置执行Servlet的创建时机。 * 在<servlet>标签下配置 1. 第一次被访问时,创建 * <load-on-startup>的值为负数 2. 在服务器启动时,创建 * <load-on-startup>的值为0或正整数 * Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的 * 多个用户同时访问时,可能存在线程安全问题。 * 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对其修改值 2. 提供服务:执行service方法,执行多次 * 每次访问Servlet时,Service方法都会被调用一次。 3. 被销毁:执行destroy方法,只执行一次 * Servlet被销毁时执行。服务器关闭时,Servlet被销毁 * 只有服务器正常关闭时,才会执行destroy方法。 * destroy方法在Servlet被销毁之前执行,一般用于释放资源
查看自己的web项目位置
1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件 *1 查看控制台的log:Using CATALINA_BASE: "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast" 2点击conf---点击Catalina---点击localhost-----点击web.xml打开就可以看到自己的web项目的代码位置 2. 工作空间项目 和 tomcat部署的web项目 * tomcat真正访问的是“tomcat部署的web项目”,"tomcat部署的web项目"对应着"工作空间项目" 的web目录下的所有资源 * WEB-INF目录下的资源不能被浏览器直接访问。
Servlet架构
下面这张图显示了servlet在Web 应用程序中的位置
这里有点疑问
HTTTP Server是指的Apache与Tomcat有区别
总结:
1.apache支持静态页,tomcat支持动态的,比如servlet等,
2.apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。
3.Tomcat是Apache组织在符合J2EE的JSP、Servlet标准下开发的一个JSP服务器 ,就是说Tomcat就是对
4.APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等动态网页的就不行
如果要在APACHE环境下运行jsp 的话就需要一个解释器来执行jsp网页 而这个jsp解释器就是TOMCAT, 为什么还要JDK呢?因为jsp需要连接数据库的话,就要jdk来提供连接数据库的驱程,所以要运行jsp的web服务器平台就需要APACHE+TOMCAT+JDK
在IDEA中创建web项目和Servlet
Intellij idea创建javaWeb以及Servlet简单实现
Servlet 体系结构
Servlet 和 ServletConfig 都是顶层接口,而 GenericServlet 实现了这两个顶层接口,然后
HttpServlet 继承了 GenericServlet 类.所以要实现一个 Servlet 直接就可以继承 HttpServlet
Servlet的体系结构
Servlet – 接口
|
GenericServlet – 抽象类
|
HttpServlet – 抽象类
* GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象 * 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可 * HttpServlet:对http协议的一种封装,简化操作 1. 定义类继承HttpServlet 2. 复写doGet/doPost方法 doget方法在访问时会在url后加上地址 dopost则不会