1.中间件、容器、Web服务器

1.1中间件

中间件是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处于操作系统和更高一级应用程序之间。

J2EE提出的背景:

1)企业级应用框架的需求:在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,这些模块每次再开发如果都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务,这些服务型的软件系列被称为中间件。

2)通用的规范:因为这些中间件与用户的沟通都各有不同,从而导致用户无法将其组装在一起为自己服务,于是提出标准的概念,J2EE就是基于JAVA技术的一系列标准。

中间件的功能:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力。

商用中间件主要阵营:微软阵营、Java阵营、开源阵营。

常见的中间件:Apache-Tomcat、IBM-WebSphere、BEA-WebLogic、Kingdee-Apusic

1.2 容器

容器就是中间件的一种,充当中间件的角色。

容器的分类:

1)Web容器

给处于其中的应用程序组件(JSP,Servlet)提供一个环境(Jsp容器和Servlet),是组件(JSP,Servlet)直接跟容器中的环境变量接口交互。容器提供的接口严格遵守J2EE规范中的WEB APPLICATION标准,我们把以上标准的WEB服务器就叫做J2EE的WEB容器。

2)EJB容器

Enterprise java bean 容器。它提供给运行在其中的组件EHB各种管理功能。只要满足J2EE规范的EJB放入容器,马上就会被容器进行高效管理,并通过线程的接口获得系统级别的服务,如邮件服务、事务管理等。

3)Web容器与EJB容器的区别

WEB容器和EJB容器在原理上大体相同,它们都是把外界的交互从而减轻应用程序的负担。

主要区别是被隔离的外界环境。WEB容器主要与基于HTTP请求交互,EJB容器主要是跟数据库、其他服务交互。如Servlet不同关心HTTP的细节,直接引用环境变量session,request,response;EJB不用关心数据库连接速度、各种事务控制,直接由EJB容器完成。

1.3 WEB服务器(程序/软件)

提供Web信息浏览服务,向客户浏览器提供服务的程序

1)目前常见web服务器:

  大型:Microsoft IIS、IBM WebSphere、BEA WebLogic、Apache、Tomcat

  小型:nginx、 micro_httpd、mini_httpd、thttpd、 lighttpd、Shttpd

2)支持J2EE的应用服务器:

  WEBSPHERE、WEBLOGIC、JBOSS、ORACLE APPLICATION SERVER、SUN ONE APPLICATION SERVER 等。

2.ServletContext功能作用

2.1 ServletContext

1)是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放,所有用户共用一个servletContext。

2)一个ServletContext对象表示了一个Web应用程序的上下文,是Web服务器中的一个已知路径的根,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

2.2 Servlet上下文

1) 提供对应用程序中所有Servlet所共有的各种资源和功能的访问。Servlet上下文API用于设置应用程序中所有Servlet共有的信息。Servlet可能需要共享他们之间的共有信息。运行于同一服务器的Servlet有时会共享资源,如JSP页面、文件和其他Servlet。

如,做一个购物类的网站,要从数据库中提取物品信息,如果用session保存这些物品信息,每个用户都访问一便数据库,效率就太低了;所以要用来Servlet上下文来保存,在服务器开始时,就访问数据库,将物品信息存入Servlet上下文中,这样,每个用户只用从上下文中读入物品信息就行了。

2) servlet可以通过名称将对象属性绑定到上下文。任何绑定到上下文的属性可以被同一个web应用的其他servlet使用。ServletContext接口的下列方法允许访问这种功能:

setAttribute

getAttribute

getAttributeNames

removeAttribute

上下文属性对于创建它们的VM来说是本地的。这防止ServletContext属性存储于分布式容器的共享内存中。当信息需要在运行于分布式环境中的servlet之间共享时,信息被放入会话中(参见第7章“会话”),存储于数据库中,或者存储于EJB组件中。

3)ServletContext接口

ServletContext接口定义了运行servlet的web应用的servlet视图。使用ServletContext对象,servlet可以记录事件日志,获取资源的URL地址,并且设置和保存上下文内可以访问的其他servlet的属性。

容器中部署的每一个web应用都有一个ServletContext接口的实例对象与之关联。如果容器被分布在多个虚拟机上,一个web应用将在每一个VM中有一个ServletContext实例。

4)初始化参数

ServletContext接口的初始化参数允许servlet访问与web应用相关的上下文初始化参数,这些由应用开发人员在部署描述符中指定:

getInitParameter

getInitParameterNames

应用开发人员利用初始化参数传送配置信息。典型的例子是web管理员的e-mail地址或者一个持有关键数据的系统名称。

3.HTTP会话

在HTTP连接间维护用户与统一用户发出的不同请求之间关联的情况称为维护一个会话(session)。

3.1 会话的特征

1)不同用户的会话应当是相互独立的

2)会话一旦建立就应当一直存在,直到用户空闲时间超过了某一个时间界限,容器才应当释放该会话资源

3)在会话的存活期间,用户可能给服务器发送了很多请求,该用户的这些请求信息都可以存储在会话中

3.2 建立过程

1)建立tcp连接
2)发出请求文档
3)发出响应文档
4)释放tcp连接

4.GET与POST请求方式的区别

4.1 GET方法

