在工作中每天都在使用各种框架,久而久之你是否已经忘记了当初在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 {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("Serlvet初始化");System.out.println("初始化参数:"+servletConfig.getInitParameter("param"));}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("处理请求");}@Overridepublic String getServletInfo() {return null;}@Overridepublic 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 {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println( filterConfig.getInitParameter("param"));}@Overridepublic void destroy() {System.out.println("Servlet容器销毁");}@Overridepublic 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 {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("容器初始化");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("容器销毁");}
}

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

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

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

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

你是否已经忘了Serlvet是什么?相关推荐

  1. 私钥设置_私钥忘了怎么办,还能找回来吗?能

    Part 1 在币圈,最遥远的距离不是比特币就在我面前我却没办法买下,而是我手里拿着数字钱包却忘了私钥...... 数字钱包不比银行卡,银行卡密码丢了,我们可以带上身份证去找回,但数字钱包的私钥丢了, ...

  2. 当你学了现在的忘了前面的

    我怀疑我的智商应该不是很高,要不然我也不会学的如此狼狈.虽然我总是能很好的理解现在所学的知识点,但是我就是记不住,当下次再次需要上次的知识点来解决问题的时候,我总是忘的差不多了,要不就是没把握和对不对 ...

  3. 下载备忘:甘特图实现的代码

    通过asp.net 代码,拼接字符串,实现甘特图. 样式和原型全部来源于jquery.ganttView插件, https://github.com/mbielanczuk/jQuery.Gantt  ...

  4. vim的一些快捷键,备忘

    vim的一些快捷键,备忘 快捷键                                            作用 ctrl+g                                ...

  5. 资源 | AI、神经网络、机器学习、深度学习以及大数据学习备忘单

    向AI转型的程序员都关注了这个号☝☝☝ 以下是关于神经网络.机器学习.深度学习以及大数据学习的备忘单,其中部分内容和此前发布的<资源 | 值得收藏的 27 个机器学习的小抄>有所重复,大家 ...

  6. 机器学习项目的备忘清单!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Harshit Tyagi,编译:机器之心 机器学习项目中含有众多 ...

  7. 潘石屹首次Python考试成绩 99 分,失分点:画完图后忘了隐藏画笔的箭头

    机器之心报道 参与:蛋酱 「人生苦短,我潘石屹考了 Python.」 5 月 16 日凌晨,房地产大佬.SOHO 中国董事长潘石屹在微博晒出了自己的第一张 Python 考试成绩单:99 分,优秀! ...

  8. 忘了python关键语句?这份备忘录拯救你的记忆

    忘了Python关键语句?这份备忘录拯救你的记忆 今天要介绍的 Python 3 Cheat Sheet 由法国国家科学研究中心(CNRS)的法国机械工程与信息技术实验室(LIMSI)的工程师 Lau ...

  9. linux连接wifi账户密码忘了怎么办,wifi登录密码忘了怎么办?

    请问大家:wifi登录密码忘了怎么办? 答:如果在设置wifi的时候,发现wifi的登录密码忘了,不能进入wifi路由器的设置页面,这种情况下,可以按照下面的方法来解决问题. 1.在wifi路由器底部 ...

最新文章

  1. 乡下人最嘲笑城里人的16件事,无语了!
  2. java 匿名list,java创造匿名对象的两种方法
  3. [转帖]高档的moss页面修改工具SPCAMLEditor使用系列(1)--利用SPCAMLEditor,10分钟打造一个在线视频播放库...
  4. python函数图像加标签_tkinter(py3)更改图像标签,函数内部,实时
  5. 4G室内直放站_室内信号不太好,安装一个手机信号放大器,有效果吗?
  6. mysql大规模读写性能_十招搞定 MySQL 大规模数据库的性能和伸缩性优化
  7. CentOS内核编译
  8. python3接收、解析邮件
  9. 你觉得你个性上最大的优点是什么?
  10. IOS7实现扫描二维码
  11. Liferay 用本地私服(nexus) 打包部署Portlet应用
  12. Expression Blend 学习视频下载
  13. 【暴力搜索】[HDU 1016]Prime Ring Problem
  14. XPS10.1仿真PPC440步骤及遇到的问题
  15. 错误:java.lang.IllegalArgumentException: Service not registered
  16. 教师节感恩_在Excel中计算感恩节日期
  17. “ 流量or变现 “ 网销50条干货必备
  18. 微信小程序之身份证照片正反上传
  19. java获取pdf文件首页图片,用来当做封面
  20. 崩溃,我带的实习生把图片直接存到了服务器上

热门文章

  1. 【干货】10张GIF动图让你弄懂循环、递归、二分检索等概念
  2. 运用Parcelable将类序列化并绑定给Intent
  3. 一个人不孤单,想一个人才孤单
  4. 计算机考研英语有听力吗,考研英语有听力吗
  5. 阿拉伯数字转中文大(小)写的函数
  6. 当初怼刘海屏最狠的三星,为什么又用了回来?
  7. 大型双标现场?摩托车举报特斯拉逆行反被罚
  8. “考不上本科是智商有问题”,这位吴先生火了!涉事公司回应...
  9. 曝Redmi Note 9系列下周发布:最便宜的一亿像素手机
  10. 吊打奔驰宝马!这个又贵又丑的“玩具”,为何让男人集体高潮?