Servlet学习笔记

Servlet是个啥

1.从使用的角度:Servlet是Java提供的动态web资源开发技术,动态资源就是每次使用不同的参数访问同一个资源,所返回的情况也不一样。例如登录网页时使用不同的账号名和密码,所返回的欢迎语不一样。
2.从原理的角度:Servlet是JavaEE的规范之一,有一个Sevlet接口,需要定义Sevlet类去实现接口中所有的方法,并由web服务器运行。

Servlet的快速开发步骤

1. 导入坐标:创建web项目,导入Servlet的依赖坐标

<dependency>
	<groupid>javax.servlet</groupid>
	<artifactid>javax.servlet-api</artifactid>
	<version>3.1.0</version>
	<scope>provided</scope>
</dependency>

注:依赖选项中依赖作用范围<scope>provided</scope>要用provided关键字,限制该Servlet依赖在编译和测试的范围中使用,防止包里面的Servlet和Tomcat里自带的发生冲突
复习一下:依赖作用范围(from:https://blog.csdn.net/u010002184/article/details/87989164)
在这里插入图片描述

2. 实现接口:创建一个类来实现Servlet接口

接口中5种方法init() service() destroy() getServletInfo() getServletConfig都需要重写@Override
注:service方法中最好输入一句话来提示service已经启动了

3. 配置注解:使用@WebServlet配置Servlet的访问路径

@WebServlet("/路径")
public class ServletDemo implements Servlet{}

4. 启动服务:访问该Servlet资源

启动Tomcat,用生成的url访问

Servlet的执行流程

Q1. 谁创建了Servlet对象,谁使用了Servlet这些方法?

答:服务器端有Servlet容器,由容器根据配置来实例化Servlet,并根据不同请求来调用这些方法

Q2. 服务器中怎么知道Servlet中一定有service方法?

答:Servlet接口中有service方法,服务器通过这个来知道

Servlet的生命周期

Q: Tomcat服务器中的Servlet容器什么时候创建Servlet对象?

  1. 加载与实例化:默认第一次被访问时,由容器创建Servlet对象,但可以更改实例化的时刻
// loadOnStartup=: 负整数代表默认,0-正整数:代表服务器启动时创建Servlet对象,而0为最优先
@WebServlet(urlPatterns="/路径",loadOnStartup = 1)
public class ServletDemo implements Servlet{}

注:在启动时创建Servlet对象,可以将耗时的操作提前到服务器启动时完成
3. 初始化: 在Servlet实例化后,容器会仅调用一次init()方法初始化该对象实例,重写主要加载配置文件,创建连接这些逻辑。
4. 请求处理: 每次请求Servlet就调用一次service()方法
5. 终止服务:在服务器关闭或内存释放时,容器调用destroy()方法,释放该Servlet实例,然后该实例就被Java给gc了

Servlet的体系结构

简化了Servlet的开发,真正的开发其实不是直接实现接口的
包括了Servlet体系根接口,Servlet抽象实现类,对Http协议封装的Servlet实现类
在这里插入图片描述

HttpServlet是个嘛(天津口音)

介似个抽象类,在servlet.http包中,定义了采用HTTP通信协议的HttpServlet类。

HttpServlet的使用步骤

  1. 自定义Servlet不实现Servlet接口,而是extends HttpServlet类
  2. 重写doGet()doPost()方法,这两个方法是对Get和Post操作的处理逻辑
  3. 获取HTTP请求信息。通过HttpServlet的Request对象来检索HTML表单所提交的数据或URL上的查询字符串
  4. 生成HTTP响应结果。通过HttpServlet的Response对象生成响应结果。
@WebServlet("/demo")
public class ServletDemo extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp){
		//方法体是Get请求方式的处理
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp){
		//方法体是Post请求方式的处理
	}
}

Q: HttpServlet为什么要根据请求方式的不同来调用不同的方法?
A: 因为Get和Post所请求的消息是不同的,所以要根据不同的消息写不同的方法
Q: 怎么去调用不同的方法?
A:Service方法里有一个逻辑判断,当请求为Get类型和Post类型时做出不同的调用

Servlet urlPattern访问路径的配置

1.一个Servlet可以配置多个urlPattern

1. 精确匹配(用得最多的)

配置路径和访问路径必须完全一致
在这里插入图片描述

2. 目录匹配

配置路径里面有通配符*
在这里插入图片描述

3. 扩展名匹配

访问路径里面不能写斜杠
在这里插入图片描述

4.任意匹配

在这里插入图片描述

/*/两种方式,但是不要配/,该方法会覆盖默认的Defaultservlet导致静态资源不可访问,/代表匹配任意访问路径

Servlet的配置方法

3.0版本后支持使用annotation配置,3.0版本前只能用xml文件配置,但是只能选择一种,如果两种都用了会报错,而annotation会更简单

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值