【校招VIP】Javaweb三大组件——Servlet、Filter、Listener

3小时前 收藏 0 评论 0 java开发

【校招VIP】Javaweb三大组件——Servlet、Filter、Listener

转载声明:文章来源https://blog.csdn.net/m0_63624519/article/details/140603075

Servlet
概念
Servlet是Java提供的一门动态web资源开发技术,是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器(如:tomcat,jetty)运行Servlet


使用
1、创建web项目,导入Servlet依赖坐标

<dependency>
<groupld>javax.servlet</groupld>
<artifactld>javax.servlet-api</artifactld>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

2、 创建:定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话

public class ServletDemo1 implements Servlet {
public void service(){}
}

3、配置:在类上使用@WebServlet注解,配置该Servlet的访问路径

@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
}

4、访问:启动Tomcat,浏览器输入URL访问该Servlet

//web-demo为项目名称,demo1为第三部配置的访问路径
http ://localhost:8080/web-demo/demo1

执行流程


生命周期
生命周期是指一个对象从创建到被销毁的整个过程


Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
2.初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如
加载配置文件、创建连接等初始化的工作。该方法只调用一次
3.请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。
4.服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成
资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的
垃圾收集器所回收

HttpServlet


我们将来开发B/S架构的web项目,都是针对HTTP协认,所以我们自定义Servlet,会继承HttpServlet

@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet{

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp){

//TODO Get 请求方式处理逻辑

}
@Override
protected void doPost (HttpServletRequest req, HttpServletResponse resp){

//TODO Post 请求方式处理逻辑

}

}

HttpServlet会根据请求方式的不同,调用不同的方法。

Filter
概念
Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等…


使用
1、定义类,实现Filter接口,并重写其所有方法

public class FilterDemo implements Filter {

public void init(FilterConfig filterConfig){}
public void doFilter(ServletRequest request){}
public void destroy() {}

}

2、配置Filter拦截资源的路径:在类上定义@WebFilter注解

@WebFilter("/*")
public class FilterDemo implements Filter {

}

3、在doFilter方法中书写放行前要执行的逻辑代码,并放行

public void doFilter(ServletRequest request, ServletRequest response){

//放行前要执行的代码
//放行
chain.doFilter(request,response);

}

执行流程


1.放行后访问对应资源,资源访问完成后,还会回到Filter中吗?会
2. 如果回到Filter中,是重头执行还是执行放行后的逻辑呢?放行后逻辑
拦截路径
Filter可以根据需求,配置不同的拦截资源路径

@WebFilter("/*")//拦截所有资源

拦截具体的资源: /index.jsp:只有访问index.jsp时才会被拦截。
目录拦截: /user/ *: 访问/user下的所有资源,都会被拦截
后缀名拦截 : * jsp:访问后缀名为jsp的资源,都会被拦截
拦截所有: / *: 访问所有资源,都会被拦截
PS:一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链。
注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序

Listener
概念
Listener 表示监听器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除
属性时自动执行代码的功能组件
Listener分类:JavaWeb中提供了8个监听器


使用
1、定义类,实现ServletContextListener接口

public class ContextLoaderListener implements ServletContextListener {
/ **

* ServletContext对象被创建:整个web应用发布成功
* @param sce

*/

public void contextInitialized(ServletContextEvent sce) {}
/ **
* ServletContext对象被销毁:整个web应用卸载
* @param sce
*/
public void contextDestroyed(ServletContextEvent sce) {}
}

2、在类上添加@WebListener 注解

C 0条回复 评论

帖子还没人回复快来抢沙发