Servlet是一种独立于操作系统平台和网络传输协议的服务器端的Java应用程序。 
相同点: 
1. 不是独立的应用程序,没有main()方法。 
2. 不是由用户调用,由另一个应用程序(容器)调用。 
3. 都有一个生存周期, 包含init()和destory()方法。 
不同点: 
1. Applet运行于客户端,有丰富的图形化界面;Servlet运行于服务器端,没有图形界面。 
2. Applet为了实现浏览器与客户的强大交互;Servlet用于扩展服务器端的功能,实现复杂的业务逻辑。

Servlet工作流程

-------------------------------------------------------------------------------------------

-----------------------------------------------------------
1. 客户端将请求发送到服务器 
2. 服务器上的Web容器实例化(装入)Servlet,并为Servlet进程创建线程。 
(Servlet在出现第一个请求时装入,在服务器关闭之前不会卸载;Servlet也可配置为在Web应用程序启动时自动装载) 
3. Web容器将请求信息发送到Servlet 
4. Servlet创建一个响应,并返回到Web容器。 
(Servlet使用客户端中请求信息及服务器可访问资源等来动态构造响应) 
5. Web容器返回响应到客户端

Servlet装入和初始化:

Servlet调用init()方法执行初始化,init()方法只在Servlet创建时被调用,init()有二个版本:一个没有参数,一个以ServletConfig对象为参数。

调用Servlet

每个Servlet都对应一个URL地址,可以作为显式URL引用调用,或嵌入在HTML中并从Web应用程序返回。 
对于每个Web应用,都可以存在一个配置文件web.xml,存放关于Servlet的名称、对应的Java类文件、URL地址映射等信息。自JavaEE6后,JavaEE规范推荐使用注解来配置Web组件。

处理请求

Web容器收到请求后,Web容器会产生一个新的线程来调用Servlet的service(),service()方法检查HTTP请求类型(GET、POST、PUT、DELETE等),然后相应调用doGet()、doPost()、doPut()、doDelete()等方法。 
GET请求类型与POST请求类型:GET请求方式传输所带参数附加在URL后直接传给服务器,并可从服务器端的QUERY STRING环境变量中读取;POST请求方式传输所带参数被打包在数据包中传送到服务器。

多个请求

一个Servlet同一时刻只有一个实例。 
当多个请求发送到同一个Servlet,服务器会为每个请求创建一个新线程来处理。

注解

@WebServlet(name=“ServletName”, urlPatterns={“/ServletURL”})

会话跟踪

Cookie

URL重写

HttpSession对象

Servlet上下文-ServletContext

request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。

Servlet间协作-RequestDispatcher

HttpServletResponse.sendRedirect()与RequestDispatcher.forward()

操作本质上,RequestDispatcher.forward()是容器中控制权转向,在客户端浏览器的地址栏不会显示转向后地址;HttpServletResponse.sendRedirect()则是完全跳转,浏览器将得到跳转后地址,并重新发送请求连接。 
性能上,RequestDispatcher.forward()是在同一次请求处理过程中,HttpServletResponse.sendRedirect()是结束第一次请求,由浏览器重新发起一次请求。

拦截器-Filter

Filter拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。Filer可以改变一个请求(Request)或修改响应(Response)。在Servlet处理请求之前,与此Servlet关联的Filter首先执行,然后才是Servlet执行;如果一个Servlet有多个Filter,则根据配置的先后次序依次执行。

主要用途

  1. 访问特定资源(Web页、JSP页、Servlet)时身份验证
  2. 访问资源记录跟踪
  3. 访问资源转换

1必须实现三个方法

  1. doFilter(ServletRequest,ServletResponse,FilterChain)
  2. init(FilterConfig)
  3. destroy()

两种映射模式

  1. URL模式映射
  2. 默认映射

注解

@WebFilter(filterName=”FilterName” ,urlPatterns={“/ServletURL”})

配置文件

