允许开发和部署在桌面,服务器,嵌入式环境和实时环境中使用Java应用程序。
JavaSE包括支持Java Web服务开发的类,并为Java Platform,EnterPrise Edition(JavaEE) 提供基础。
企业版本帮助开发和部署可移植,健壮,可伸缩且安全的服务器端Java应用程序。
JavaEE是在JavaSE的基础上构建的,它提供Web服务,组件模型,管理和通信API,
可以用来实现企业级的面向服务体系结构(SOA)和Web2.0应用程序。
JavaME
为在移动设备和嵌入式设备上运行的应用程序提供了一个健壮且灵活的环境。
它包括灵活的用户界面,健壮的安全模型,许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。
基于JavaME规范的应用程序只需要编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
JavaEE提供了基于组件的方法设计,开发,组装和部署企业应用。
使用多层分布式的应用模型,分别通过三层或四层来实现:
客户层:运行在客户计算机上的组件。
Web层:运行在JavaEE服务器上的组件。
业务层:运行在JavaEE服务器上的组件。
企业信息系统层(EIS):运行在EIS服务器上的软件系统。
也叫三层应用(因为部署在三个位置:客户机,JavaEE服务器以及后台的数据库或过去遗留的系统)
JavaEE是一个框架,包括JDBC,JNDI,RMI,JMS,EJB,JTA等技术
JavaEE应用程序由组件组成,Javaee规范定义了下main一些组件:
运行在客户端的应用客户程序及小程序
运行于服务器网络的Servlet&Jsp组件
运行于服务端的 企业逻辑组件–EJB
JavaSE
允许开发和部署在桌面,服务器,嵌入式环境和实时环境中使用Java应用程序。
JavaSE包括支持Java Web服务开发的类,并为Java Platform,EnterPrise Edition(JavaEE) 提供基础。
JavaEE
企业版本帮助开发和部署可移植,健壮,可伸缩且安全的服务器端Java应用程序。
JavaEE是在JavaSE的基础上构建的,它提供Web服务,组件模型,管理和通信API,
可以用来实现企业级的面向服务体系结构(SOA)和Web2.0应用程序。
JavaSE就是放在电脑上的运行软件。
JavaEE用来做网站的(例如JSP,Htnl5,CSS3)
Servlet与Java的结合点
客户端(浏览器) 应用服务器 数据库
HTML
CSS -----help---- 应用Servlet ----JDBC---- Mysql
JavaScript
JSP,它使用Java代码作为服务器端的脚本,可以使用Dreamwearver等网页制作工具来编写,直观方便,
部署时,直接将JSP文件放到Web的目录下即可,不需要编译,也不需要额外的配置,比编写Servlet方便。
JSP全称Java Server Pages,是一种动态网页开发技术。特点是使用JSP标签,在HTML中插入Java代码。
JSP以<%开始,并以%>结束 格式通常为小脚本。
使用JSP技术开发动态Web项目是目前流行的选择。
JSP以Java技术为基础,有一次编写,到处运行的优点。
同一个JSP应用可以运行到不同的平台上,并有很多开源项目可以集成,丰富Web应用。
JSP是一种文本文件,最终会由容器编译为JavaServlet.
JSP主要用于实现动态Web应用程序的用户界面部分。
可以同过HTML,XHTML,XML以及嵌入式JSP操作和命令来编写JSP.
JSP标签可以实现多种功能,比如访问数据库,记录用户填写的表单信息,访问JavaBeanS等组件等
还可以在不同的网页中,传递控制信息和共享信息。
JSP通过网页表单获取用户输入数据,访问数据库及其他数据源以获取数据,然后动态创建网页。
Java的request请求和response响应
请求和响应API
已知,接收到客户请求后,容器会创建request请求对象和response响应对象,根据HTTP请求类型,调用相应的doGet(),doPost()等方法,并将request对象和response对象作为参数传递给这些方法。也就是说,这些方法都需要处理request对象和response对象。
ServletRequest接口隶属于java.servlet包,是HTTPServletRequest接口的父接口
后者隶属于javax.servlet.http包,主要处理有关HTTP的内容,如Cookie,Header,Session.
HttpServletRequest接口添加了与HTTP协议次相关的方法,Servlet使用这些内容与客户端浏览器进行通信。
Web服务器接受到客户的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象。
request和response对象既然代表请求和响应,那么我们要获取客户机提交过来的数据,只需要找request
对象即可;要向客户机输出数据,找response.
HttpServletRequest封装客户端相关信息,服务器Servlet程序可以通过request对象操作客户端信息
HttpServletResponse封装服务器向客户端发送响应数据信息,Servlet程序通过response对象向客户端发送响应。
response
1.response常用API
setStatus:设置响应行当中的状态码
setHeader:设置响应头信息
getOutputStream:设置字节流–输出响应体内容
getWriter:获得字符流–输出响应体内容
2.HttpServletResponse继承ServletResponse接口,ServletResponse并没有提供与HTTP协议相关的API,
HttpServletResponse添加了与协议相关API
JavaEE API中并没有提供HttpServletResponse实现类–实现类由tomcat服务器提供
3.常用的状态码:200 302 304 404 500
200 请求处理成功
302 客户端重定向
304 客户端访问资源没有被修改,客户端访问本地缓存
404 访问资源不存在
500 服务器内部出错
使用GET和POST请求
HTTP GET 和 HTTP POST是开发web应用的两种最重要的请求方法。
区别:POST有体(body),GET没有
POST与GET的不同:
POST没有查询字符串,请求行后面的几行都是请求头,长度不受请求行的限制
如果用户希望能够收藏网页,GET能够请求收藏,但POST请求不能
两者的安全性也不同,GET将请求信息放在URL,POST放在报文体中
具体用途不同,GET请求意味着获取信息,进行简单的,周期性的检索。
POST请求亦为之发送需要处理的信息,去更新。
GET和 POST的请求编程
POST请求需要表单,在标签中使用method属性指定HTTP方法为POST,
使用action属性指定表单提交的地址。
密码:
GET请求可以使用两种方式:
1,直接使用超链接,超链接总是使用GET请求
点击
2.使用表单,既可以不指定标签的 method属性,也可以明确指定标签的method属性为GET
代码:
密码:
点击
使用参数
Servlet编程中的一个重要环节是接收用户的输入参数,然后才能进行后面的处理环节。接收输入参数的
具体方法是调用request对象的getParameter()方法,该方法的处输入参数是一个字符串变量,指定参数的
名称,该名称对应表单输入组件的name属性。
例,对于前面的login.html,接收参数的代码片段如下
protected void diGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
//TODO Auto-generated method stub
response.setCharacterEncoding(“UTF-8”);
//response.getWrite().append(“Served at:”).append(request.getContextPath());
response.setHeader(“Content-type”,“text/html;charset=UTF-8”);
//获取参数
String username = request.getParameter(“username”);
String userpwd = request.getParameter(“userpwd”);
String gender = request.getParameter(“gehder”);
String email = request.getParameter(“email”);
String resume = request.getParameter(“resume”);
String[] hobbies = request.getParameterValues(“hobbies”);
}
大部分的表单输入参数都只有单个值,都可以采用上述方法获取参数。
也有例外,如复选框,一个参数可以有多个值。这时就不能使用getParameter()方法,
要是使用,就返回一个字符串数组。
例,如果表单使用如下复选框,用户就可以选择多个值。
单个参数hobbies就可以有多个值,具体值的个数取决于用户选中的选项数
跳舞 唱歌 音乐 游泳 足球
JavaEE软件开发体系架构
两层架构:传统的客户服务器系统仅只简单地基于两层体系来构建,即客户端(前台)和企业信息系统(后台),没有任何中间件,业务逻辑层与表示层或数据层混在一起。
这两层架构无论从开发,部署,扩展,未获来说有一个特点,成本高
从上而下,分为表示层,逻辑层,持久层
表示层:由处理用户交互的客户端组件及其容器所组成
业务逻辑层:由解决业务问题的组件组成
数据层:由一个或多个数据库组成,并可包含存储过程
这种三层架构,在处理客户端的请求时,使客户端不用进行复杂的数据库处理,透明地为
客户端执行许多工作,如查询数据库,执行业务规则和连接现有的应用程序,并能帮助
开发人员创建适用于企业的大型分布式应用程序。
三层架构区分层次的目的就是为了高内聚,低耦合 表现层(UI):展现给用户的界面,使用系统时的所见即所得 业务逻辑层(BLL):针对具体问题的操作,也叫做对数据层的操作,对数据业务逻辑处理 数据访问层(DAL):该层所作事务直接操作数据库,针对数据的添加,删除,修改,查找等。 在软件体系架构设计中,分层式结构最常见,也是最重要的一种结构。 微软推荐的分层式结构一般分为三层,从下至上:数据访问层,业务逻辑层(领域层),表示层。 系统的主要功能和业务逻辑都在业务逻辑层进行处理。 所谓三层架构设计是在客户端与数据库之间加入了一个中间层,也叫组件层。 这里的三层架构不是物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S 应用才是三层体系结构,三层是逻辑的三层,即使这三层放到一台机器上。 三层体系的应用程序将业务规则,数据访问,合法性效验等工作放到了中间层进行处理。 usual,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接, 再经由中间层与数据库进行交互。 表示层 业务逻辑层 数据访问层 数据库 用户界面包<------>业务逻辑包<--------->数据访问包<---------> 各层作用 1)数据访问层:对原始数据(数据库或文本等存放数据地形式)的操作层, 是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。 2)业务逻辑层:对具体问题的操作,也可以理解对数据层的操作,对数据业务逻辑处理 if数据层是积木,逻辑层就是积木的搭建。 3)表示层:表示WEB方式,也可以表示成WINFORM方式,WEB方式也可表现成aspx, if逻辑层相当强大完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。 在JavaWeb项目中 dao层:数据访问层,操作数据库,对数据进行增删改查 servicce层:业务逻辑层,对数据进行处理 web层:表示层,给页面传递数据 具体区分方法: 1)数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成 各个对数据文件的操作,不必管其他操作。 2) 业务逻辑层:主要负责对数据层的操作,把一些数据层的操作进行组合。 3)表示层:主要是对用户的请求接受,数据的返回,为客户提供应用程序的访问。 表现层: 位于最外层(最上层),离用户最近。用于显示数据和接收用户的输入数据,为用户提供一种交互式操作界面。 业务逻辑层: 是系统架构中体现核心价值的部分。主要集中在业务规则的制定,业务流程的实现等与也无需求有关的 系统设计,也就是说,他是与系统所对应的领域逻辑有关,所以业务逻辑层也称领域层。 业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中的承上启下 的作用。 由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是无知的,改变上层的设计 对于其调用的底层而言没有任何影响。 if在分层设计时,遵循了面向接口的设计思想,那么这种向下的依赖也应该是一种弱依赖关系。 therefore,在不改变接口定义的前提下,理想的分层架构,应该是一个支持可抽取,可替换的抽屉式架构。 业务逻辑层的 设计对于一个支持可扩展的架构尤为关键,因为他扮演了两个不同的角色。 对于数据访问层而言,它是调用者;对于表示层而言,他却是被调用者。 依赖与被依赖的关系纠结在业务逻辑层上,如何实现依赖关系的解耦,是除了实现业务逻辑之外的其他任务。 数据层(持久层): 负责数据库的访问,访问数据库系统,二进制文件,文本文档,XML文档 简单来说,实现数据表的select,insert,update,delete操作 if加入ORM元素,就会包括对象和数据表之间的mapping和对象实体的持久化。 advantage 1)开发人员可只关注整个结构的其中某一层 2)可以很容易的用新的实现来替换原有层次地实现 3)可以降低层与层之间的依赖 4)有利于标准化 5)利于各层逻辑的复用 6)结构更加明确 7)后期维护期间,极大降低了维护成本和维护时间 disadvantage 1)降低了系统的性能。 if不采用分层式结构,很多业务可以直接造访数据库,以获取相应的数据,现在通过中间层来完成。 2)有时会导致联的修改(尤其体现在自上而下)。 if表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层 都增加相应的代码。 3)增加了开发成本。 MVC 在MVC模式中,应用程序被划分为模型层(model),视图层(view),控制层(controller)三部分。 MVC模型就是把一个应用程序的开发按照业务逻辑,数据,视图进行分离分层并组织代码。 MVC要求把用户的模型按照一定的层次规则抽取出来,将业务逻辑聚集到一个部件里面,在 改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 模型层负责封装应用的状态,并实现功能。 视图层负责将内容呈现给用户。 控制层负责控制视图层发送的请求以及程序的流程。 Servlet+JSP+JavaBean(MVC)这种模式比较适合开发复杂的web应用。 在这种模式下,Servlet负责处理用户请求,JSP负责数据显示,JavaBean负责封装数据。 controller 浏览器-------------->servlet<=========>JavaBean(Model) | | | | |/ | <--------------------JSP<-------------- | 基于JavaEE架构模式下的MVC 在这种架构模式下,模型层(Model)定义了数据模型和业务逻辑。 为了将数据访问与业务逻辑分离,降低代码之间的耦合,提高业务精度,模型层又具体划分 为了DAO层和业务层,DAO即Data Access Object,其主要职能是将访问数据库的代码 封装起来,让这些代码不会在其他层出现或者暴露出来给其他层; 业务层是整个系统最核心也是最具有价值的一层,该层封装应用程序的业务逻辑,处理数据, 关注客户需求,在业务处理过程中会访问原始数据或产生新数据,DAO层提供的DAO类 能很好地帮助业务层完成数据处理,业务层本身侧重于对客户需求的理解和业务规则地适应, 总体来说,DAO层不处理业务逻辑,只为业务层提供辅助,完成获取原始数据或持久层数据等操作。 MVC模式是一种软件框架模式,被广泛应用在JavaEE项目地开发中。 MVC即模型(Model),视图(View),控制器(Controller) model模型:劳动者 接受controller的指令 告诉model做什么,controller要拿到什么 通过自身功能实现和DAO去处理这个事情 已最快最准确的方式完成controller交给的任务 model就是一直和控制器controller和数据库DB交互的中间件, 拿最原始的材料,经过适当的加工成半成品,将这个半成品交给控制器controller, controller对半成品做适当的封装交给一线的View进一步完善并表现到前端。 并且model有多种,数据封装:核心算法,核心业务,关键操作,工具集等。 模型是用于处理数据逻辑的部分。 所谓数据处理,也就是数据的映射以及对数据的增删改查,Bean,DAO(data access object,数据访问对象)等都属于模型部分。 controller控制器: 协调model和view的中间件 从view拿数据给model model处理并控制DAO和数据库交互 通过controller回馈给view显示告诉用户程序做了什么 view->controller->model->db db->model->controller->view 控制器是模型与视图之间的桥梁,控制着数据和用户的交互。 控制器通常负责从试图读取数据,处理用户输入,并向模型发送数据,也可以从模型中读取数据, 再发送给视图,由视图显示。 视图(View) 负责从用户那里拿到controller想要获取到的数据 人机交互 视图负责数据与其他信息的显示,也就是给用户看到的页面。html,jsp等页面都可以作为试图。 MVC优点:高内聚,低耦合 设计模式与框架模式 设计模式是指工厂模式,单例模式这种,一般不能乱用 而MVC应该被称作是框架模式 设计模式是针对代码的,如同修筑房屋时砖瓦的层叠方式,是软件开发的基石。 框架模式,是针对框架的,是面向某些应用场景的可复用方案。 MVC实践 在JavaEE中,最经典的MVC模式即 Bean(Model)+JSP(View)+Servlet(Controller) 例,需求:实现编辑页面上的信息并与数据库同步 在实现上,可以分为以下几步: 用Bean来映射数据表,并编写好DAO 用负责查询的Servlet调用DAO查询需要编辑的内容并发送给用于编辑的jsp页面 把编辑页面进行修改后的值,在提交给负责更新的Servlet调用DAO更新数据库 使用另一个负责查询的Servlet,把查询出来的更新过的内容发送给负责显示的JSP JSP:JSP被用来产生Web的动态内容。这层把应用数据以网页的形式显示个浏览器,然后数据 按照在JSP中开发的预定的方式表示出来,这层也可以称之为布局层。 Servlet:JSP建立在Servlet之上,Servlet是J2EE的重要组成部分。 Servlet负责处理用户请求,JavaWeb项目的所有配置都写在了web xml配置文件中, 当项目运行的时候,web xml会将http请求映射给对应的Servlet类。 JavaBean:由一些具有私信属性的Java类组成,对外提供get和set方法。 JavaBean负责数据,负责处理视图图层和业务逻辑之间的通信。 Service:业务处理类,对数据进行一些预处理。 DAO:数据访问层,JDBC调用存储过程,从数据库( DataBase)那里获取到数据,再封装到Model 实体类中去。 ## 三层机构与MVC: 相同之处: 三层架构中的UI对应MVC中的view(jsp),都是用于显示以及获取界面的数据; 三层架构中的BLL层和DAL层对应MVC中的Model(javabean)层都是用于处理上层传递的数据以及 从数据库获取的数据的; MVC中的Controller(Servlet)最多算是三层架构的中的UI的一部分,也就是Servlet. ## 不同之处: 三层是整个应用程序架构,MVC是功能模块 1)三层是基于业务逻辑来分的,而MVC是基于页面来分的。 MVC模式是一种复合设计模式,一种解决方案。 三层是种软件架构,通过接口实现编程。 2)三层模式是体系结构模式,MVC是设计模式。 3)三层模式又可归于部署模式,MVC可归于表示模式。 ## 二者适用范围不同 1)三层可以应用于任何语言,任何技术的应用程序(为了明确逻辑) 2)VC只是为了解决B/S应用程序视图层各部分的耦合关系(为了解耦) 3)互不冲突,可以同时存在,也可以根据情况使用其中一种。