深入理解Java Web——Servlet
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知识点讲解(一)
一.Web应用架构 如图所示: HTTP协议:一个简单的请求一响应协议,通常运行在TCP之上,它指定了客户端可能发送给服务器什么样的信息以及得到什么样的响应. JDBC:Java语言中用来规范客户端程 ...
- Java Web -- Servlet(1) 必备知识
学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思.在网页设计中我们称为网页的意思. 现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体 ...
- 理解java Web项目中的路径问题
本文以项目部署在tomcat服务器为例,其他相信也是一样的. 先说明请求页面的写法,在web中,页面路径主要写的有以下几种 1.请求重定向 2.浏览器的请求被服务器请求到新页面(我称为“转发”) 3. ...
- Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)
三.Servlet的生命周期 一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet怎样被加载并被初始化,怎样接收请求并作出对请求的响应,怎样被从服务中清除.Servlet ...
- java web servlet
一.什么是Servlet Servlet是一种小型的Java程序,它扩展了Web服务器的功能.作为一种服务器端的应用,他是运行在Servlet容器当中,例如Tomcat就是一种流行的Servlet容器 ...
- 天坑 之 java web servlet+jsp项目 配置后 404 (MyEclipse转eclipse)
最近搞一个自己的博客系统玩,用了servlet+jsp,结果发现了两个大问题: 1.无法 Export 出 WAR文件: 2.生成WAR,放置到TOMCAT的 webapps目录后,http://lo ...
- java web Servlet开发(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
- java web Servlet开发(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- [Java.Web] Servlet 的一些细节
本文来自 传智播客视频PPT 1. 由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工 ...
随机推荐
- Struts2知识点小结(四)--拦截器与注解开发
一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...
- Form表单之复选框checkbox操作
input复选(checkbox): <label>input复选1组:</label> <input type="checkbox" name=&q ...
- 为什么我用了$().height()还是对不齐呢?
有一个这样的需求:有两个显示内容的框,要使他们高度一致,因为他们存放的内容多少和结构不一样,左边内容少,右边内容多.这就导致了右边会比左边高,解决方法就是超出部分用滚轮显示,那这时就先要调整右边的高度 ...
- ethereum(以太坊)(基础)--容易忽略的坑(三)
pragma solidity ^0.4.10; contract Byte{ bytes [] public T=new bytes[](3); function setLeng(uint len) ...
- SHOPEX快递单号查询插件圆通V8.2专版
SHOPEX快递物流单号查询插件特色 本SHOPEX快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅急送快递.德邦物流.百世 ...
- 查看ubuntu版本号命令
1.uname -a 查看内核版本号 2.cat /etc/issue 查看ubuntu版本号 3.sudo lsb_release -a 查看ubuntu版本号
- PHP环境搭建-记录
转于 http://jingyan.baidu.com/article/fcb5aff797ec41edaa4a71c4.html php5.5 做了大量的更新,在与apache搭配的时候如何选择也很 ...
- (数据科学学习手札09)系统聚类算法Python与R的比较
上一篇笔者以自己编写代码的方式实现了重心法下的系统聚类(又称层次聚类)算法,通过与Scipy和R中各自自带的系统聚类方法进行比较,显然这些权威的快捷方法更为高效,那么本篇就系统地介绍一下Python与 ...
- [POJ 1004] Financial Management C++解题
参考:https://www.cnblogs.com/BTMaster/p/3525008.html #include <iostream> #include <cstdio> ...
- C#获取网络图片
简单获取图片 string url = zhi_txt.Text;//图片地址 string dizhi = lujing.Text;//图片下载后保存路径及图片名称要写在一块 WebClient w ...