ServletServlet学习之基础篇

Posted 写Bug的渣渣高

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ServletServlet学习之基础篇相关的知识,希望对你有一定的参考价值。

前言:本文很多地方会以小白的角度来思考很多看似“简单”的问题。适用于对Servlet 有简单了解的人。本文是自己学习的过程,学习的体验,也是在本人的能力范围内,给大家尽量带来由浅入深的文章

Servlet是什么

其实如果给你推荐或者搜索了这个问题,那就默认你懂一点了 Servlet。
用途:
【在容器的帮助下】:使用servlet可以接收到用户发送的Http请求,在servlet通常称为 HttpServletRequest。Servlet接收到之后
【处理用户的请求】:接收到请求之后,可以根据用户的请求进行处理,
【返回数据】:比如说用户要余额,那么接收到该请求后,就把数据打包成一个HTTP报文,再通过容器返回,返回的数据称为响应 HttpServletResponse,单称为Response也行,知其意思便可。

上面即是功能,也是Servlet处理流程。

【更多基础知识】

  1. 使用HTTP进行传输:传输网页时,网页可以作为HTTP响应中体的一部分,文件也是类似。

访问网页流程解析:

当输入一个网址,会调用 get请求发送到服务器,服务器反应后找到页面代码,包装到响应体中,然后返回给用户。

容器

.容器有很多种,在学习的时候常用tomcat,他是管理Servlet的,负责他们的生、初始化、死,他们初始化之后,就可以返回,对应功能就可以接收响应了。 容器负责传递请求和响应,接收到之后,传给对应servlet,然后返回响应时也经过容器返回给用户

● 通信支持

  • 无需我们使用ServerSocket和Socket来建立客户端和服务端的联系,容器会自己处理,包括建立连接,监听端口,IO流,我们可以专注于业务处理

  • 生命周期管理,容器管理着 servlet的加载初始化和销毁,并且能够使得实例能够销毁

  • 多线程支持:一个客户端创建一个线程,运行完就销毁

基础且有大用

Servlet作为我们首先接触到的一个接口,还是算比较基础的技术,但是其作用是非常大的,需要认真学。
【出现的原因】:一个新技术必然是要弥补原有技术的不足而产生的。原先静态的页面,是无法和服务器交互的,每个人看见的页面都是不变的,其页面都只是从服务器传来的文件,不像你现在,== 你可以在看我的文章的同时,给我点赞,粉我,收藏该文章 ==,收藏之后,你能经常看见我写的、推荐的文章,这就是“针对于你的”页面。

【更多用处】:通过请求,可以返回一个html页面,可以返回一个图片(然后浏览器加载),可以返回一个文章, pdf,返回各种文件。这其实就和我们的网页大差不差了,思考一下自己平常使用的都是什么功能,也无非是登录,然后显示页面,当你点击的时候,显示另一个页面,获取文件,查看图片。

Servlet基础使用探究

  1. 编写一个类,继承Servlet,重写doGet和do post。
  2. 在web.xml文件中注册该Servlet,需要注册servlet的名字和其类,然后再绑定这个servlet和它的url
<servlet>
	<servlet-name>Servlet1</servlet-name>
	<servlet-class>com.example.ServletDemo</servlet-class>
<servlet>
	
<servlet-mapping>
	<servlet-name>Servlet1</servlet-name>
	<url-pattern>/servelt</url-pattern>
</servlet-mapping>

注:当用户要请求某个servlet,并不需要知道它的类名,只需要知道在xml文件中,对其配置的映射即可。所以说上面不仅定义了Servlet,还定义了其映射mapping

为什么使用xml这种部署描述文件来提供一种声明的机制来定制web应用

  • 动态灵活性高:假如不采用这种xml,我们就需要在加载的方法中,去思考该调用哪个功能的代码,这里使用xml,在加载的时候,解析xml文件后再加载具体的java代码
  • 方便维护:集中了所有的声明,当你要进行网址映射的修改,打开这个xml文件即可

什么?你还没觉得xml很好用

好不好用是在使用的时候,才能体会到的,当提及“方便”,“灵活性高”,你可能觉得会空。
下面提前讲两个知识点:
全局参数::很清楚,就是设置给所有的servlet的,假如说,你在开发一个广告后台,你最重要的一个信息是什么??那肯定是你的咨询电话,假如你有1个页面,或者是100个页面,这个电话都不应该不一样,应该是全局的,并且是容易修改的,全局参数就提供了你这样的帮助,

Servlet初始化参数::不同的Servlet有不同的需求,还是上面的例子,假如你的广告里面,有个功能是,相关企业,你也需要提供他们的电话号码,哎呀,只有这个功能(servlet)需要他们的电话电话号码,怎么办?

  1. 选择在Servlet内部使用一个map,修改,维护麻烦

1.创建Servlet
2.声明一个map,显式声明电话号码和公司名
3.如果要修改,就需要找到这个Servlet,然后修改

  1. 【方便维护】在声明Servlet的同时,使用初始化参数
<servlet>
	<servlet-name>Servlet1</servlet-name>
	<servlet-class>com.example.ServletDemo</servlet-class>
	<init-param>
		<param-name>phone</param-name>
		<param-value>110</param>
	</init-param>
</servlet>

【相关知识后面文章会讲】

Servlet的

生命周期

servlet和容器处理请求流程

  1. 用户点击一个连接,链接的URL指向一个servlet
  2. 容器接收到,这个请求创建两个对象:HttpServletResponse、HttpServletRequest
  3. 容器根据请求找到对应的servlet,然后创建线程,调用servlet的service方法
  4. service方法根据用户发出的Http请求来判断调用方法
  5. servlet使用响应对象写响应,然后通过容器传回
  6. service方法结束,线程要么撤销,要么返回到容器管理的一个线程池

除了doGet、doPost有没有其他方法

有的,在HttpServlet里面,还有doOptions,doHead,等等,但是不常用

Servlet生命周期和API

  1. 容器加载类,会调用servlet的无参构造函数,并且调用servlet的init方法,从而初始servlet
  2. init方法,在servlet一生中只调用一次,往往servlet为客户请求提供服务之前调用
  3. init方法可以使得servlet访问ServletConfig和ServletContext对象,servlet需要这些对象得到有关servlet配置和web应用的信息
  4. 容器通过调用servlet的destory方法来结束servlet的生命周期
  5. servlet的绝大多数时间都在为客户的请求运行service方法
  6. servlet要真正初始化完成,需要servletConfig 和servletContext

本篇文章讲到了啥

  1. 主要讲解了Servlet大致运行流程,运行原理
  2. 简单介绍了使用Servlet

下面的文章还会介绍什么

目前,讲解的是基础的Servlet使用,如果你能创建一个 Servlet,那么你其实就已经能写一个最简单的网页了,==你的web之路始于脚下。 ==
【后续正在创作中】:
Servlet请求和响应详细解析
Servlet学习之HTTP篇
重定向与转发篇
监听者篇
会话篇

以上是关于ServletServlet学习之基础篇的主要内容,如果未能解决你的问题,请参考以下文章

ServletServlet学习之基础篇

ServletServlet学习之基础篇(HTTP)

ServletServlet学习之基础篇(HTTP)

ServletServlet学习之基础篇(HTTP)

python学习之基础篇

python 学习之 基础篇三 流程控制