第一篇:基于java技术的软件开发架构总结
基于java技术的软件开发架构总结
在具体的实现中,表现层可为Struts/JSF等,业务层、访问层可为JavaBean或EJB等,资源层一般为数据库。
宏观上的层次就是这样,在具体现实中,有如下几种实现形式:
1,轻量级实现
表现层使用基于MVC的框架,比如Struts或JSF 业务层使用JavaBean(就是常说的Service)访问层使用JavaBean(就是常说的DAO)优点:
轻量级实现,简单明了 缺点:
难以无法实现分布式应用
以下功能必须通过编程实现
事务控制 资源管理(包括组件的创建)
线程安全问题
安全性
2,重量级J2EE实现
表现层依然是基于MVC的框架
访问层采用实体Bean实现,如果可能最好采用CMP,实现起来更简洁。此处的实体Bean可以考虑采用本地接口
业务层一分为二,服务控制器可以由会话Bean充当,用来封装业务流程(相当于轻量级实现中的Service),也可以考虑采用本地接口;门面也可以由会话Bean充当(一般来说无状态会话Bean足矣),作为业务层的入口,应该采用远程接口。优点:
以下功能可由EJB容器自动实现,或通过配置实现
事务控制
远程访问
线程安全
资源管理
安全性
可以进行分布式应用
因为采用了EJB,故部分特征可以由装配人员来配置(比如事务,安全性等),不需要在软件中硬编码 EJB组件有更好的重用性
可利用容器提供的其他企业级的功能(比如集群,容错,灾难恢复等)
可以加入MDB(实现异步通讯)等技术 缺点:
开发难度较高
如果不恰当的使用实体Bean,会造成效率低下。如果采用CMP,则很多数据访问的操作不能直接实现。
缺少良好的开发环境
软件可能依赖于具体的EJB容器 EJB容器可能很贵,开发软件也可能很贵
3,轻量级和重量级J2EE的切换
如果项目有需求,并有充分的时间,还可以通过在表现层和业务层的交界处加入“业务代表”(JavaBean + 服务定位器实现)来对表现层隐藏对业务层访问的细节(JavaBean和EJB的访问方式显然不同),只需替换“业务代表”就可以切换轻量级和重量级两种实现。举例说明,一般电话上都有一个P/T开关(脉冲/音频开关),随着开关状态的不同,拨号时电话机会判断是使用脉冲拨号还是音频拨号。
这种架构唯一的缺点就是必须写两套实现代码„„
4,轻量级J2EE实现
访问层通过JavaBean调用ORM框架实现(Hibernate,iBatis等),代码简洁,功能完备(相对于EJB 2.x而言),如果用的是Hibernate,可以忽略底层数据库的差异,如果用的是iBatis,则方便对SQL进行优化。
业务层和访问层依靠AOP框架(如Spring)可以在切面中实现事务,安全性等功能,同时不影响业务代码。如果采用Spring,其中已经内置了事物切面,并可以轻易的与主流ORM框架进行整合,实现声明式的事物管理。当然,更可以使用IoC模式降低组件间的耦合性。优点:
可以通过AOP框架实现事物、安全性等功能,同时不影响业务代码
ORM框架比CMP更灵活,比BMP更简洁(相对于EJB 2.x而言),运行效率也比较高
如果使用Spring,可以用更简单的方式实现J2EE中比较复杂的功能
无需额外的容器
ORM和AOP框架可以找到免费的开源实现,降低项目成本(不过也有人认为采用开源项目可能综合成本更高) 缺点:
非官方框架,缺少文档、技术支持和业界经验
采用技术太多,学习曲线较高,难以招到合适的程序员(咱们学员可以考虑在这方面下点功夫,呵呵)
某些企业级的功能轻量级框架还不能实现(或独立实现)
测试、调试均比较复杂
另类之处:
使用BMP + Hibernate(具体做法为BMP中的持久化方法,比如ejbLoad, ejbStore等都委托给Hibernate实现)优点:
借助于Hibernate强大的ORM功能弥补CMP的不足(特别是EJB-QL)缺点:
事物不好控制
不伦不类,容易发生未知的错误(比如Hibernate自身的缓存可能会于容易提供的缓存冲突)另类之处:
将业务层(也可能包含访问层)包装成Web Services,支持远程调用 优点:
借助于Web Services可以实现松散耦合分布式应用,说的大一点,就是传说中的SOA,呵呵 缺点:
Web Services自身效率不高,无状态,安全性差
当然,即使不分层,也能做出软件来,但我们应该思考怎么做才能最好?如果说分层不好,那么不分层的优势又在哪里呢??如果说分层有性能的损耗,那么性能损耗在哪里呢??如果不分层,软件工程思想中的“分而治之”的原则启不受到了质疑?
有人说,分层是为了减少代码量,如果分层是为了减少代码量,那怎么能减少,代码的重用也许会减少一些,但是程序更多的是业务,我们关心的也只是业务,试问分层的意义就是为了减少代码量?
总之我的观点就是:软件分层是必须做的。至于框架,不应该问用不用,而应该问用什么?要选用实践检验过的框架,毕竟实践是检验真理的唯一标准。
二年的J2EE开发之后,我们应该掌握了一些主流的架构模式,总结一下:
宏观上讲,我们采用了分层的架构,将软件分为如下的层次:
第二篇:java技术架构
Java技术体系图
Java程序员
高级特性
反射、泛型、注释符、自动装箱和拆箱、枚举类、可变
参数、可变返回类型、增强循环、静态导入
核心编程
IO、多线程、实体类、集合类、正则表达式、XML和属性文件
图形编程
AWT(Java2D/JavaSound/JMF)、Swing、SWT、JFace
网路编程
Applet、Socket/TCP/UDP、NIO、RMI、CORBA
Java语法基础
类、抽象类、接口、最终类、静态类、匿名类、内部类、异常类、编码规范
Java开发环境
JDK、JVM、Eclipse、Linux
Java核心编程技术
Java,设计而又非常精巧的语言。学习Java,须从Java开发环境开始,到Java语法,再到Java的核心API。
1.Java开发入门:Java开发环境的安装与使用,包括JDK命令、EclipseIDE、Linux下Java程序的开发和部署等。
2.Java语法基础:基于JDK和Eclipse环境,进行Java核心功能开发,掌握Java面向对象的语法构成,包括类、抽象类、接口、最终类、静态类、匿名类、内部类、异常的编写。
3.Java核心API:基于JDK提供的类库,掌握三大核心功能:
A。Java核心编程:包括Java编程的两大核心功能——Java输入/输出流和多线程,以及常用的辅助类库——实体类、集合类、正则表达式、XML和属性文件。
B。Java图形编程:包括Sun的GUI库AWT(Java2D、JavaSound、JMF)和Swing,IBM和GUI库SWT和Jface;
C.Java网路编程:Applet组件编程,Socket编程,NIO非阻塞Socket编程、RMI和CORBA分布式开发。
4.Java高级特性:掌握JDK1.4、JDK5.0、JDK6.0中的Java高级特性,包括反射、泛型、注释,以及java高级特性——自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入等。
JavaEE初级软件工程师
JSF框架开发技术
配置文件(页面导航、后台Bean)、JSF组件库(JSF EL语言、HTML标签、事件处理、)、JSF核心库(格式转换、输入验证、国际化)
Javaweb核心开发技术
开发环境(Eclipse、Linux)
三大组件(JSP、JavaBean、Servlet)
扩展技术(EL、JSTL、Taglib)
网页开发技术
HTML、XML、CSS、JavaScript、AJAX
数据库设计技术
SQL、MySql、Oracle、SQLServer、JDBC
Web服务器(Tomcat/Jetty/Resin/JBossWeb)
JavaWeb核心技术:
JavaWeb项目开发的全过程可以分解为:
网页开发+数据库设计——>JavaWeb项目开发,其中,javaWeb由6项基本技术组成:JSP+JavaBean+Servlet+EL+JSTL+Taglib,而JSF正是将这6种技术进行有机结合的技术框架:
JavaEE中级软件工程师
四种经典架构SSH1、SSI1、SSH2、SSI2
Struts1表现层框架
入门配置、核心组件、标签库、国际化、数据检验、数据库开发、Sitemesh集成、集成Hibernate/iBATIS
Struts2表现层框架
入门配置、核心组件、标签库、国际化、数据校验、Sitemesh集成转换器、拦截器、集成Hibernate/iBATIS
Spring业务层框架
入门配置、IoC容器、MVC、标签库、国际化、数据校验、数据库开发
Hibernate持久层框架
MySQL、Oracle、SQLServer iBATIS持久层框架
MySQL、Oracle、SQLServer
Web服务器(Tomcat/Jetty/Resin/JBossWeb)
Java高级软件工程师
javaWeb开源技术与框架
工作流、规则引擎
搜索引擎、缓存引擎、任务调度、身份认证
报表服务、系统测试、集群、负载平衡、故障转移
JavaWeb分布式开发技术
JTA(Java事物管理)
JAAS(Java验证和授权服务)
JNDI(Java命名和目录服务)
JavaMail(Java邮件服务)
JMS(java信息服务)
WebService(web服务)
JCA(java连接体系)
JMS(java管理体系)
应用服务器(JBossAS/WebLogic/WebSphere)
JavaEE系统架构师
面向云架构(COA)
COA、SaaS、网格计算、集群计算、分布式计算、云计算
面向资源架构(ROA)
ROA、RESI
面向web服务架构(SOA)
WebService、SOA、SCA、ESB、OSGI、EAI
Java设计模式
创建式模式:抽象工厂/建造者/工厂方法/原型/单例
构造型模式:适配器/桥接/组合/装饰/外观/享元/代理
行为型模式:责任链/命令/解释器/迭代子/中介者/备忘录/观察者/状态/策略/模板方法/访问者
Java与UML建模
对象图、用例图、组件图、部署图、序列图、交互图、活动图、正向工程与逆向工程
CTO首席技术官
发展战略
技术总监
团队提升
团队建设
项目管理
产品管理
第三篇:java软件开发工程师 简历
个人简历
个人基本信息姓名:性别:联系方式:出生年月:
电子邮箱:毕业院校:北京化工大学北方学院专业:软件工程学历:本科(统招)求职意向
Java软件开发工程师
教育背景2008年 9月~2012年 7月北京化工大学北方学院软件工程本科专业技能
熟练掌握Core Java基础,具有良好的编码风格和编程习惯;熟练掌握基于Servlet、JSP、HTML的Web编程;熟悉JQuery、Struts2、Hibernate、Spring等应用开发框架及MVC模式;熟悉Ajax,JavaScript,XML,Css等技术; 熟悉JSP页面上的标签技术如EL、JSTL;熟悉MySQL、Oracle数据库,熟练书写基于标准的SQL语句; 了解常用的commons组件(log4j,ant),掌握应用log4j记录日志;熟悉Unix/Linux操作系统的常用命令;熟练使用MyEclipse工具进行开发,Tomcat服务器;熟悉Java设计模式:单例模式、工厂模式等;能够独立思考和解决常见问题,有查阅资料解决技术问题的能力。项目经验网上购物系统开发环境: Linux, MyEclipse, Tomcat, MySQL
使用技术: Struts2+ Hibernate + JSP + Spring + Jquery + Ajax 等
项目描述:
1.注册模块: 使用JQuery和Ajax技术对表单进行验证,struts框架进行后台验证, 注册成功后向用户邮箱发送激活码。
2.帐号激活: 解析用户提交的激活码, 相应地修改其激活状态, 激活后方能登录。
3.浏览商品: 主页面左边是商品分类列表, 根据用户所选的类别, 分页显示所有该类商品。
4.购 物 车: 用户购买商品后, 生成商品条目添加到购物车中, 并且通过cookie技术将用户所购买商品的信息保存到浏览器, 如果用户禁止cookie使用session机制保存在服务器, 可以根据cookie、session恢复购物车.用户可以进入购物车对商品进行增, 删, 改以及恢复操作。
5.生成订单: 用户必须登录后才能结算, 结算后, 生成订单, 并且清空购物车以及对应的Cookie、session。
6.动态更新: 根据商品的交易量, 更新网站主页的 ”热销榜”。
责任描述: 在既有的体系结构设计和数据表的条件下, 完成所有模块的编码和测试。该系
统基于MVC框架,使用JSP完成显示逻辑, 页面中使用到了Struts2标签和ognl
表达式进行数据的动态绑定, 并且运用Ajax异步请求方式完成页面的局部更新,比如用户注册页面验证,验证码的更新,商品浏览页面的各个模块的更新,模块
内页面的翻页。利用Cookie和Session机制对购物车里商品进行保存,快速选
取送货地址。控制器由Struts2框架提供支持,通过拦截器、action和XML的搭配很好的处理页面发送的请求。通过Hibernate实现数据库的访问和数据的持久化,提高了程序的灵活性。DAO、工厂模式的应用降低了组件之间的联系。
采用Spring的IOC和DI技术实现页面以及组件的注入,AOP实现对日志的记录、用户的登录检查和事务管理。
项目心得:
1.对于Struts2,Hibernate,Spring框架和MVC设计模式有了更深入的理解。
2.编码时不要心急,耐心的完成每一个方法的逻辑和测试, 步步为营, 增量式开发。
编码时, 积极和团队中的其他成员交流与沟通可以事半功倍。有些问题和细节自己
是很难发现, 经常是小组谈论时, 受到队友的启发,顺利的解决问题。
其他
1.在线考试系统
2.贪吃蛇
2.简单相册
3.五子棋
4.简单的HTML打字游戏
5.webQQ
培训经历自我评价2011年6月~2011年11月北京达内科技有限公司Java软件开发实习生
1.具有一定的逻辑思维能力, 对计算机编程有着浓厚的兴趣。
2.敢于接受挑战,喜欢钻研, 具备独立解决问题的能力。
3.沉稳,工欲善其事, 必先利其器, 在写代码之前我习惯花一些时间将逻辑关系理顺,把一些细节考虑清楚, 每一步都尽量做到心里有数。
4.具有一定的英文阅读能力,能够阅读英文文档。
5.为人诚恳,热心,具有团队合作精神,小组遇到问题时一起谈论,找到最佳的解决方
案。
6.性格随和, 乐观, 懂得及时释放压力, 保持积极饱满的工作状态。
7.经过培训,技能得到了很大的提升,如果还有机会充实自己,我也会非常珍惜。
第四篇:Java软件开发工程师个人简历
个 人 简 历 模 板
【个人信息】:
姓名:
年龄:
学历:
联系电话: 杨** 21岁 本科 138******11
Java软件工程师
学习时间
2008/9-2012/6 性别: 项目经验 : 专业: 电子邮箱: 男 一年 计算机科学与技术y****t@***.com 目标地点: 专业 计算机科学与技术 深圳 上海 北京 【求职意向】: 目标职位: 【教育背景】: 学校名称 湖南师范大学
【自我评价】:
本人有责任感、学习能力强、有上进心、具有很强的团队精神,善于与人沟通,表达能力良好;喜好编程开发,并且有一定的编程功底,在工作上积极负责,能够很好的根据项目计划书完成软件的开发。
【技能专长】:
1.熟练使用Jsp,Javabean,Servlet,JDBC等Web开发技术进行开发
2.熟练使用HTML、Javascript、Ajax等表现层技术,了解XML;
3.熟悉Struts、Hibernate、Spring等开源框架,熟悉MVC三层架构开发模式;
4.熟练掌握SQL Server 2000/2005、Oracle数据库的操作;
5.熟练使用Eclipse,能够使用PowerDesigner、Visio等建模工具;
6.熟练掌握Tomcat,了解Jboss;
7.了解C/C++等;
8.在项目开发过程中善于交流,有良好的开发及协同团队工作能力。
【项目经验:】:
项目名称:迅捷物流管理系统
周期:3个月
开发工具:Eclipse,PowerDesigner,SVN,Dreamweaver
开发环境:Windows xp,Oracle 9g,JDK1.6,Tomcat6.0
开发人数:6人
技术框架:Struts + Hibernate + Spring + Ajax + Log4j等
项目描述:
1.使用本系统可以大大提高物流业务公司的运作效率。通过全面的信息管理与分析,辅助提高物流公司业务的决策水平。本系统可以迅速提升公司管理水平,为降低公司运营成本,提高效率提供有力的技术保障。
2.本系统采用B/S模型,采用4层架构。分为:视图层、控制层、业务逻辑层和数据访问层,使用Log4j 实现日志管理和系统异常处理。
主要模块:
1.客户服务(客户管理、订单管理、操作员工作量查询)
2.调度中心(订单调度、任务单管理)
3.分站管理(分站管理、发票管理)
4.库房管理(中心库房购货入库/调拨出库、分站库房调拨入库、领/退货管理)
5.配送管理(进/退货管理、商品管理、库房管理、供应商管理、业务统计查询)
6.财务管理(结算管理、发票管理,报表管理)
项目责任:参与文档的编写和数据库设计,主要负责财务管理模块开发的功能实现以及系统的集成测试。
对jfreechart有了更深一步的了解。
项目名称:聊天室系统
周期:3个月
开发工具:Eclipse,PowerDesigner,Dreamweaver
开发环境:Windows xp,Oracle 9g,JDK1.6,Tomcat6.0
开发人数:1人
技术框架: jsp+ Ajax等
功能描述:
1.登录模块: 用户登录,包括验证用户是否在线。
2.管理模块:实时显示在线人员列表及在线人数。
3.聊天模块: 用户发言,包括选择表情和字体颜色功能。
4.退出模块: 安全退出聊天室。
项目责任:这个聊天室系统是我在学习了Ajax之后,通过在网上查找资料和使用乐趣聊天室系统后的体会进行了文档和数据库的设计及后面的代码编写。
第五篇:java开发技术总结
数据库
oracle-->数据库管理系统-->SQL、PL/SQL-->Java(JDBC+SQL)DBA,数据库编程程序员 1.概念导论
1)什么是数据库
有组织和结构存储数据。可以存储 字符、字节、图形、图像等类型数据
DB(数据库):数据集合
DBMS(数据库管理系统):对数据集合进行管理和操作的软件
--Oracle
--DB2
--MySQL
--SQLSERVER
JDBC 1.什么是JDBC 全称Java DataBase Connection,Java数据库访问。
JDBC是Java访问数据库的一项技术
JDBC是SUN推出的Java访问数据库的一套标准。由一系列接口构成。
各个数据库厂商负责提供JDBC接口API的实现包。
开发者只需要掌握JDBC接口的使用,就可以实现对各种数据库的操作,不需要了解开发商的实现类。
XML
1、什么是xml(xtendsible markup language可扩 展的标记语言)? 1)定义
基于文本的通用的数据保存格式。
(1)通用的点的坐标
Point类
point对象(x=10,y=20)
a,序列化
b,数据库表
c,文件
...(2)数据格式
HTML 知识准备
1、分层:表现层:UI界面(DOS界面、桌面类型、web类型)
业务层:
数据层:文件、Oracle数据库
2、Web类型的应用程序----B/S 类型
打开 Browser,输入 URL,浏览器将请求发送到服务器
服务器得到请求,分析,返回响应
浏览器得到响应,解析(翻译),显示为页面
3、web 学习阶段
客户端技术:HTML+CSS+Javascript---Web 基础
服务器端技术:JSP、PHP、ASP.NET
4、web基础的课程
HTML:页面的创建
CSS:页面的外观
JavaScript:页面的动态效果和交互行为--3 一:HTML 概述
1、超文本标记语言:一种编写页面的纯文本的标记语言,文件以.html或者.htm 为后缀,依靠浏览器运行显示----解释性的语言
2、标记:一些用 <> 括起来的内容,特殊的显示
3、主流浏览器:IE/Firefox/Chrome/
4、浏览器兼容性:符合标准规范,具体问题
CSS 一:CSS 概述
1、CSS:级联样式表(层叠样式表)
2、特征:为页面定义外观的语言,实现内容和表现的分离,多个样式可以合为一个,如果冲突,以优先级为准
二:基础语法
1、语法:
属性名称:值;属性名称:值;比如--color:red;
2、如何应用
方式一(内联方式):<元素 style=“" />---将样式直接定义在元素的 style 属性里
方式二(内部样式表):在页面的 head 里的 style 里定义样式
方式三(外部样式表):定义一个单独的.css的文件(定义样式);然后,在页面的 head 里用 link 引入---推荐方式
3、外部样式表的优点:实现内容和表现的分离,提高代码的可重用性和可维护性
---可以准备多套样式---换皮肤/主题
4、样式表,如果重复定义
a、样式不同,取并集
b、相同,按照优先级
内联 > 内部或者外部
c、相同优先级下,以最后定义的为准
javascript 一:javascript 概述
1、什么是 javascript:一种基于对象和事件驱动的解释性脚本语言,嵌入到网页上
2、历史:js代码---W3C定义了标准规范的 js 代码
3、浏览器兼容问题:标准代码,个别情况个别对待
4、怎么写
方式一:直接写在事件里,仅限于代码很少
方式二:写在 head 的 script 里,仅限于当前页面重用
方式三:写在 js 文件里,html 页面的head 里用 script 引入
5、js的特征53………………………………………………..一种解释性的脚本语言,适用于为网页添加动态效果和交互行为
6、错误:
二:基础语法
1、写法:以 ;结束,大小写敏感
名
2、标识符:以字母、数字和下划线还有 $组成,不以数字开头---不能和系统关键字重
3、变量 ***----声明变量,以 var 开始
var i = 1;var s = ”mary“;var b = true;js是一种弱类型的语言---变量声明时不需要确定类型,数据类型以赋值为准
4、数据类型
简单类型:string、number、bool 特殊类型:null、undefined
var i;
alert(i);---undefined 复杂类型:对象
5、(string)字符串类型
var s = ”mary“;var s = 'mary';
特殊字符:使用转义---转换为普通字符,解决汉字的问题
”hello'w“ornld” alert(“一”);alert(“u4e00”);[u4e00-u9fa5]
6、number:并不区分整数和小数
var n = 12;var n1 = 12.34;
7、bool:true(1)和 false(0)
8、数据类型之间的转换
var n = 18;var name = “mary”;隐式转换(直接)
string + number--
number + bool--
bool + bool--
string + bool--
显式转换(调用方法)*** xxx.toString()parseInt(xxx);parseFloat(xxx);--确实能转,如果不能转,将返回 NaN
NaN---not a number 判断
isNaN(“aaa”)--is not a number--返回 bool
9、运算符
算术运算符、比较、逻辑、位。。
特殊一:***
=== 严格相等:值和类型
if(a == b)
if(a === b)servlet 1、web开发的背景知识(了解)b/s架构:
特点:
客户端使用浏览器,服务器端使用web服务器,客户端与服务器端使用标准化的http协议来进行通信。
优点:
与c/s架构相比,有两个优点:
a,客户端不需要单独安装
b,开发相对简单(因为c/s架构需要自定义协议,开发相应的 通信模块,而b/s使用标准化的http协议,浏览器与 web服务器都提供了相应的通信模块)。
2、什么是servlet? sun公司制订的一种用来扩展web服务器功能的组件规范。
(1)扩展web服务器功能
早期的web服务器(iis,apache ws等等),只能够处理静态
资源的请求(即需要事先将html文件写好并保存到web服务器
相应的文件夹下面),不能够处理动态资源的请求(即需要进行
计算,然后生成相应的html)。
a,可以使用cgi程序来扩展。
cgi程序可以使用c/c++,perl等语言来开发,但是,程序比较复杂,而且可移值性不好,性能也比较差,现在用得不多。
b,servlet可以扩展这些web服务器的功能。
浏览器发送请求给web服务器(apache ws),web服务器
检查请求是否需要计算,如果需要,web服务器会访问
servlet容器,servlet容器会调用servlet来进行计算。
(2)组件规范
1)什么是组件?
符合一定规范,实现部分功能,并且需要部署到
相应的容器里面才能运行的软件模块。
2)什么是容器?
符合一定规范,为组件提供运行环境及相应服务的 程序。
3、如何开发一个servlet? step1,先写一个java类,实现Servlet接口或者继承
HttpServlet类(一般会使用继承的方式)。
step2,编译
step3,打包(创建一个具有如下结构的文件夹)
appname(应用名称)
WEB-INF
classes(放.class文件)
lib(可选,放.jar文件)
web.xml(部署描述文件)step4,部署
将step3创建好的文件夹拷贝到servlet容器指定的 某个文件夹下面(比如,如果容器是tomcat,可以拷贝到
webapps文件夹下面)。
注意:也可以使用jar命令将step3创建好的文件夹
压缩成一个以“.war”为后缀的文件,然后拷贝。
step5,启动servlet容器,访问servlet
http://ip:port/appname/servlet-url
6、servlet是如何运行的? 比如,在浏览器地址栏输入
http://ip:port/web01/hello
step1,浏览器依据ip,port建立与servlet容器(容器同时 也是一个简单的web服务器)之间的连接。
step2,浏览器将请求数据打包(按照http协议,该数据包 也称为请求数据包)。
step3,浏览器发送请求数据包给容器。
step4,容器收到请求数据包之后,解析该数据包,并将
解析之后得到的数据封装到request(请求数据包)对象上,同时,容器 还要创建response对象。
step5,容器要依据请求资源路径(“/web01/hello”)找到 servlet的配置,然后创建servlet对象。
step6,容器调用servlet对象的service方法。容器会将事先 创建好的request,response作为参数传递给service方法。step7,在service方法里面,可以通过request对象获得
请求参数,并进行相应的处理,处理结果会放到response对象 里面。
step8,容器从response对象中取出处理结果,然后打包(按照http协议,该数据包称之为响应数据包)。然后将 响应数据包发送给浏览器。
step9,浏览器收到响应数据包之后,解析处理结果,然后生成 相应的页面。
http://localhost:8080/web01/hello?uname=jetty ?后是请求参数,其中uname是参数名,jetty是参数值。
JSP
1、什么是jsp(java server page java服务器端页面技术)? 1)定义
sun公司制订的一种服务器端动态页面生成技术规范。
2)理解
a,因为直接使用servlet,虽然也可以生成动态页面,但是比较繁琐(需要使用out.println语句),并且维护困难
(如果页面发生改变,必须修改java代码),所以,sun 在servlet规范制订之后,又添加了jsp规范。
b,jsp其实就是一个以“.jsp”为后缀的文本文件,该文件会被容器(比如tomcat)转换成一个servlet。
2、如何写一个jsp文件? step1,写一个以“.jsp”为后缀的文件。step2,在该文件里面,可以添加如下的内容:
1)html(css,javascript)
直接写即可(不用out.println)
2)java代码
a, java代码片断
<% java代码;
%>
b, jsp表达式
<%= java表达式 %>
3)指令
a,什么是指令?
告诉容器,在容器将.jsp文件转换成.java文件时
做一些额外的处理,比如导包。
b,基本语法
<%@指令名称 属性名称=属性值 %>
c,page指令
import属性:导包,比如
<%@page import=“java.util.*”%>
<%@page import=“java.util.*,java.text.*”%>
contentType属性:设置
response.setContentType的内容,比如
<%@page contentType=“text/html;charset=utf-8”%>
pageEncoding属性:告诉容器jsp文件的编码。
因为容器需要读jsp文件的内容(也就是
说,需要解码,某些容器,如果没有该
属性,默认情况下会按照iso-8859-1
去解码,会产生乱码问题)。
4)隐含对象
a,什么是隐含对象?
在jsp文件里面可以直接使用的对象,比如
out,request,response。
b,为什么可以直接使用这些隐含对象?
因为容器会自动添加创建这些对象的语句。
3、jsp是如何运行的? step1,容器要将.jsp文件转换成.java文件(其实就是
一个servlet类)。
a, html(css,javascript)--->
在service方法里,使用out.write输出。
(out.write方法会将null转换成“"输出)
b,<%
%>
----->
在service方法里,照搬。
c, <%=
%>
----->
在service方法里,使用out.print输出。
step2,容器调用servlet来处理请求。
4、转发
(1)什么是转发?
一个web组件(servlet/jsp)将未完成的处理通过
容器交给另外一个web组件继续完成。
最常见的情况:
一个servlet获得数据,然后转发给一个jsp来展现
这些数据。
(2)如何转发?
step1,绑订数据到request对象上。
request.setAttribute(String name,Object value);
说明:
name:绑订名称
value:绑订值 step2,获得转发器
RequestDispatcher rd =
request.getRequestDispatcher(String uri);
说明:
url : 转发的目的地 step3,转发
rd.forward(request,response);request对象的其它和绑订相关的方法: 依据绑订名称找到绑订值,如果找不到对应的值,返回null。
Object request.getAttribute(String name);
解除绑订
request.removeAttribute(String name)(3)转发的特点
a,转发之后,浏览器地址栏的地址不变。
b,转发的目的地必须是同一个应用内部某个
web组件的地址。
Ajax
1、ajax是什么?(asynchronous javascript and xml 异步的javascript 和xml)
ajax是一种用来改善用户体验的技术,其实质是
利用浏览器提供的一个特殊的对象(XMLHttpRequest 对象,一般称之为ajax对象)异步地(当ajax对象向
服务器发请求时,浏览器不会销毁当前页面,用户
仍然可以对当前页面做其它的操作)向服务器发送请求。服务器返回的数据不再是一个完整的新的页面,而是部分数据,利用这些数据,更新当前页面。整个
过程,页面无刷新,不打断用户的操作。
2、如何获得ajax对象?
XMLHttpRequest没有标准化,要区分浏览器。
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){
} //非ie浏览器
xhr = new XMLHttpRequest();}else{ //ie浏览器
xhr = new ActiveXObject('MicroSoft.XMLHttp');} return xhr;
4、编程步骤
step1,获得ajax对象。
比如:
var xhr = getXhr();
step2,使用ajax对象发请求。
1)发送get请求
xhr.open('get', 'check_username.do?username=tom',true);xhr.onreadystatechange=f1;xhr.send(null);注意:
true:发送异步请求(ajax对象发请求时,浏览器不会销毁当前页面,用户仍然可以
做其它操作)。
false:发送同步请求(ajax对象发请求时,浏览器不会销毁当前页面,浏览器会锁定
当前页面,用户不能操作当前页面)。step3,编写服务器端的处理代码,一般不再需要返回
一个完整的页面,只需要返回部分数据。step4,编写事件处理函数
function f1(){
if(xhr.readyState == 4){
var txt = xhr.responseText;
更新当前页面
}
} jQuery
1、jQuery介绍 www.xiexiebang.com
(1)特点
利用选择器查找要操作的节点,并且会将这些节点
封装成一个jQuery对象。通过调用jQuery对象的属性
或者方法来实现对底层节点的操作,这样做的好处有
两个:一是兼容性更好了,另外,代码得到简化。
(2)编程步骤
step1,使用jQuery选择器查找要操作的节点。
step2,调用jQuery对象的方法或者属性。
(3)一个简单例子 first.html(4)jQuery对象与dom对象如何相互转换?
1)dom对象---> jQuery对象
$(dom对象)
2)jQuery对象---> dom对象
2、选择器
(1)选择器是什么?
jQuery借鉴了css选择器的语法,用来查找要操作的节点。
(2)基本选择器
selector / s1.html
#id
.class
element
select1,select2..selectn
*(3)层次选择器
selector / s2.html
select1 select2:查找所有的后代
select1>select2:只查找子节点
select1+select2:下一个兄弟
select1~select2:下面所有兄弟
(4)过滤选择器
1)基本过滤选择器
selector / s3.html
:first
:last
:not(select)排除满足select要求的节点 :even :odd :eq(index):gt(index):lt(index)2)内容过滤选择器
selector / s4.html :contains(text)匹配包含给定文本的元素
:empty 匹配所有不包含子元素或者文本的空元素
:has(select)匹配含有选择器所匹配的元素的元素
:parent 匹配含有子元素或者文本的元素 3)可见性过滤选择器 selector / s5.html :hidden 匹配所有不可见元素,或者type为hidden的元素
:visible 匹配所有的可见元素 4)属性过滤选择器 selector / s6.html [attribute] [attribute=value] [attribute!=value] 5)子元素过滤选择器
selector / s7.html :nth-child(index/even/odd)
注意: 下标从1开始。
6)表单对象属性过滤选择器 selector / s8.html
:enabled
:disabled
:checked
:selected(5)表单选择器
:input :text
:pasword :radio :checkbox :submit :image :reset :button :file :hidden
3、dom 1)查询
dom / d1.html
找到节点之后,可以读取或者修改节点的html内容,文本,值,属性。
a, html()读取或者修改节点的html内容
b, text()读取或者修改节点的文本内容
c, val()
读取或者修改节点的值
d, attr()读取或者修改节点的属性
2)创建
dom / d2.html
$(html);3)插入节点
append():作为最后一个孩子添加进来。
prepend():作为第一个孩子添加进来。
after():作为下一个兄弟
before():作为上一个兄弟 4)删除节点
dom / d3.html remove()remove(selector)empty():清空节点
5)数据与行为分离 dom / d4.html d5.html 即不用修改html文件,通过引入外部的js文件来 为页面提供动态效果。
$(fn);fn是一个函数的名称
或者
$(function(){
//当整个页面加载完毕,会执行这儿的代码。
});6)复制节点 dom / d6.html clone()clone(true):使复制的节点也具有行为(将事件
处理代码一块复制)7)属性操作
读取:attr('id');设置: attr('id','d1')或者一次
设置多个 attr({”id“:”d1“,”class“:”s1“});删除:removeAttr('id')8)样式操作 dom / d7.html 获取和设置: attr(”class“,”“)attr(”style“,”“)追加:addClass('')移除:removeClass('')
或者removeClass('s1 s2')
或者removeClass()//会删除所有样式
切换样式:toggleClass,有该样式,就删除,没有,就添加。
是否有某个样式 hasClass('')读取css('')设置css('','')或者
css({'':'','':''})//设置多个样式 9)遍历节点 dom / d8.html children()/children(select):只考虑子元素,不考虑其它后代元素。
next()/next(select):下一个兄弟
prev()/prev(select):上一个兄弟
siblings()/siblings(select):其它兄弟
find(select):从当前节点向下查找所有的后代
(满足select要求的)parent():父节点
struts
1、什么是Struts? Struts是基于MVC的轻量级框架,主要处理请求分发的问题,重心在控制层和表现层。
--基于MVC:实现了MVC,满足MVC的设计思想。
--轻量:侵入性低,是我们业务代码对框架的依赖程度很小,既很少需要import Struts包。
--框架:基础的代码,引入之后可以减少我们的开发工作量,提高开发效率。
2、为什么用Struts? 1)对比Servlet
--Servlet优缺点
优点:直接、效率高
缺点:业务代码耦合度高,不便于维护
--Struts优缺点
优点:将业务代码解藕,便于维护
缺点:效率低
--Servlet中的MVC与Struts中的MVC,参考图理解
2)对比其他框架
--健壮性(4*):稳定程度
--易用性(4*):好学、好用
--扩展性(5*):就软件未来而言,将来有更复杂的需求时,是否有处理方式。
--侵入性(4*):与依赖性/耦合度成正比
3、Struts发展史
1)Struts1,结构简单、易用,由Apache推出。
与Servlet/JSP耦合紧密,导致发展受限。
2)WebWork,技术先进,核心是XWork。
3)Struts2,基于XWork,在此基础上发展形成。
面试题:Struts1和Struts2的区别和联系?
--Struts2与Struts1差别很大,不能理解为Struts1
的升级版本。
--Struts2以XWork为核心,可以理解为WebWork
的升级版本。
*
4、Struts2使用步骤,HelloWorld--使用版本Struts2.1.8 1)创建web项目
2)导包
3)配置前端控制器(filter)
--在web.xml中配置filter
--控制请求分发的控制器
4)创建struts.xml--放在src根路径
--名称必须是struts.xml 5)*创建Action--控制业务流程的控制器 6)*创建JSP 7)*配置struts.xml--体现请求和Action的关系
--体现Action和JSP的关系
*
5、扩展HelloWorld 目标:掌握Action与JSP页面数据交换的方式。
1)Action如何向页面发送数据?
--通过EL表达式
2)*Action如何从页面接收数据?
--注入:调用JavaBean的set方法,为其属性赋值的行为称之为注入。
*a、基础属性注入
--Action中定义基本类型的属性,给它set方法
--表单中,文本框的name=”属性名“
--表单提交时,Struts2会自动将表单的内容,传递给Action里的属性。
--Struts2会自动初始化属性
--注意:Action跳转的页面,EL表达式${属性名}
*b、域模型注入
--Action中定义JavaBean类型的属性,给他set方法
--表单中,文本框的name=”对象名.属性名“
--表单提交时,Struts2会自动将表单的内容,传递给Action里定义的对象
--Struts2会自动的初始化对象
--注意:Action跳转的页面,EL表达式${对象名.属性名}
c、模型驱动注入(了解即可)
--需要Action实现接口ModelDriven
*
6、使用Struts2实现NetCTOSS中的资费列表
--准备:分析需求、了解表结构、建表
1)创建web项目
2)导包
3)前端控制器(filter)4)创建struts.xml 5)创建Action
-->filter->struts.xml->Action
-->DAO-->DBUtil,Entity a、Entity b、DBUtil c、DAO d、Action 6)JSP 7)配置struts.xml Hibernate
1、什么是Hibernate 1)Hibernate是数据访问层的框架,对JDBC进行了
封装,是针对数据访问层的面向对象的解决方案。
2)Hibernate允许我们直接访问对象,然后将访问
自动转化为SQL去执行,从而达到间接访问数据库
的目的,简化代码开发,提升开发效率。
2、为什么使用Hibernate 1)使用JDBC开发出现的问题
--需要在代码中写大量的SQL
--需要给大量的?赋值
--需要将结果集转换为实体对象
--在SQL中可能会写数据库特定的函数,移植性差。
2)使用Hibernate可以解决上面的问题
--基本上不需要写SQL,因为Hibernate可以
自动生成SQL并执行
--可以自动给?赋值
--可以自动将结果集转换为实体对象
--Hibernate提供通用的API来访问不同的数据库,移植性好。
3)补充JDBC与Hibernate的优缺点
a、JDBC优点:
效率高
b、Hibernate缺点:
效率相对于JDBC要低
*
3、Hibernate的设计原理
1)Hibernate是采用了ORM的思想,对JDBC进行的 封装。
2)ORM:Object Relation Mapping,即对象关系
映射,指的是Java对象和关系数据库的映射。
--之前使用JDBC开发时,需要知道数据库表和实体
对象的关系,以及字段和对象属性的关系,比如
需要知道COST表和Cost对象的关系。那么这种 关系我们之前是手动维护的,比如: cost.setName(rs.getString(”name“));ps.setString(2,cost.getName());--ORM思想是希望将这种关系的维护提炼出来,用一个公共的组件描述,那么在我们访问数据库
时,需要使用这种关系时,可以复用基于ORM 思想提炼出来的关系
--正是由于存在这样通用关系的描述,Hibernate 才可以让我们直接访问Java对象,从而通过
关系转换成SQL自动执行。
--Hibernate中将这种关系定义在XML配置文件中。
4、Hibernate体系结构
1)hibernate.cfg.xml
是Hibernate的主配置文件,用于配置数据库连接
参数,以及Hibernate框架参数。
2)实体类
是Java类型,用于封装表中的数据
3)xxx.hbm.xml
是关系映射文件,用于配置表与实体类的关系,以及表中字段与类中属性的关系。
4)Hibernate底层API
主要是用于解析主配置文件,以及关系映射文件,然后根据关系自动生成SQL并执行。
5、Hibernate常用API 1)Configuration
用于解析主配置文件的2)SessionFactory
用于创建Session的3)Session
是数据库连接会话,相当于是数据库连接。
注意:此Session和HttpSession没有任何关系。
4)Transaction
用于控制事务
5)Query
用于做特殊查询
*
6、Hibernate使用步骤
1)导包
2)引入主配置文件hibernate.cfg.xml 3)创建实体类Emp 4)*创建关系映射文件Emp.hbm.xml
--该配置文件必须和实体类同名
--该配置文件必须和实体类位于同一个包下
--在主配置文件中引入该关系映射文件
5)使用Hibernate的API,来进行增、删、改、查
Spring 1.什么是Spring,有什么作用
Spring框架属于一个解决方案框架 可以对其他技术和框架进行整合 应用。
*好处是:将程序中的各个组件和 框架技术进行解耦,便于日后系统 维护,升级和扩展操作。
在SSH中,会将Action,DAO组件都 交给Spring框架管理,由Spring 框架创建这些对象,建立这些对象 关联。
*2.Spring都含有哪些功能
--可以创建和管理程序组件对象
(相当于工厂的作用)--提供了IoC机制实现组件对象关系的解耦
--提供了AoP机制实现共通组件低耦合的调用。
(例如事务处理)--提供了对其他技术,例如JDBC,Hibernate,Struts等框架整合API--提供了一个Spring MVC框架实现
*3.Spring基本使用
1)创建和管理程序组件对象
--引入Spring IOC开发包
--在src下添加Spring配置文件
--将Bean组件定义到Spring配置
文件中
--(编码)实例化Spring容器对象
利用getBean获取Bean对象实例
*a.控制Bean对象创建模式
在使用时,可以在
scope=”singleton“表示单例模式(默认值)scope=”prototype“表示原型模式,每次调用getBean都返回一个新的 Bean对象。
b.控制Bean对象创建时机
scope=”singleton“时,Bean对象 是在容器实例化时创建。
在
scope=”prototype“时,Bean对象 是在getBean方法时创建。
c.追加初始化和销毁方法
在
同理destroy-method=”mydestroy“ 在容器销毁时,也释放单例的Bean 对象,此时会自动调用mydesctory 方法。(该属性仅适用于singleton 模式的Bean对象)
2)Spring的核心IoC容器
a.IoC概念
Inversion of Control 控制反转 或反向控制(控制转移)
2004 Martin fowler提出的IoC思想.IoC思想:两个组件之间调用(例如A调用B)原有方式是A负责创建B对象;现在变成了 B对象由第三方框架或容器负责实例化,然后给A对象注入。即A对象获取B对象的 方式发生了反转。
IoC技术方案有两种:依赖注入和依赖查找 Spring采用依赖注入技术实现IoC控制。依赖技术主要以下两种方式:--set方式注入(推荐)在A中定义setB(B b),接收传进来的B对象--构造方式注入 在A中定义构造方法 public A(B b){}
DI:Dependency Injection依赖注入
b.IoC使用方法
--编写Action,定义到Spring配置中
--编写DAO,定义到Spring配置中
--在Action中定义DAO接口类型变量和
setter方法
--在Action的
配置
ref=”要注入的Bean对象id值">