Servlet基础
文章目录
前言
Servlet基础
以下是本篇文章正文内容,下面案例可供参考
一、Servlet概念
servlet名叫servlet规范是javaEE的一种规范之一,它有点类似于java中的API。使用JavaEE帮助文档学习servlet这个API。
JavaEE帮助文档对中Servlet该API的总结如下:
1.Servlet是运行在web服务器端的Java小程序
2.Servlet可以接收和响应客户端的请求
3.Servlet的实现三种方式(Servlet接口、继承GenericServlet和HttpServlet抽象类)
4.Servlet可以配置
二、Servlet的实现过程
基于B/S架构:
也就是基于浏览器的对Servlet的请求与响应。
从客户浏览器—>Tomcat服务器–>我们的应用Servletdemo–>该应用下的demo.xml–>对应的FirstServlet–>返回给浏览器
二、Servlet的类关系图
HttpServlet继承自GenericServlet
GenericServlet继承自Servlet
三、Servlet的创建(三种方式)
1.Servlet接口创建
新建一个类,实现Servlet接口,重写接口的所有方法
2.继承GenericServlet抽象类创建
新建一个类,继承GenericServlet抽象类,重写Servlet方法,使Servlet开发变得简洁,表示在接受和响应客户端请求方面有重写的需求,但与Http协议无关。
3.继承HttpServlet抽象类创建
新建一个类,继承HttpServlet抽象类,重写DoGet和DoPost方法,不需要覆盖Servlet方法,此创建方式与Http协议有关,也就是客户端的请求与响应都符合Http协议规范。
四 、Servlet的运行过程
Servlet的生命周期
Servlet该对象的生命周期包含:创建—运行—销毁的过程。
1.Servlet的创建:当浏览器发送第一次请求到达servlet该对象被创建出来,并且初始化,放入内存中。
2.Servlet的运行:在tomcat服务器运行期间,该对象一直在运行。
3.Servlet的销毁:当tomcat服务器停止或者销毁时,该对象跟着销毁。
由此可以看出,Servlet对象在整个过程中只会被创建一次,而且只被初始化、实例化一次,销毁也只会随着服务器销毁一次,所以该对象只有一个实例,又称它为单例模式。
五、Servlet的配置
1.Servlet三种映射方式
新建一个Servlet类(ServletDemo1继承HttpServlet抽象类实现Servlet)
1.指名道姓式–>也就是准确的指明该Servlet类名
<!--servlet声明-->
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>test.servlet.ServletDemo1</servlet-class>
</servlet>
<!--servlet映射-->
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/ServletDemo1</url-pattern>
</servlet-mapping>
2./开头+通配符的方式–>此种方式,只要符合目录结构即可,不用考虑结尾是什么。
<!--servlet声明-->
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>test.servlet.ServletDemo1</servlet-class>
</servlet>
<!--servlet映射-->
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/Servlet/*</url-pattern>
</servlet-mapping>
3.通配符+固定格式结尾
<!--servlet声明-->
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>test.servlet.ServletDemo1</servlet-class>
</servlet>
<!--servlet映射-->
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/*.all</url-pattern>
</servlet-mapping>
越具体的优先级越高,所以第一种优先级大于第二种,第二种优先级大于第三种
2.Servlet的创建时机
第一种:应用加载时创建Servlet,它的优势是在服务器启动时,就把需要的对象都创建完成了,从而在使用的时候减少了创建对象的时间,提高了首次执行的效率。它的弊端也同样明显,因为在应用加载时就创建了Servlet对象,因此,导致内存中充斥着大量用不上的Servlet对象,造成了内存的浪费。
<!----在javaEE7中的web.xml中配置>
servlet>
<servlet-name>servletDemo3</servlet-name>
<servlet-class>com.itheima.web.servlet.ServletDemo3</servlet-class>
<!--配置Servlet的创建顺序,当配置此标签时,Servlet就会改为应用加载时创建
配置项的取值只能是正整数(包括0),数值越小,表明创建的优先级越高
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servletDemo3</servlet-name>
<url-pattern>/servletDemo3</url-pattern>
</servlet-mapping>
第二种:请求第一次访问是创建Servlet,它的优势就是减少了对服务器内存的浪费,因为那些一直没有被访问过的Servlet对象都没有创建,因此也提高了服务器的启动时间。而它的弊端就是,如果有一些要在应用加载时就做的初始化操作,它都没法完成,从而要考虑其他技术实现
通过上面的描述,相信同学们都能分析得出何时采用第一种方式,何时采用第二种方式。就是当需要在应用加载就要完成一些工作时,就需要选择第一种方式。当有很多Servlet的使用时机并不确定是,就选择第二种方式。
3. Tomcat默认Servlet
tomcat中有默认的servlet,配置在web.xml中
它的映射路径是<url-pattern>/<url-pattern>
,当浏览器在发送请求时,首先会在我们应用中的web.xml中查找映射配置,如果有就执行,如果没有对应的Servlet路径时,就去找默认的Servlet,由默认Servlet处理。所以,一切都是Servlet。