Servlet/JSP(一)

来源:互联网 发布:空闲电脑 云计算 赚钱 编辑:程序博客网 时间:2024/06/03 16:16

通过该系列我们学习Servlet/JSP 相关的知识

说明

我们在学习Java时,都知道 JVM ,JVM 是Java程序唯一的操作系统,可以执行.class文件,所以我们在写Java程序时,就必须了解 Java 程序是如何与 JVM 进行通信,以及JVM 是如何管理 Java 程序中的对象等问题
在学习Servlet/JSP 时,也是一个 Web容器是Servlet/JSP 唯一认识的HTTP服务器,我们要写Servlet/JSP 就必须要知道 Servlet/JSP 是如何与 Web 容器进行沟通,以及Web容易是如何管理Servlet/JSP 的各种对象等问题

Web容器

我们在Java中了解过容器,List、Set 等这类的 Collection,用来持有、保存对象的集合对象,对于Servelt/JSP 来说,容器的概念更广,不仅仅是持有对象,还负责对象的生命周期和相关服务的连接
容器其实就是一个用Java程序写的程序,运行在JVM 之上,不同类型的容器负责不同的工作,我们在写Servlet/JSP 的时候会接触 HttpServletRequest,HttpServletRespose等一些对象,HTTP 有关文字性的通信协议是如何变成Servlet/JSP中可用的Java对象,其实就是容器帮我们进行解析和转换
可以将Web容器看成是运行Servlet/JSP的HTTP服务器,就如同Java程序仅认识JVM一样,Servlet/JSP也仅认识Web容器这个概念上的HTTP服务器,所以我们只要写的Servlet/JSP符合Web容器的标准规范,就可以在不同厂商实现的 Web容器上运行,而不用理会底层真正的HTTP服务器,容器的位置如下

这里写图片描述

Web容器介于实体HTTP服务器和Servlet 之间,所以我们应该知道Web容器是如何与Servlet/JSP进行互动,管理Servlet事物
一个请求响应的流程如下
* 客户端/浏览器对Web服务器发起HTTP请求
* HTTP 服务器收到HTTP请求,将请求转交给 Web容器处理,Web容器解析HTTP请求内容,创建各种对象(HttpServletRequest,HttpServletResponse等)
* Web容器由请求的URL决定使用哪个Servlet来处理请求,由开发人员定义
* Servlet根据请求对象的信息决定如何处理,通过响应对象 HttpServletResponse来创建响应
* Web容器与HTTP服务器沟通,Web服务器将响应转换为HTTP响应并传回客户端

如何我们不了解Web容器是如何管理Servlet/JSP容易产生问题,Servlet是在执行Web容器之中,Web容器是服务器上的JVM 启动,JVM 是服务器上的一个可执行程序,档一个请求来到之后,Web容器会为每个请求分配一个线程 Thread,如果有多个请求进来,就会启动多个线程来进行处理,而不是重复启动该多次JVM,可以大幅减轻服务器性能
Web容器可能会使用同一个Servlet实例来服务多个请求,也就是说,多个请求之下,就相当于多个线程在共享一个对象,因此要注意线程的安全,避免数据错乱,如A用户登录之后看到了B用户的数据
容器是个解决方案面对的平台,如何不理解容器的行为,就会容易引发程序面对的各种问题

Servlet和JSP 的关系

Servlet能干的事情 JSP 也可以做,反之亦然,本质上来说,JSP 也就是一个 Servlet,分开主要是为了方便网页编辑,设计画面,Servlet主要从事Java程序的逻辑定义,避免直接在 Servlet中产生HTML 输出,而JSP 主要进行页面设计,JSP网页最后还是成为Servlet,我们编译之后可以看到,JSP 编译之后基础的是HttpJspBase,而这个类是继承 HttpServlet,而我们的Servlet也是继承 HttpServlet
一些初学者在 JSP 中遇到许多编译,执行的问题,通常是不了解JSP 转译成Servlet之后,对应到哪个程序段,还有人不知道 JSP 与Servlet其实本质就是一个东西的事实,了解JSP 与 Servlet 的对应关系,必要时候查看 JSP 编译为Servlet 后的源代码,都是我们解决JSP 网页执行遇到错我时解决问题的重要方法

0 0
原创粉丝点击