博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java学习——Servlet是什么
阅读量:4261 次
发布时间:2019-05-26

本文共 1444 字,大约阅读时间需要 4 分钟。

      我们在学习了J2EE的十三个规范之后,只是对他们有了一个简单的认识,而接下来需要我们做的就是一个个研究,进行深入学习。在十三个规范中,比较常用的有JSP,Servlet,EJB,JNDI等,那么今天我们就来介绍一下Servlet。

1、概念

      一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来动态扩展Web服务器的应用程序。Java Servlet技术为这些应用程序定义了一个特定于HTTP的 servlet类。

2、原理

这里写图片描述

      当客户端浏览器向服务器请求一个 Servlet 时,服务器收到该请求后,首先到容器中检索与请求匹配的 Servlet 实例是否已经存在。

      若不存在,则 Servlet 容器负责加载并实例化出该类 Servlet的一个实例对象,接着容器框架负责调用该实例的 init() 方法来对实例做一些初始化工作,然后Servlet 容器运行该实例的 service() 方法。

      若 Servlet 实例已经存在,则容器框架直接调用该实例的 service() 方法。

      service() 方法在运行时,自动派遣运行与用户请求相对应的 doXX() 方法来响应用户发起的请求。

      通常,每个 Servlet 类在容器中只存在一个实例,每当请求到来时,则分配一条线程来处理该请求。

3、作用

      当使用交互式 Web 站点时,您所看到的所有内容都是在浏览器中显示的。在这些场景背后,有一个 Web 服务器接收会话 中来自于您的请求,可能要切换到其他代码(可能位于其他服务器上)来处理该请求和访问数据,并生成在浏览器中显示的结果。

      servlet 就是用于该过程的网守(gatekeeper)。它驻留在 Web 服务器上,处理新来的请求和输出的响应。它与表示无关,实际上也不它应该与表示有关。

      您可以使用 servlet 编写一个流,将内容添加到 Web 页面中,但那通常也不是一个好办法,因为它有鼓励表示与业务逻辑的混合的倾向。

实现过程:

      1. 获取用户的请求,取得用户输入的显示参数,获取浏览器生成的隐式参数—– 获取请求

      2. 调用模型层业务类的具体业务方法,将参数传递给业务方法,与数据库进行交互。获取业务方法返回的模型数据。

      3. 根据模型层返回的模型数据,进行流程控制(转发、重定向)。

4、优缺点

(1)优点

      可移植性好:Servlet是用Java语言编写的,具有完善的Servlet API标准,企业编写的Servlet程序,可以轻松地移植到其他服务器中。

      执行效率高:Servlet请求到来的时候激活Servlet,请求处理完,等待新的请求,新的请求将生成一个线程而不是进程。

      使用方便:Servlet可以轻松地处理HTML表单数据,并读取和设置HTTP头,处理Cookie,跟踪会话。

(2)缺点:

   web.xml配置量太多,不利于团队开发;

   servlet具有容器依赖性,不利于单元测试;

   servlet处理的请求很局限

5、总结

    在此,我们认识到了Servlet的运行机制,知道了它相当于一个控制器,这让我们想起来什么呢,那就是在MVC中的Controller,对,它们的功能非常相似,说白了,Servlet就是一个控制器,这样,我们理解起来就简单了。所以我们要将新知识与旧知识联系起来,这样才能构建自己的知识网。

你可能感兴趣的文章
Android实现屏幕旋转
查看>>
Android学习之路
查看>>
Aspectj简单使用(一)
查看>>
视频 api 收集
查看>>
内存泄露:AccessibilityManager
查看>>
EditText 限制输入为中文,个数为6个
查看>>
破解的一款抓包工具,debug proxy,教你怎么修改so
查看>>
iPhone5C ios10.3.3修改 Myuppy蒙娜雅痞字体 ios11的方式
查看>>
bug记录:TextView java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0
查看>>
吐槽Kotlin
查看>>
案例: springboot 同时集成hive和mysql
查看>>
解决 Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
查看>>
解决ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
查看>>
解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
查看>>
案例: centos7 安装redis集群 版本5.0.7
查看>>
案例: centos7 离线安装nginx 版本1.17.9
查看>>
开发必备小知识
查看>>
maven 项目(一) 多项目多层级搭建配置及其优点
查看>>
maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第二部分)
查看>>
来段代码提提神-Java读取config.properties文件中的key=value
查看>>