Servlet:运行在服务器端的小程序
Servlet是一个接口,定义了Java类被浏览器访问到(tomcat识别的规则)
将来定义一个类,实现Servlet接口,复写方法
快速入门:
1、创建JavaEE项目
选的时候改为Web项目应用程序
2、定义一个类,实现Servlet接口
3、实现接口中的抽象方法
4、配置Servlet
在web.xml配置
Servlet3.0:支持注解配置,可以不需要web.xml。在类上使用
省略形式
@WebServlet("资源路径")
Servlet原理 :
当服务器接受到客户端浏览器的请求后,会解析请求UR路径,获取访问的Servlet资源路径。查找web.xml文件,是否有对应的<url-pattren>标签体内容。如果有,则在找到对应的<servlet-calss>全类名。Tomcat会将字节码文件加载进内存,并且创建其对象。调用其service方法
Servlet的生命周期:
init:初始化方法,在Servlet被创建时执行一次
*默认情况下,Servlet第一次被访问时 ,Servlet被创建<load-on-startup>值为负数
*在服务器启动时,创建:<load-on-startup>值为正数
*Servlet在内存中只存在一个对象,servlet是单例的。多个用户访问时,可能存在线程安全问题
解决:尽量不定义成员变量,即使定义成员变量,也不要对其修改值。
可以配置执行Servlet创建时机
service:提供服务方法,每一次Servlet被访问时执行,执行多次
destory:在服务器正常关闭时执行
在Servlet销毁之前执行,一般用于释放资源。
*IDEA会为每一个tomcat部署的项目单独建立一份配置文件。
Using CATALINA_BASE:
*工作空间项目 和 tomcat部署的web项目(tomcat真正访问,对应工作空间项目web目录下的所有资源) 存储的位置不一样
*web-inf中的内容不能被浏览器不能直接访问,静态资源不要放在WEB-INF目录下
*tomcat调试:打端点,debug
Servlet体系结构:
Servlet----接口
实现类:
GennericServlet (不用):将Servlet接口中的其他方法做了默认空实现,只将service方法作为抽象
*定义Servlet类时,可以直接继承GennericServlet实现service(),其他方法根据需要覆盖重写
HTTPServlet(用):
对HTTP协议的一种封装,简化操作
判断请求方式:req.getMethod() get/post
在HTTPServlet可以直接使用doGet,doPost
定义类继承HTTPServlet,重写doGet,doPost方法。
通过浏览器直接调用/demo2执行doGet方法,通过表单提交执行doPost方法
Servlet相关配置:
String[] urlpartterns:访问路径
可以为一个资源设置多个路径
路径定义规则:
/xxx , /xxx/xxx ,*.do(通配符)(优先级最低)