使用GET请求方式,查询字符串以键值对方式连接在URL后面被被一起传送至服务器。

GET方法特点:

1)GET请求能被缓存;

2)GET请求主要用于获取数据;

3)GET请求的长度有限制;

4)GET请求保存在浏览器的历史记录中;

5)GET请求的URL能保存为书签。

6)请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输

4.2 POST方法

视同POST请求方式,查询字符串在POST请求中单独存在,和HTTP请求一起发送至服务器。

POST方法特点:

1) POST请求不能被缓存下来

2)POST请求不会保存在浏览器浏览记录中

3)以POST请求的URL无法保存为浏览器书签

4)POST请求没有长度限制

4.3 GET与POST区别

  GET POST
点击刷新或返回按钮 没有影响 重新发送数据
添加书签 不能添加 可以添加
缓存 不存在缓存 存在缓存
历史记录 存在历史记录 不存在历史记录
URL长度限制 有长度限制 没有长度限制
编码类型 application/x-www-form-urlencoded

application/x-www-form-urlencoded or multipart/form-data

若传送二进制数据,则需要为其设定multipart编码

传送数据类型 只允许ASCII字符型 没有限制,可为二进制类型
安全性 不要用GET方式提交敏感数据 传输敏感数据请加密
查询字符串可见性 可见 不可见

5.Servlet转发与重定向

response.sendRedirect("a.jsp");——转发;request.getRequestDispatcher("a.jsp").forward(request,response)——重定向

区别:

1)转发在服务器端完成的;重定向是在客户端完成的

2)转发的是同一次请求;重定向是两次不同请求

3)转发不会执行转发后的代码;重定向会执行重定向之后的代码

4)转发浏览器地址栏没有变化;重定浏览器向地址栏有变化

5)转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

2016-09-06 J2EE基础知识之不知的更多相关文章

  1. J2EE 基础知识积累

    1. 面向对象的思维: 1. 有哪些类 那些对象      2. 这些类中,每种类应该具有某种属性和方法      3. 考虑类与类之间应该具有什么样的关系 3. 1. 成员变量可以使用java语言中 ...

  2. j2EE基础知识

    感觉应付面试足够了 一.基本概念 1.1 WEB开发的相关知识 WEB用于表示Internet主机上供外界访问的资源. Intrenet上供外界访问Web资源分为 静态web资源:web页面中供人们浏 ...

  3. 2016-09-07 J2EE基础知识之JSP_部分

    1.JSP(Java Server Pages) java服务器页面,其根本是一个简化的Servlet设计.JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.h ...

  4. [转] J2EE基础知识

    Servlet总结 阐述Servlet和CGI的区别? CGI的不足之处: Servlet的优点: Servlet接口中有哪些方法及Servlet生命周期探秘 get和post请求的区别 什么情况下调 ...

  5. 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器

    计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...

  6. 你不得不知的Java基础知识

    本篇博客主要记录Java中面向对象的概念和Java语法的基础知识. 面向对象 什么是面向对象 面向对象是一种优秀的软件设计思想,是相对于面向过程.面向切面等设计思想的一种软件设计理念.它的核心思想是运 ...

  7. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  8. python基础知识9——模块2——常见内置模块

    内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素 ...

  9. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

随机推荐

  1. ps 导出png-8图片会变模糊

    出现这种情况的时候,在保存png-8图片的时候,索引色需要改为256,否则保存的图片颜色与原图会不一致.

  2. .NET委托:一个关于C#的睡前故事 【转】

    紧耦合 从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺.但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒.但是彼得又不想让老板呆 ...

  3. C#—Dev XtraTabControl动态增加Tab和关闭选项卡方法

    C#—Dev XtraTabControl动态增加Tab和关闭选项卡方法,有需要的朋友可以参考下. 记录一下以免以后忘了 添加using DevExpress.XtraTab; 双击listview增 ...

  4. java项目使用memcache实现session共享+session基础

    本文章主要目的是配置session共享,为了巩固基础,捎带介绍了一些基础知识(网上搜索后觉得最全面的特引过来,节省时间),基础扎实的可以自动忽略. 基础篇: 1.了解java web中的session ...

  5. 泛型编程中的Concept, Model和Policy

    A crude explanation Concept A set of requirements on a type, e.g. a RandomAccessible concept require ...

  6. 解析处理常用json数据总结

    工作中用ajax接收到接口返回的数据需要进行解析后操作,这里总结一下平时的方法,用的jquery,复制下来的页面把引入的路径改一下即可. <!DOCTYPE html> <html ...

  7. Android NIO(Noblocking I/O非阻塞I/O)小结

    参考:http://www.cnblogs.com/cpcpc/archive/2011/06/27/2123009.html 对于Android的网络通讯性能的提高,我们可以使用Java上高性能的N ...

  8. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...

  9. 获取mysqli函数的值和字段名

    <?php $mysqli=new mysqli("localhost", "root", "123456", "xsphp ...

  10. 给新建的Cocos2d-x 3.X的Win32工程添加CocoStudio库

    1.我们在VS中找到"解决方案资源管理器", 在解决方案"HelloCocos"上点击右键, 选择添加现有项目. 在弹出的对话框中选择************* ...