1.Servlet概述
概念:server applet,运行在服务器端的小程序
- servlet是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则
- 自定义类,实现servlet接口,复写方法
简单项目
创建按JavaEE项目
定义一个类,实现servlet接口
- 注:将tomcat安装目录下的bin/servlet-api.jar包导入项目中
public class servletdemo1 implements Servlet
实现接口中的抽象方法
在web.xml文件中配置servlet ,写在根标签里
1
2
3
4
5
6
7
8
9
10
11
12<servlet>
<!--给servlet取名,任意 -->
<servlet-name>demo</servlet-name>
<!-- 指明servlet路径,包名.类名 -->
<servlet-class>cn.hxx.servletdemo1</servlet-class>
</servlet>
<servlet-mapping>
<!--servlet映射,必须与servlet-name同名 -->
<servlet-name>demo</servlet-name>
<!--这是浏览器中输入的访问该servlet的url-->
<url-pattern>/hxx</url-pattern>
</servlet-mapping>servlet注解配置方法
在实现类前面加注解 @WebServlet(资源路径)
2.执行原理
当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
查找web.xml文件,是否有对应的
<url-pattern>
标签体内容如果有,则再找到对应的
<servlet-class>
全类名tomcat将字节码文件加载进内存,并且创建其对象
调用方法
3.生命周期
- 被创建:执行init方法,只执行一次
- 默认情况下,第一次被访问时,servlet被创建
- 可以配置执行Servlet的创建时机:在web.xml中
<servlet>
标签体中配置
1.第一次被访问时,创建,<load-on-startup>
的值为负数
2.在服务器启动时,创建 ,<load-on-startup>
为0或者正数 - servlet的init方法,只执行一次,说明一个servlet在内存中只存在一个对象,servlet是单例的。多个用户同时访问时可能存在线程安全问题,所以尽量不要在servlet定义成员变量。即使定义了成员变量,也不要修改值。
- 提供服务:执行service方法,执行多次
- 被销毁:执行destroy方法,执行一次。服务器正常关闭时,servlet被销毁。在销毁之前被执行,用于释放资源。
- getServletInfo:获取servlet的一些信息:版本、作者等等
- getServletConfig:获取ServletConfig对象(servlet的配置对象)
4. IDEA、tomcat、servlet相关配置
启动tomcat控制台或命令窗口中文乱码,将tomcat安装目录/conf/logging.properties中的所有UTF-8修改为gbk格式
IDEA会为每一个tomcat部署的项目单独简历一份配置文件
- 查看控制台的log:Using CATALINA_BASE: “C:\Users\97130\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat\Unnamed_tomcat_2”
工作空间项目 和tomcat部署的web项目
tomcat真正访问的是“tomcat部署的web项目”,其存放在整个项目的out\artifacts目录下
tomcat部署的web项目对应着“工作空间项目”的web目录下的所有资源
tomcat断点调试
5.servlet体系结构
- servlet —- 接口
- GenericServlet :将servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象方法。在定义servlet类时,可以直接集成GenericServlet类,实现service方法
1 |
|
- HttpServlet:对HTTP协议的一种封装,简化操作
- 定义类继承HttpServlet
- 复写doGet或doPost
1 |
|
- urlpattern:servlet访问路径
- 一个servlet可以定义多个访问路径:@WebServlet({“/demo3”,”/dd3”})
- 路径定义规则
- /xxx
- /xxx/xxx:多层路径,目录结构
- *.后缀名