2016-09-06 J2EE基础知识之不知
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基础知识之不知的更多相关文章
- J2EE 基础知识积累
1. 面向对象的思维: 1. 有哪些类 那些对象 2. 这些类中,每种类应该具有某种属性和方法 3. 考虑类与类之间应该具有什么样的关系 3. 1. 成员变量可以使用java语言中 ...
- j2EE基础知识
感觉应付面试足够了 一.基本概念 1.1 WEB开发的相关知识 WEB用于表示Internet主机上供外界访问的资源. Intrenet上供外界访问Web资源分为 静态web资源:web页面中供人们浏 ...
- 2016-09-07 J2EE基础知识之JSP_部分
1.JSP(Java Server Pages) java服务器页面,其根本是一个简化的Servlet设计.JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.h ...
- [转] J2EE基础知识
Servlet总结 阐述Servlet和CGI的区别? CGI的不足之处: Servlet的优点: Servlet接口中有哪些方法及Servlet生命周期探秘 get和post请求的区别 什么情况下调 ...
- 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器
计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...
- 你不得不知的Java基础知识
本篇博客主要记录Java中面向对象的概念和Java语法的基础知识. 面向对象 什么是面向对象 面向对象是一种优秀的软件设计思想,是相对于面向过程.面向切面等设计思想的一种软件设计理念.它的核心思想是运 ...
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙
消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...
- python基础知识9——模块2——常见内置模块
内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
随机推荐
- .NET与你若仅仅如初见(一)
难忘初次见到你,那是一个夏日的午后,可是天空中乌云密布.大雨来临前的一段时间总是非常闷热的,当我朦胧的睡眼看到你之后瞬间就清醒了,感觉空气也凉爽了起来.尽管仅仅一眼但就是被你那清新脱俗沉鱼落雁之美所征 ...
- 关于OF和CF
很久很久前写的.越来越意识到作为一名科班出身的学生的重要性. 自己在使用IDA时,发现F5产生类似的这种代码. 其中有一句,v5 <= -141920797,我在想为什么是负数.如果把-1419 ...
- SecureCRT中文显示乱码的解决方法
注:本文出自:http://riching.iteye.com/blog/349754 最近开始用SecureCRT登陆linux系统,由于是新手,很多问题不清楚,碰到显示中文乱码的问题,困扰了好几天 ...
- UVA 11175 From D to E and Back
题意: 给一个n个结点的有向图D,可以构造一个图E:D的每条边对应E的一个结点(例如,若D有一条边uv,则E有个结点的名字叫uv),对于D的两条边uv和vw,E中的两个结点uv和vw之间连一条有向边. ...
- Intent组件
Android页面之间的跳转可以分为几类,比如有A和B两个页面,从A页面直接跳转到B页面,这样的跳转比较简单,或者从A页面跳转到B页面但是需要传送数据.在Android中,页面的跳转离不开Intent ...
- Gitlab管理下本地Git配置
公司项目组用的是Gitlab,组内成员分配有有固定的git个人账户,不同成员有不同的模块编辑权限,使用前需要配置好本地的Git.对一直使用svn的小菜菜来说,这个还是需要一点步骤配置下才可以使用的.配 ...
- C# 8 函数 调用 常用类 时间 日期型
函数:能够独立完成某个功能的模块. 好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发. 四要素:名称,输入(参数),输出(返回的类型),加工(函数体) 语法: 返回类型 函数名(参 ...
- aspnetpager分页,不使用存储过程
一.前台显示界面代码Default.aspx(注意,代码运行环境是VS.2005) <%@ Page Language="C#" AutoEventWireup=" ...
- spring+hibernate
添加注解时spring是添加在set方法上而hibernate是添加在get方法上 事务应该加在service层上,而不是加在dao层上,如果加在dao层上回滚的时候只能回滚一个dao的实现. 事务处 ...
- Handle 消息机制
android中Handle类的主要作用: 1.在新启动的线程中发送给消息 2.在主线程获取.处理消息 为什么要用Handle这样的一个机制: 因为在Android系统中UI操作并不是线程安全的,如果 ...