01.Servlet&ServletContext

什么是Servlet

​ Servlet是运行在服务端的java小程序,是sun公司提供的一套规划或接口。用来处理客户端请求,响应给浏览器的动态资源。

​ Servlet是JavaWeb三大组件之一(Servlet,Filter,Listener)

public interface Servlet {
    
    
    void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException;

    javax.servlet.ServletConfig getServletConfig();

    void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException;

    java.lang.String getServletInfo();

    void destroy();
}
其中最重要的方法是init(),service(),destory().

Servlet生命周期

1、加载和初始化

服务器第一次接收到用户请求这个Servlet后,类加载器将与之对应Servlet的class文件加载进内存。Spring容器通过Java反射机制创建Servlet的实例化对象,并执行init方法进行对象的初始化.

2、 请求处理

servlet对象创建完成之后,便会一直存在Servlet容器中,用来接收用户的请求。每一次请求都会调用servlet的service方法。
第一次请求servlet会执行servlet的init方法和service方法。

3、 销毁

当项目从服务器中移除时,或者正常关闭服务器时,都会销毁servlet对象,并执行servlet的destroy方法。非正常关闭服务器不会调用destroy方法,如用任务管理器强行关闭服务。

Servlet继承关系

当你写一个类处理用户请求时,这个类一般是继承HttpServlet,那么HttpServlet与Servlet有什么关系呢?在这里插入图片描述
可以看到自己写的MyServlet类继承HttpServlet,HttpServlet 继承GenericServlet ,而GenericServlet 继承Object且实现Servlet接口的。
它分这么多层的意义在于方便开发人员进行开发,单一个Servlet接口的方法有限,GenericServlet在此基础上补充了很多方法,HttpServlet更加专注于Http请求,HttpServlet对service方法进行了一次封装,它根据请求的方式将Servlet的service方法,"拆分"了许多小方法.如doPost,doGet方法等,开发人员在编写接收post请求的代码时,只需重写doPost()方法即可。这也是为什么我们继承HttpServlet后只需重写doPost和doGet方法,它还是执行了service方法的。

配置Sevlet的访问路径

1、注解配置

在servlet类上加上@WebServlet注解,它的三个属性name,urlPatterns,value都可以用来配置servlet的访问路径,但只有value可以省略变量名

在这里插入图片描述
这里默认采用@WebServlet的value属性接收

2.、xml配置

首先需要在xml中注册Servlet,然后再配置Servlet的映射。
在这里插入图片描述

Servlet路径匹配原则:

1、完全路径匹配: 以/开始

例如: /ServletDemo1 ; /loginServlet/login ; /aaa/bbb/ccc
请求的路径需完全与servlet注册的路径一致,才能请求给这servlet

2、目录匹配: 以/开始,以*结束

例如: /* (所有) ,/a/* (a目录下所有)

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

3、 扩展名匹配: 不能以 / 开始 以 * 开始

例如: *.do , *.action , *.jsp

什么是ServletContext?

1:ServletContext是Servlet中自带一个对象
2:ServletContext对象时在第一次访问Servlet时,自动创建
3:一个项目中只有一个ServletContext对象

ServletContext作用

1、ServletContext可以实现多个Servlet之间数据的共享

getServletContext()
setAttribute(key,value)
getAttribute(key)
在这里插入图片描述

2、ServletContext可以读取web项目中文件的内容

web目录下文件: InputStream is = getServletContext().getResourceAsStream(“a.txt”);
src下的文件: InputStream is = Demo3FileServlet.class.getClassLoader().getResourceAsStream(“a.txt”);

3、ServletContext可以读取整个项目的初始化数据

在xml文件中设置数据
在这里插入图片描述
使用ServeltContext提供的方法获取:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lglglglglgui/article/details/108477309
今日推荐