深入理解Java Web——Servlet
来源:互联网 发布:做电子板报的软件 编辑:程序博客网 时间:2024/06/03 22:53
1、概述
狭义上看,是java的一个接口。
广义上看,任何直接或间接实现了Servlet接口的类。
2、核心对象
下面就是Servlet接口的内容:
public abstract interface javax.servlet.Servlet { //初始化 public abstract void init(javax.servlet.ServletConfig arg0) throws javax.servlet.ServletException; //部署时的配置信息,对应的是每个Servlet。 public abstract javax.servlet.ServletConfig getServletConfig(); //核心service方法,负责跳转到post或get方法中执行。 public abstract void service(javax.servlet.ServletRequest arg0, javax.servlet.ServletResponse arg1) throws javax.servlet.ServletException, java.io.IOException; public abstract java.lang.String getServletInfo();//销毁 public abstract void destroy();}
Servlet的两个抽象类:
其中:
GenericServlet 抽象类实现了大部分的Servlet方法。
HttpServlet实现了一个service方法来反应servlet的http特性。
3、生命周期
servlet没有main方法,他们受控于一个java应用——容器。Servlet必须运行在web服务器中,web服务器也可以叫做web容器(比如tomcat)。二者是分工和互补的关系。web容器管理Servlet的生命周期,脱离web容器的Servlet便不能工作。
servlet的生命周期大致分为五部分:装载、实例化、init()、service()、destroy()。
首先,容器负责加载Servlet类,之后通过构造函数实例化servlet对象。在得到客户端servlet请求之前完成init()操作,之后是执行请求的service的方法。之后如果不再使用时,执行destroy方法。
得到servlet请求之后,tomcat并不把这个请求交给servlet本身,而是交给部署该servlet的容器。
此外,web容器还有其他的作用。比如:通信,支持多线程和jsp等等。
4、单实例,多线程。
一个web容器可以管理或存放多个servlet,比如:用户管理的servlet,商品管理的servlet等。
但对于提交到同一个servlet类的多个业务请求,共享一个servlet对象。比如:一个查询用户信息的请求和一个删除用户的请求共享同一个servlet对象。这就是所说的servlet单实例。
servlet体系结构是建立在java多线程机制之上的, servlet容器会自动使用线程池等技术来支持系统的运行。
思考:Servlet是线程安全的吗?
如果一句话回答安全或者不安全,这未免有些太过于笼统。
Servlet有三个作用域:上下文(Context)、会话(Session)和请求(request)。其中,前两个都是线程不安全的,只有在请求request中是线程安全的。
比较三个作用域:
小结:
如果我们只是在请求的范围内,则不需要考虑线程安全的问题。除此之外,都会涉及到“共享变量”的问题,就要考虑如何实现线程安全了。其中最常用的方法是使用synchronized关键字,但要注意锁定的范围。如果在doPost()或doGet()方法上加synchronized,范围过大。servlet就变成了实实在在的单线程了,根本没办法处理并发,这样做虽然安全,但性能太差,也违背了servlet设计者的初衷,是绝对不可取的。加锁范围的思路是,如果此范围中你所操作的对象有可能被其他人访问到,那就加锁。
- 深入理解Java Web——Servlet
- java 步步惊心 (web ) 深入理解servlet
- 深入理解Java Servlet与Web容器之间的关系
- 深入理解Java Servlet与Web容器之间的关系
- 深入理解Java Servlet与Web容器之间的关系
- 深入理解Java Servlet与Web容器之间的关系
- 深入理解Java Servlet与Web容器之间的关系
- 深入理解Java Servlet与Web容器之间的关系
- 深入理解Java Servlet与Web容器之间的关系
- Java Web servlet理解
- Java Web基础知识之Servlet(2):深入Servlet——HttpServlet
- Java Web基础知识之Servlet(2):深入Servlet——HttpServlet
- 深入理解Servlet机制——Servlet单线程模式
- java笔记——第一个servlet重点理解web应用和servlet
- 【Java Web】——Servlet
- 《深入分析Java Web技术内幕》—第9章Servlet 工作原理解析
- Servlet深入学习,规范,理解和实现(中)——深入理解Tomcat(一)
- 深入理解Servlet
- [环境搭建] VS-Visual Studio-IIS Express 支持局域网访问
- 去掉GridView中点击Item的按下效果
- WPF MessageBox
- java异常的捕获与抛出原则
- swift基础之自动引用计数
- 深入理解Java Web——Servlet
- dede调用外部数据库信息
- 如何编写一个自己的校验框架
- 像素翻转
- Android 5.0+ 解析(五)FloatingActionButton控件
- python学习01
- android api 中setVisibility( )的用法(可显示或隐藏布局或控件...)
- Android 自定义控件---SpreadView
- 字符串学习3