【Javaweb——servlet】配置与生命周期

什么是servlet?

有人说:servlet是是JAVAEE规范之一,也就是一个接口。
Servlet(Server Applet)是Java Servlet的简称,而Servlet的英文意为:
在这里插入图片描述
所以本质上servlet是一个运行再服务器端的Java小程序。
既然是个程序,那当然是来用的喽!被当作接口,只是从用法一方面来看,但它实际是一个程序。
就像马可以骑,我们说它是坐骑,但它本质上还是一匹马。
servlet可以接收客户端发来的信息,并响应数据给客户端。

同时它也是Javaweb三大组件之一(还有filter过滤器,listener监听器)

配置servlet的两种方法:

1.自己在JAVA resource/src的包里面创建一个java文件,然后在web.xml中配置相应信息。(servlet和servlet-mapping)
servlet-mapping的作用
如果url-pattern定义的是路径,那么以后所有对这个路径下资源的请求都会由servlet-name中定义的servlet处理;
如果url-pattern定义的是资源格式例如*.do等,那么对于所有符合这种格式的资源的请求都由指定的servlet处理。
(首先 web.xml 是java web 项目的一个重要的配置文件,但是web.xml文件并不是Java web工程必须的。web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。)
url地址如何定位到servlet访问
在这里插入图片描述
当在浏览器中输入访问地址:http://localhost:8080/06_servlet/hello来访问servlet时

8080是端口号:定位tomcat
从/hello,定位到url-pattern(是个地址),请求都会由servlet-name中定义的servlet处理;然后检查mapping中的name和servlet的name是否相同,如果相同,就执行servlet中的类全名中的文件

什么是url映射?
在这里插入图片描述
2.(比较简单方便)直接在java文件中写注解,urlpatterns就是一个映射,你可以通过映射里面的值访问servlet。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>hello-demo</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<!--servlet标签是给tomcat配置servlet程序 -->
	<servlet>
	<!-- servlet-name是给servlet程序取的别名(一般是类名) -->
		<servlet-name>ServletByhand</servlet-name>
	<!-- servlet-class是程序的全类名 -->
		<servlet-class>com.guigu.servlet.ServletByhand</servlet-class>
	</servlet>
	<servlet-mapping>
		<!--servlet-name的作用是告诉服务器,配置的程序是给那个servlet程序用-->
		<servlet-name>ServletByhand</servlet-name>
		<!-- url-parrern是配置访问地址 -->
		<!--/’代表地址‘http://ip:port/工程路径’  </br>
		/hello代表http://ip:port/工程路径 /hello  </br>
		-->
		
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>

</web-app>

注意:

  1. 两个servlet-name一般都是类名
  2. 约定大于规则:不要乱取名,容易让人看的迷惑.
  3. url-pattern的取名要和程序的名称有关联,让人可以看出其中有联系

GenericServlet类:
是个抽象类,实现了servlet接口和ServletConfig接口,提供了servlet接口中除了service()外的所有方法的实现。所以如果我们用其子类时,需要重写service

javax.servlet.http是对servlet的HTTP扩展,
HttpServlet类:对servlet的扩展,使其适合HTTP协议
HttpServletRequest接口:继承ServletRequest接口,提供了针对HTTP请求的操作方法
HttpServletResponse接口:继承ServletResponse接口,提供了针对HTTP响应的方法

Servlet生命周期:

init():出生、
service():工作、
destroy():销毁
加载和实例化Servlet类,调用init(), 一旦初始化完成,容器从客户收到请求时就将调用它的service()方法,最后容器在servlet实例上调用destroy()方法销毁。

加载和实例化servlet:
对于每个servlet,web容器使用Class.forname()加载和实例化servlet。如果没定义任何构造方法,则编译器将添加默认构造方法,bing实例化成功之后,就进入生命周期。
初始化Servlet
创建Servlet实例后,将只调用init(ServletConfig)一次,ServletConfig包含了在Web应用程序中的初始化参数。我们也可以在web容器启动时或者在第一次被访问时将servlet加载到容器中,并初始化,这就是预初始化,可以在@WebServlet注解的loadOnStartup属性或者在web.xml中的<load-on-startup>中指定。
如果第一次被访问后,才将servlet加载到容器中,就成为延迟加载,可以加快容器的启动速度,但是如果初始化时要完成很多任务,那么第一个发送请求的客户等待时间会很长。
为客户提供服务
初始化成功之后,用户会向容器请求访问Servlet,容器收到请求后,会根据请求中的URL找到正确的Servlet,然后创建HttpServletRequest请求对象,和HttpServletResponse对象,然后创建一个新的线程,将两个对象放进去,有多少个对象就有多少个线程,对象在线程中使用service()产生结果,将结果返回给客户浏览器,然后销毁线程。
销毁和卸载Servlet
等到其它执行Servlet的service()线程结束,容器将调用destroy()方法,释放Servlet的资源,废除之前生命周期的方法。如果Servlet实例被销毁,就会被作为垃圾回收,如果web容器关闭,Servlet也将被销毁和卸载。

扫描二维码关注公众号,回复: 11956294 查看本文章

小知识:

一个程序可以占用多个端口号
一个端口号只能代表一个程序

参考:https://blog.csdn.net/qq_38263562/article/details/80015082?utm_source=blogxgwz5

猜你喜欢

转载自blog.csdn.net/qq_44308180/article/details/108630336
今日推荐