一个Servlet同一时刻只有一个实例。 当多个请求发送到同一个Servlet,服务器会为每个请求创建一个新线程来处理。
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,则根据配置的先后次序依次执行。
主要用途
- 访问特定资源(Web页、JSP页、Servlet)时身份验证
- 访问资源记录跟踪
- 访问资源转换
1必须实现三个方法
- doFilter(ServletRequest,ServletResponse,FilterChain)
- init(FilterConfig)
- destroy()
两种映射模式
- URL模式映射
- 默认映射
注解
@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类
- ServletContextListener(ServletContextEvent)
- ServletContextAttributeListener(ServletContextAttributeEvent)
- HttpSessionListener(HttpSessionEvent)
- HttpSessionActivationListener(HttpSessionEvent)
- HttpSessionAttributeListener(HttpSessionBindingEvent)
- HttpSessionBindingListener(HttpSessionBindingEvent)
- ServletRequestListener(ServletRequestEvent)
- ServletRequestAttributeListener(ServletRequestAttributeEvent)
- javax.servlet.AsyncListener(asyncEvent)
除了HttpSessionBindingListener接口和AsyncListener接口外,其他所有关于Listener的配置信息都存储在Web应用的部置文件中。
一个Servlet同一时刻只有一个实例。 当多个请求发送到同一个Servlet,服务器会为每个请求创建一个新线程来处理。相关推荐
- 虚拟服务器怎么突破磁盘2t,创建一个拥有超过2T数据盘的Windows虚拟机
最近一个项目中,尝试发放一个Windows 虚拟机,要求10T的数据盘.但是给虚拟机挂载10T的数据盘之后,操作系统中只能读出2T来.搜索了下这个问题之后发现这个问题不只是虚拟机有此问题,在物理机上也 ...
- Servlet学习DAY_01:服务器概念/Web服务器的作用/ Servlet概念/ 如何关联和解除Tomcat/ 创建一个Web工程 /Servlet响应流程/ Get-Post /常见异常
Servlet 什么是服务器 服务器就是一台高性能电脑 电脑上安装了提供服务的软件就称为 xxx服务器 举例: 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件 ftp服务器: 就是在电脑上安装 ...
- 膜拜大佬!mysql创建一个数据库命令
原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为"已支付" 扣减相 ...
- 在android studio中如何创建一个类来继承另外一个类_在Android使用Transition API检测用户活动...
在当今世界,移动设备是我们日常生活中必不可少的一部分,我们在走路.跑步.开车以及其他许多活动时都会使用移动设备. 了解用户拿着手机的时候在做什么,可以让你的应用程序根据用户的动作进行直观的调整.对于某 ...
- 一个服务器上放多个网站,一个云服务器放多个网站吗
一个云服务器放多个网站吗 内容精选 换一换 如果您使用华为云云速邮箱作为企业邮箱,并在Web端管理使用,此时需要为邮箱绑定域名,通过域名访问网页版邮箱.本节介绍使用华为云云速邮箱,且网站域名解析至中国 ...
- 使用YAML创建一个 Kubernetes Depolyment
关注公众号"风色年代"订阅更多精彩文章,本博大部分文章为转载并已标明原文出处,如有再转敬请保留,请自觉尊重原创作者的劳动成果! https://www.kubernetes.org ...
- 从零开始创建一个Android主屏幕Widget
登录 / 注册 IT168首页 手机 整机 DIY硬件 摄影 消费数码 数字家电 企业IT 企业商用 办公 互动 社区 全部频道 IT168技术开发频道 IT168首页 > 技术开发 > ...
- linux怎么创建用户登录,如何创建一个不能登录的Linux用户名
作为一个Linux系统管理员,出于安全原因,有时候可能需要创建一个无法登录的用户.什么时候需要这种类型的用户?例如,您必须为应用程序创建一个用户才能正常运行,但是您不希望该用户具有主目录或登录权限. ...
- C#游戏编程之创建一个简单的卷轴射击游戏
前几天很多朋友要求贴一篇有关C#游戏开发的实例.本篇文章是创建一个简单的卷轴射击游戏开发实例,内容比较完整,分享给大家,不过篇幅有些长,可以慢慢看哈!本文除CSDN博客外,任何媒体和出版物禁止转载和使 ...
最新文章
- 查看sqlserver版本
- 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
- 吴恩达深度学习 —— 3.10 直观理解反向传播
- [转载]linux 出现: Starting MySQL.Manager of pid-file quit without updating file.[FAILED] 已解决...
- kafka计算机专业读法_面试官:Kafka 为什么快?
- 个性化推荐认知之----数字化转型浪潮下,产品经理应如何重新认知个性化推荐?...
- 北斗三号频点_海格通信发布国内首批北斗三号双模应用专用芯片及系统解决方案,对外展示“北斗+5G”的关键成果转化...
- ORA-01033 ORACLE 正在初始化或关闭
- 微信小程序开发入门篇
- 谈谈R中的乱码(三)
- Atitit 突发事件应急处置相关制度和措施 1. 第一章 总则	1 2. 第二章 突发事件分类	2 2.1. (一)治理类	2 2.2. (二)运营类	2 2.3. (三)环境类	3 2.4.
- 数据集_FashionMNIST 数据集
- Win10右键新建中没有新建文件夹,电脑右键新建文件夹不见了
- 修改tomcat服务器图标,如何修改tomcat项目的图标(两种)
- 网页版微信协议登陆,没什么用...
- Verilog语言、语法
- TED演讲双语演讲稿:为什么我们很难做出理性的决定?
- php 百分比转换小数点,php 百分数如何转小数
- 堆和栈的区别(内存和数据结构)
- 使用w3c解析xml文档