Servlet:第一篇【Servlet基本介绍】

1.servlet的基本概念

servlet是运行在服务端上的一个java类,使用serlvet技术可以和网页的前端和后台进行数据交互。


2.HTTP协议介绍

什么是HTTP协议

HTTP协议,超文本传输协议,是互联网上应用广泛的一种网络传输协议。所有的www文件都必须遵守这个协议。他是TCP/IP协议的一个应用层协议。
原理:
在我们点击某个链接的时候,浏览器会帮我们向服务器发送一段文本,这段文本包含了请求的链接。服务器收到请求后,就返回给一段文本给浏览器,浏览器将其解析后显示出来。文本的格式遵循HTTP的规范。

HTTP请求

浏览器向服务器请求web资源的时候,浏览器向服务器发送了一个http请求,其包含的内容有:

请求行

请求行,包含的内容有:客户端的请求方式,请求的资源,以及使用的http协议版本号;
请求行:GET/java.html HTTP/1.1
请求的方式有:POST(常用),GET(常用),HEAD,OPTIONS,DELETE,TRACE,PUT。
get,post的区别:

image.png

请求头

多个消息头,描述客户端请求哪台主机,以及客户端的一些环境信息等。

  • Accept: text/html,image/* 【浏览器告诉服务器,它支持的数据类型】
  • Accept-Charset: ISO-8859-1 【浏览器告诉服务器,它支持哪种字符集】
  • Accept-Encoding: gzip,compress 【浏览器告诉服务器,它支持的压缩格式】
  • Accept-Language: en-us,zh-cn 【浏览器告诉服务器,它的语言环境】
  • Host: www.it315.org:80【浏览器告诉服务器,它的想访问哪台主机】
  • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,缓存数据的时间】
  • Referer: http://www.it315.org/index.jsp【浏览器告诉服务器,客户机是从那个页面来的---反盗链
  • 8.User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【浏览器告诉服务器,浏览器的内核是什么】
  • Cookie【浏览器告诉服务器,带来的Cookie是什么】
  • Connection: close/Keep-Alive 【浏览器告诉服务器,请求完后是断开链接还是保持链接】
  • Date: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,请求的时间】

一个空行


HTTP响应

HTTP响应是服务器向浏览器响应的结果,一个HTTP响应包含:

状态行

描述服务器对请求的处理结果
格式: HTTP版本号+状态码+原因
例如: HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三位十进制数。分类如下


image.png

多个消息头

用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息可以通知客户端如果处理这些回送的web资源

  • Location: http://www.it315.org/index.jsp 【服务器告诉浏览器要跳转到哪个页面
  • Server:apache tomcat【服务器告诉浏览器,服务器的型号是什么】-
  • Content-Encoding: gzip 【服务器告诉浏览器数据压缩的格式
  • Content-Length: 80 【服务器告诉浏览器回送数据的长度】
  • Content-Language: zh-cn 【服务器告诉浏览器,服务器的语言环境】
  • Content-Type: text/html; charset=GB2312 【服务器告诉浏览器,回送数据的类型
  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器该资源上次更新时间】
  • Refresh: 1;url=http://www.it315.org【服务器告诉浏览器要**定时刷新**】
  • Content-Disposition: attachment; filename=aaa.zip【服务器告诉浏览器以下载方式打开数据
  • Transfer-Encoding: chunked 【服务器告诉浏览器数据以分块方式回送】
  • Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服务器告诉浏览器要保存Cookie
  • Expires: -1【服务器告诉浏览器不要设置缓存
  • Cache-Control: no-cache 【服务器告诉浏览器不要设置缓存
  • Pragma: no-cache 【服务器告诉浏览器不要设置缓存
  • Connection: close/Keep-Alive 【服务器告诉浏览器连接方式】* Date: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器回送数据的时间】

一个空行

实体内容

服务器向客户端返回的数据


3.JavaWeb目录结构

image.png

说明:
1.bbs表示一个web应用;
2.bbs目录下的html,jsp文件可以直接被浏览器访问;
3.WEB-INFO下的资源服务器可以方位;
4.web.xml文件是web程序的配置文件
5.classes放classes文件
6.jar包放在lib目录下


4.编写serlvet程序的步骤:

1.创建一个servlet类基础HttpServlet类;
2.重写doGet或者doPost方法;
3.在web.xml中配置serlvet


image.png

image.png
image.png

5.servlet的生命周期

1.加载servlet。当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例,这个时候首先调用的构造方法;
2.初始化。当Servlet被实例化后,Tomcat调用init()方法初始化对象;
3.处理服务。当浏览器访问Servlet的时候,Servlet会调用service()方法处理请求;
4.销毁。关闭Tomcat或检测到Servlet要从Tomcat删除的时候回自动调用destroy();释放资源;
5.卸载。垃圾回收


6.serlvet的细节

一个Serlvet可以被多次映射

image.png

image.png

servlet映射的URL可以用通配符

两种格式:

  1. “ *.扩展名 ”
  2. “ / * ”;
    3.同时出现的话看谁的匹配度更高,*.扩展名优先级最低。
    匹配所有:


    image.png

匹配扩展名为.jsp的


image.png

servlet是单例的

为什么是单例的

浏览器多次对servlet的请求,一般情况下,服务器只创建一个Servlet对象,也就是说,Servlet对象一旦创建了,就会在内存中,为后续的请求做服务,直到服务器关闭。

每次访问请求对象和相应对象都是新的

对于每次请求,Servlet容器都会创建一个新的httpServletRequest请求对象和httpServletResponse响应对象。然后servlet的service方法调用这两个参数,根据请求的方式调用doGet还是doPost

线程安全问题

多个用户并发访问Servlet共享资源的时候会出现线程安全问题。
解决方法:
1.如果一个变量被多位用户共享,则在访问该变量的时候,加同步机制synchronize(对象) {};
2.不需要共享的时候,则直接在doGet,doPost中定义,这样不会存在线程安全问题。

load-on-startup

在<servlet>元素中配置一个<load-on-startup>元素的话,那么在web应用程序启动的时候,就会装载并创建servlet对象,以及调用init方法。
作用:
1.为整个web应用创建必要的数据表和数据;
2.完成一些定时的任务;如写日志,备份数据等

ServletConfig对象

作用:
读取web.xml中配置的初始化信息。在web.xml中配置可以使程序更加灵活。
实例:


image.png
image.png

ServletContext对象

什么是ServletContext对象

当我们启动Tomcat的时候,就会创建一个ServletContext对象。它代表着web站点。

作用

1.所有Servlet都共享着一个ServletContext对象,所有Servlet之间通过ServletContext实现通讯。
2.ServletConfig获取的是单个Servlet的参数信息,而ServletContext可以获取的是配置整个web程序的参数信息。
3.获取web站点的资源
4.实现Serlvet的转发

利用ServletContext获取web站点配置的信息

image.png

DOM
image.png


image.png

读取资源文件

第一种方式:

通过读取servlet编译后的中WEB-INF\classes文件夹中的资源


image.png
FileInputStream fileInputStream = new FileInputStream("D:\\zhongfucheng\\web\\WEB-INF\\classes\\zhongfucheng\\web\\1.png");
System.out.println(fileInputStream);

但是这种方式的话每次读取文件都要写上绝对路径,太不灵活。优化如下:

//获取到ServletContext对象 
ServletContext servletContext = this.getServletContext(); 
//调用ServletContext方法获取到读取文件的流 
InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/classes/zhongfucheng/web/1.png");
image.png

第二种方式

把文件放在web目录下,直接通过文件名访问


image.png
//获取到ServletContext对象 
ServletContext servletContext = this.getServletContext(); 
//调用ServletContext方法获取到读取文件的流 
InputStream inputStream = servletContext.getResourceAsStream("2.png");
image.png

第三种方式

通过类加载器读取资源文件


image.png
//获取到类装载器 
ClassLoader classLoader = Servlet111.class.getClassLoader(); 
//通过类装载器获取到读取文件流 
InputStream inputStream = classLoader.getResourceAsStream("3.png");

转载:
作者:java3y
链接:https://www.imooc.com/article/24335
来源:慕课网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容