JAVA学习 分析Servlet
一个、什么是Servlet
Servlet是一种在server端执行的java编写的程序,是依照Servlet规范编写的一个java类。
二、Servlet的工作过程
如图所看到的:为了实现客户与server端的动态交互,须要一个遵循HTTP协议的server端应用软件,来处理客户的各种请求,并将结果发送给client。
三、Servlet的生命周期
Servlet的生命周期是由Servlet的容器(比如:tomcat)来控制的;生命后期分为载入类及创建实例。初始化;服务;销毁
1、载入类及创建实例
在默认情况下,Servlet实例是在第一个请求到来的时候创建,即输入url的时候创建。以后复用。可是也能够通过配置文件进行设置參数:<load-on-startup>值</load-on-startup>;当中值默觉得负数。当设置为大于等于0的数值时,则在tomcat启动的时候载入创建实例。
2、初始化
一旦Servlet实例被创建,webserver会自己主动调用init(ServletConfig config)方法来初始化该Servlet,当中方法參数config中包括了Servlet的配置信息。以下说一下该怎样配置Servlet的初始化參数:
在web.xml中该Servlet的定义标记中,比方:
<servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>com.tgb.Test.TestServlet</servlet-class> <init-param> <param-name>encoding</param-name> <param-value>GB18030</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/servlet/TestServlet</url-pattern> </servlet-mapping>
<servlet-name>:sevlet对象的名称。
<servlet-class>:创建servlet对象须要载入的类
<init-param>:初始化
<param-name>:參数名称
<param-value>:參数值
<load-on-startup>:创建servlet对象的时机以及顺序
<servlet-mapping><servlet-name>要与
<servlet><servlet-name>名称一致。
<url-pattern>:client訪问url地址。
3、服务
初始化成功后,该Servlet实例就能够被server用来服务client提出的请求并响应,在服务阶段server会调用该实例的Service(ServletRequest request, ServletResponse response)方法,两个參数由server创建并传给Servlet实例。当中request对象封装了client发往server端的信息。response对象则封装了server发往client的信息。
4、销毁
当web应用被终止时。Servlet容器会先调用Servlet对象的destrory()方法,然后再销毁Servlet对象,同一时候也会销毁与Servlet对象相关联的ServletConfig对象。我们能够在destroy方法的实现中释放Servlet所占用的资源。
须要注意的是,Servlet的生命周期中,Servlet的初始化和销毁阶段值会发生一次,而Service方法运行的次数则取决于client訪问的次数。
四、Servlet的线程安全问题
Servlet是单实例多线程的。假设存在能够改动的成员变量将会出现线程安全问题。
使用Servlet最好保证Servlet是无状态的,也就是没有能够改动的成员变量。
总结:如今的感觉是,Servlet用起来非常easy。可是让我非常清楚的描写叙述什么是Servlet,和Servlet的原理还有些困难,这篇博客说明了Servlet一些简单的原理,希望会对以后使用Servlet有非常好额帮助。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
相关文章
- Java实现 LeetCode 82 删除排序链表中的重复元素 II(二)
- java实现取球博弈
- Java实现 蓝桥杯VIP 基础练习 2n皇后问题
- (Java实现) 洛谷 P1031 均分纸牌
- 对象存储在什么地方(java编程思想)
- java 15:用jstack查看线程信息
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
- Java核心知识点学习----线程同步工具类,CyclicBarrier学习
- [Java Sprint] Spring XML Configuration : Constructor Injection Demo
- Java Spring源代码学习之DispatcherServlet.getHandler
- Java学习之路 之 类篇
- Java异常处理
- Java学习路线-9:多例设计与枚举类
- Java学习路线-56:Spring与Ioc
- Java学习路线-53:EL(表达式语言)入门及 EL 函数库
- Java学习路线-49:Servlet过滤器Filter
- JavaSE学习总结(十九)—— Java Web 综合应用(JSP、Servlet、IDEA、MySQL、JUnit、AJAX、JSON)
- Java线程学习笔记(两) 线程异常处理
- Java开发技术之成为高级java工程师必须学习的三个技术
- Java学习笔记(九)——继承
- java===java基础学习(12)---方法的重写和重载
- java===java基础学习(1)---数据类型,运算,变量,常量
- Java爬爬学习之WebMagic
- Java Servlet Filter的两种映射方式
- Java中的六种经典比较排序算法:代码实现全解析