你是否已经忘了Serlvet是什么?

在工作中每天都在使用各种框架,久而久之你是否已经忘记了当初在web.xml中配置Servlet中的日子,你是否还记得Filter,ServletCointextListener他们的作用都是什么,触发时机是什么?这些组件是一切的基石,我们不应该忘记。正是这些扩展点,让一切成为可能。

java Servlet是和平台无关的服务器组件,它运行在Servlet容器中,Servlet容器负责Servlet和客户的通信以及调用Servelt方法,Servlet和客户的通信采用的是“请求/响应”。Servlet是一组规范,具体化就是两个jar文件,servlet-api.jar 和 jsp-api.jar 规范了Servlet接口,Filter接口,Listener接口,ServletRequest接口,ServletResponse接口等。Serlvet3.1规范

Servlet运行在Servlet容器(如Tomcat,JBoss)中,Serlvet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的声明周期。

回想一下最“单纯”的日子

一切的开始都是那么的简单直接。Tomcat启动,加载web.xml文件,web.xml文件中配置信息又以节点,节点将请求与具体的处理类关联起来。经过简单的封装就成了之前常j继承扩展的HttpServelt。(经过复杂的封装就是Spring-MVC)

web.xml 中配置

    <servlet>
    	<!--关联servelt-->
        <servlet-name>testController</servlet-name>
        <!--全类名确定处理Serlet类-->
        <servlet-class>com.tttiger.controller.TestController</servlet-class>
        <!--其他自定义参数-->
        <init-param>
            <param-name>param</param-name>
            <param-value>world</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
    	<!--关联servelt-->
        <servlet-name>testController</servlet-name>
        <!--匹配请求路径-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

处理请求Servlet

package com.tttiger.controller;

import javax.servlet.*;
import java.io.IOException;

public class TestController implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("Serlvet初始化");
        System.out.println("初始化参数:"+servletConfig.getInitParameter("param"));
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("处理请求");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("Servlet容器销毁");
    }
}

Filter

Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servelt相应先后进行一些特殊功能的处理。(之后的各种鉴权框架Shiro,SpringSecurity都已此为基石扩展)

package com.tttiger.controller;

import javax.servlet.*;
import java.io.IOException;
public class TestFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println( filterConfig.getInitParameter("param"));
    }

    @Override
    public void destroy() {
        System.out.println("Servlet容器销毁");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("拦截请求前");
        // 交给下一下拦截器处理
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("拦截请求后");
    }
}

Listener

各种Listener用于监听其他应用相关对象的变化,例如ServletContextListener用于监听Web应用的生命周期。

package com.tttiger.controller;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TestServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("容器初始化");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("容器销毁");
    }
}

ServletContextAttributeListener:用于监听Request.setAttribute()或Request.removeAttribute()。(请求域设置属性)

HttpSessionListener:用于监听Session的创建与销毁

HttpSessionBindingListener:用于监听Session.setAttribute()或Session.removeAttribute()。

HttpSessionActivationListener:用于监听Sesssoin的钝化与活化。(Session的序列化与反序列化)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值