<filter>
<filter-name>FilterName</filtername>
<filter-class>FilterClass</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterName</filtername>
<url-pattern>/*</url-pattern>
<!- 过滤目标 ->
<dispatcher>REQUEST</dispatcher>
<!- 只有当request直接来自客户才生效 ->
<dispatcher>FORWARD</dispatcher>
<!- 只有当request被一个请求分发器使用forward()方法转发才生效 ->
<dispatcher>INCLUDE</dispatcher>
<!- 只有当request被一个请求分发器使用include()方法转发才生效 ->
<dispatcher>EXCEPTION</dispatcher>
<!- 只有当request被一个请求分发器使用“错误信息页”机制方法才生效 ->
</filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2监听器-Listener

Listener用来主动监听Web容器事件。所谓Web容器事件指Web应用上下文创建销毁、会话对象创建销毁以及会话属性信息增删改等。

Servlet规范中支持的Listener接口和Event类

  1. ServletContextListener(ServletContextEvent)
  2. ServletContextAttributeListener(ServletContextAttributeEvent)
  3. HttpSessionListener(HttpSessionEvent)
  4. HttpSessionActivationListener(HttpSessionEvent)
  5. HttpSessionAttributeListener(HttpSessionBindingEvent)
  6. HttpSessionBindingListener(HttpSessionBindingEvent)
  7. ServletRequestListener(ServletRequestEvent)
  8. ServletRequestAttributeListener(ServletRequestAttributeEvent)
  9. javax.servlet.AsyncListener(asyncEvent)

除了HttpSessionBindingListener接口和AsyncListener接口外,其他所有关于Listener的配置信息都存储在Web应用的部置文件中。

一个Servlet同一时刻只有一个实例。 当多个请求发送到同一个Servlet,服务器会为每个请求创建一个新线程来处理。相关推荐

  1. 虚拟服务器怎么突破磁盘2t,创建一个拥有超过2T数据盘的Windows虚拟机

    最近一个项目中,尝试发放一个Windows 虚拟机,要求10T的数据盘.但是给虚拟机挂载10T的数据盘之后,操作系统中只能读出2T来.搜索了下这个问题之后发现这个问题不只是虚拟机有此问题,在物理机上也 ...

  2. Servlet学习DAY_01:服务器概念/Web服务器的作用/ Servlet概念/ 如何关联和解除Tomcat/ 创建一个Web工程 /Servlet响应流程/ Get-Post /常见异常

    Servlet 什么是服务器 服务器就是一台高性能电脑 电脑上安装了提供服务的软件就称为 xxx服务器 举例: 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件 ftp服务器: 就是在电脑上安装 ...

  3. 膜拜大佬!mysql创建一个数据库命令

    原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为"已支付" 扣减相 ...

  4. 在android studio中如何创建一个类来继承另外一个类_在Android使用Transition API检测用户活动...

    在当今世界,移动设备是我们日常生活中必不可少的一部分,我们在走路.跑步.开车以及其他许多活动时都会使用移动设备. 了解用户拿着手机的时候在做什么,可以让你的应用程序根据用户的动作进行直观的调整.对于某 ...

  5. 一个服务器上放多个网站,一个云服务器放多个网站吗

    一个云服务器放多个网站吗 内容精选 换一换 如果您使用华为云云速邮箱作为企业邮箱,并在Web端管理使用,此时需要为邮箱绑定域名,通过域名访问网页版邮箱.本节介绍使用华为云云速邮箱,且网站域名解析至中国 ...

  6. 使用YAML创建一个 Kubernetes Depolyment

    关注公众号"风色年代"订阅更多精彩文章,本博大部分文章为转载并已标明原文出处,如有再转敬请保留,请自觉尊重原创作者的劳动成果! https://www.kubernetes.org ...

  7. 从零开始创建一个Android主屏幕Widget

    登录 / 注册 IT168首页 手机 整机 DIY硬件 摄影 消费数码 数字家电 企业IT 企业商用 办公 互动 社区 全部频道 IT168技术开发频道 IT168首页 > 技术开发 >  ...

  8. linux怎么创建用户登录,如何创建一个不能登录的Linux用户名

    作为一个Linux系统管理员,出于安全原因,有时候可能需要创建一个无法登录的用户.什么时候需要这种类型的用户?例如,您必须为应用程序创建一个用户才能正常运行,但是您不希望该用户具有主目录或登录权限. ...

  9. C#游戏编程之创建一个简单的卷轴射击游戏

    前几天很多朋友要求贴一篇有关C#游戏开发的实例.本篇文章是创建一个简单的卷轴射击游戏开发实例,内容比较完整,分享给大家,不过篇幅有些长,可以慢慢看哈!本文除CSDN博客外,任何媒体和出版物禁止转载和使 ...

最新文章

  1. 查看sqlserver版本
  2. 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
  3. 吴恩达深度学习 —— 3.10 直观理解反向传播
  4. [转载]linux 出现: Starting MySQL.Manager of pid-file quit without updating file.[FAILED] 已解决...
  5. kafka计算机专业读法_面试官:Kafka 为什么快?
  6. 个性化推荐认知之----数字化转型浪潮下,产品经理应如何重新认知个性化推荐?...
  7. 北斗三号频点_海格通信发布国内首批北斗三号双模应用专用芯片及系统解决方案,对外展示“北斗+5G”的关键成果转化...
  8. ORA-01033 ORACLE 正在初始化或关闭
  9. 微信小程序开发入门篇
  10. 谈谈R中的乱码(三)
  11. Atitit 突发事件应急处置相关制度和措施 1. 第一章 总则 1 2. 第二章 突发事件分类 2 2.1. (一)治理类 2 2.2. (二)运营类 2 2.3. (三)环境类 3 2.4.
  12. 数据集_FashionMNIST 数据集
  13. Win10右键新建中没有新建文件夹,电脑右键新建文件夹不见了
  14. 修改tomcat服务器图标,如何修改tomcat项目的图标(两种)
  15. 网页版微信协议登陆,没什么用...
  16. Verilog语言、语法
  17. TED演讲双语演讲稿:为什么我们很难做出理性的决定?
  18. php 百分比转换小数点,php 百分数如何转小数
  19. 堆和栈的区别(内存和数据结构)
  20. 使用w3c解析xml文档

热门文章

  1. 第十二届蓝桥杯单片机省赛客观题
  2. 2019年猪年海报PSD模板-第二部分
  3. music介绍了快拍数
  4. 您的请求带有不合法参数,已被管理员设置拦截
  5. 如何下载小红书平台上的个人分享文章?
  6. ES2中关于索引模板的操作
  7. 用Java输出百钱百鸡的方法及方法数量
  8. 新开公司怎样撰写公司章程
  9. 纯css写出tips的几种方法
  10. 基于springboot的超市管理系统(源码+数据库)003