Java框架学习笔记

Java框架学习笔记
Java框架学习笔记

开发基于 Struts/Hibernate/Spring/Ajax 的网上信息发布平台
第一章:框架技术概述 ........................................................................................................................................... 1 第二章:Struts 原理(一) ..................................................................................................................................... 1 第三章:Struts 原理(二) ..................................................................................................................................... 4 第四章:Struts 标签库 ............................................................................................................................................. 5 第五章:使用 Hibernate 完成对象持久化 .............................................................................................................. 6 第六章:Hibernate 的关系映射............................................................................................................................... 9 第七章:Hibernate 查询........................................................................................................................................... 9 第八章:使用 Spring 管理对象 ............................................................................................................................. 13 第九章:Spring 与 Sturts、Hibernate 的集成 ....................................................................................................... 15
第一章: 第一章:框架技术概述
1.SSH:即 Struts+Spring+HiberNate. 2.DWR: 一个 Ajax 框架 3.三层结构的命名规则 层 表示层 业务逻辑层 数据访问层 实体对象 Java 中的命名规则 包括 JSP 页面和对应的后台 Servlet(或 Struts 的 ActionBean 和 FormBean 代码) ,放在 Web 包下 放在 biz 包下,类名(或接口名)后缀为 Biz。 放在 dao 包下,类名后缀为 DAO 放在 entity 包下 命名空间后缀为 BLL 命名空间后缀为 DAL 命名空间后缀为 Models .Net 中的命名规则
第二章: 原理( 第二章:Struts 原理(一)
1.基于 Struts 开发的应用由 3 类组件构成:控制器组件、模型组件和视图组件 控制器组件:包括一个 ActionServlet,是 Struts 的核心控制器,还包括自定义的 Action 类(代表用户的一 控制器组件 个操作,比如登录或注册) ,自定义的 Action 类继承自 Struts 提供的 org.aptech.struts.action.Action。 模型组件:并不由 Struts 提供,一般由普通的接口和 JavaBean 充当。需要我们自己编码实现。 模型组件 视图组件:一般由 JSP 实现,还包括自定义的 ActionForm 类和 Struts 标签。自定义的 ActionForm 类用于 视图组件 封装 request 中的数据。Struts 可以将 request 中的数据自动填充到 ActionForm 类中。自定义的 ActionFrom 类继承自 org.aptech.struts.action.ActionForm.. ActionServlet 在系统启动的时候加载 struts-config.xml 配置文件。该文件包含与 Action、ActionForm、页面 转向等相关的配置。 2.添加到项目中的步骤 (1)将 Struts 添加到项目中(将 lib 目录下的库文件添加到项目,其中 jar 文件复制到/WEB-INF/lib 下,其他 文件复制到/WEB-INF 下)

(2)在/WEB-INF 下创建 structs-config.xml(内容见后面) (3)在 Web.xml 中正确配置 ActionServlet。配置如下: (Struts 支持多个配置文件)
action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml 0 action *.do
注:配置访问路径时可以使用通配符,常用的有*.do, /action/*,
*.action
3.ActionForm(自定义的表单对象)继承自框架的 ActionForm 类,为提交的表单中所有字段的实体类, 其中各个属性的名字要与表单中相应控件 name 相同,以便于 Struts 自动封装到 ActionForm 中。 4.Action(自定义的动作处理对象)继承自框架的 Action 类,每个 Action 都应该重写一个 execute 方法, 方法签名如下:
public class AddAction extends Action { private Calculator biz=new Calculator(); //处理对象 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionForward af=null; AddForm addForm=(AddForm)form; //调用业务对象方法 double resultData=biz.add(addForm.getNum1(), addForm.getNum2()); request.setAttribute("resultData", resultData); //将数据模型存储到request中 af=mapping.findForward("result"); return af; } } //将请求转发逻辑名为"result"的页面 //获取表单参数
5.在 structs-config.xml 中配置 FormBean 和 Action,示例如下:



注:ActionForm(即 FormBean)的配置较简单,只需指定 name 和 type 属性。Action 配置较多,具体如下: name 属性指定关联的 ActionForm 的 name。 path 属性指定访问这个 Action 的路径,以“/”开头,注意不需要加“.do”。 type 属性指定这个 ActionBean 的类名 scope 属性定义这个 Action 对应的 ActionForm 的作用域 节点定义了该 Action 可能转发到的页面,对应每一个页面都有一个逻辑名,在 Action 代码 中,我们只允许通过逻辑名引用到将要转发到的页面,不可以直接使用物理名。 提醒:form 提交的地址依然是 add.do。从表单对象中可以取出操作数${requestScope.addForm.num1} 使用 Struts 开发步骤总结: 首先将 Struts 加入到项目中。 开发时, 首先创建对应的 ActionBean 和 FormBean, 6. 在 struts-config.xml 中进行配置,得到这个功能的框架代码;然后在 Action 的 execute 方法中编码,通过 FormBean 得到页面提交的参数, 调用业务逻辑方法 (Model 部分) 接着将业务逻辑执行结果保存在 request , 对象的 attribute 属性中,再选择返回的页面。最后调试运行是否正确。 7.Struts 运行过程,如下图: (注意,ActionServlet 采用的是转发方式,如果需要使用重定向的方式,可以 在 Action 中使用 response.sendRedirect(url)语句,并返回 null。
8.在仅仅进行页面转向时,可写一个转向的 Action,不必配置它的属性,而是在 Action 中直接 根据 ForwardForm 传递过来的 page 直接 new 出一个新的 ActionForward 对象。

第三章:Struts 原理(二) 原理(
1.DispatchAction(可完成多种业务操作) 继承自 DispatchAction 的 Action 类中不必定义 execute 方法,而是创建一些实现实际业务的方法,如 doAdd()、doSubtract()等,但这些方法的参数和返回值要和普通 Action 的 execute 方法相同。 在配置中多加一项 parameter=”operate”。operate 为客户请求中提交上来的参数。该参数应该在客户端 的隐藏域中,其 value 应该对应于相应的 DispatchAction 中的处理方法的名称。 (参数值是什么,就执行什 么方法) 在项目中一般用 Dispatch 把相关的操作组织到一起,放到一个 ActionBean 中。 2.命名规范 在 DispatchActionBean 中,方法名称的前缀也应遵循一定的规则。toXxx 表示转到 Xxx 页面,doXxx 表示执行 Xxx 操作。如转到编辑页面用 toEdit,执行编辑操作用 doEdit。 3.Struts 的错误处理机制 步骤:编辑“属性文件”;修改对应 Action 代码;在页面上显示报错信息。 (1) 在 项 目 中 增 加 一 个 ApplicationResources.properties 资 源 文 件 ( 国 际 化 可 以 再 增 加 一 个 ApplicationResources_zh_CN.properties) 。其内容如下:
#ApplicationResources.properties errors.header= errors.footer= error.validate.number=Divisor cannot be 0.
(2) 在 struts-config.xml 中配置。配置方法如下: (3) 修改 Action 代码
public ActionForward doDivide(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { CalcForm calcForm=(CalcForm)form; ActionMessages errors=new ActionMessages(); if (calcForm.getNum2()==0) errors.add("error2",new ActionMessage("error.validate.number")); if (!errors.isEmpty()) { super.saveErrors(request, errors); } double result=biz.divide(calcForm.getNum1(), calcForm.getNum2()); request.setAttribute("resultData", result); return mapping.findForward("result"); } //将错误信息保存到请求中 return mapping.findForward("input");

(4) 在页上显示报错信息
<%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %>
小技巧:可以通过设置 errors.header 和 errors.footer 来设置弹出 JS 对话框提示错误,配置如下:
#ApplicationResources.properties errors.header= error.validate.number=\u9664\u6570\u4E0D\u80FD\u4E3A0\u3002
4.DynaActionForm(动态 Form) 在 struts-config.xml 中直接定义 FormBean

使用方法:Action 中
DynaActionForm calcForm=(DynaActionForm)form; int num1=(Integer)calcForm.get("num1"); int num2=(Integer)calcForm.get("num2");
注意:此时在页面中取出 num1 的值的语法应该是${ calcDynaForm.map[“num1”]} 5.使用实体对象作为 Form 属性 在 ActionForm 中引用一个实体类对象,并提供其 getter/setter 方法,如下:
public class CalcForm extends ActionForm { private Nums nums=new Nums(); //getter/setter省略 }
在提交表单的页面中,将相应表单元素的 name 属性改为 nums.字段名,如下:
在显示结果的页面中:${calcForm.nums.num1}
第四章:Struts 标签库
常用的 Struts 标签有三类:html 标签、logic 标签、bean 标签(同 EL 一样,要先进行声明) 1. html 标签主要用来“绑定”数据。示例:


查询 不限--
注:表单中 action 与配置文件中的 path 须相同。在中,name 表示查找属性 qxList,找
到后,将 qx 设为 option 的内容,qxid 设为 option 的 value.(以上内容均可自动绑定)
2. logic 标签(用来处理业务逻辑) 当 session 中找不到 user 属性或者其值为 null 时,此内容不可见 小结:关于 name, property, scope 属性的意义? 这三个属性定义该标签如何获取自身的值,而且是组合生效的。 name 指定所用的 Bean 名称, property 指定使用的是 Bean 中的哪个属性 (省略则取 Bean 本身的值) ,scope 指定所查找 Bean 的作用域
//会先取出zfxx.uid属性的值,与value中的值作比较。相等时执行当中的代码。value可以是常量,jsp 表达式或EL表达式 [编辑][删除] 迭代标签(与类似:其中 name 类似于 items,id 类似于 var)
3. bean 标签 可对数字和日期进行格式化。

(相当于定于一个变量 dataList,取出 request 中的 list,赋值给 dataList) 后面可以在页面中使用<%=dataList.size() %> (获取一个集合中记录的数目)
共找到${count }条记录
第五章:使用 Hibernate 完成对象持久化
ORM(O/R Mapping):对象/关系映射机机制 1.使用 Hibernate 的准备:

(1)添加 jar 包(暂不配置数据库连接) (2)配置 Hibernate 配置文件(项目 src 目录下添加 hibernate.cfg.xml)


jdbc:sqlserver://localhost:1433;databaseName=HouseDB com.microsoft.sqlserver.jdbc.SQLServerDriver sa sodi org.hibernate.dialect.SQLServerDialect

true


(3)实体类和映射文件(其中实体类需要实现 Serializable 接口,且有默认构造方法),映射文件示例如下:



在映射文件中, 每个节点配置一个实体类的映射信息, 其中的 name 对应实体类的名字, table 对应数据库中相应的表名。 每个下面,有一个必须的节点,用于定义实体的标识属性,对应数据库表的主键。的 name 属性对应实体的属性名,type 对应该属性的类型。 下有两个子节点,其中为该属性对应的数据库表中名称为 name 属性值的字段。 节点用于指定主键的生成策略,常用的值有”native”和”assigned”,其中前者表示由数据库生成 主键的值,后者表示在添加新记录到数据库前由程序设定主键的值。 节点对应数据库表中的其他字段,属性与类似,只是不能包含节点。 2.使用 hibernate 持久化的代码操作步骤 步 骤 1 操作 代码 Configuration conf=new Configuration().configure(); SessionFactory sf= conf.buildSessionFactory(); Session session=sf.openSession(); Transaction tx=session.beginTransaction(); session.save(user); https://www.360docs.net/doc/603192497.html,mit(); session.close(); 与 JDBC 类比 相当于使用 DataSource 获 取 连 接 前 读 取 DataSource 的配置文件 相当于创建 DataSource 对象 相当于 JDBC获得连接 开始事务 持久化操作 提交事务 关闭连接
读取并解析配置文件 读取并解析映射信息, 创建 SessionFactory 打开 session 开始一个事务(增删改操 作必须,查询操作可选) 持久化操作 提交事务 关闭 session
2 3 4 5 6 7
3.用 Hibernate 实现数据的删改:(增删改一定要在事务环境中完成) 数据的加载:(User) user=(User)session.get(User.class, id); //即根据主键将一条数据查出来 数据的修改:先加载,再修改。如下 (User) user=(User)session.get(User.class, id); user.setUname(“新名字”); session.update(user); 数据的删除: (User) user=(User)session.get(User.class, id); session.delete(user); 4.本章重点:三个准备,七个步骤。使用 Eclipse 工具可以简化“三个准备”,提取重复代码到基类可以简 化“七个步骤”(注:实体类中字符串初始值需为 null,否则在查找时会出现找不到的情况)

第六章: 第六章:Hibernate 的关系映射
1.单向多对一关系映射(在实体类中,外键字段应该直接声明成一个主表类型的属性,如 private Qx qx;) 配置映射时该属性应写为: 其中 name 为 Jd 类的属性名,column 为映射到表 TBL_JD 中的字段名,class 为关联到的主表的类别。 2.单向一对多关系(在实体类中,Qx 类中应声明成 private Set jds=new HashSet();)(不是很常用) 映射配置: //对应 Qx 类中的 jds 属性 //对应”多”的一方的外键字段名(即 TBL_JD 中的 qxid 字段) 在配置节点时,有一个 inverse(反转)属性(可选),表示是否由对方(多的一方)管理双方的关联 关系,为 true 时由多方管理,为 false 时自己管理双方的。一般为 true。 cascade(级联)属性:主表操作时是否级联操作其子表。可选值包括:all,对所有的操作都进行级联; none,对所有的操作都不级联;save-update,执行更新操作时级联;delete,执行删除操作时级联。 3.双向一对多关系:与一对多类似,不过只有双向关联时才需要配置 inverse 和 cascade。 4.双向多对多关系:与双向一对多类似,需在一方中设置 inverse 和 cascade。 如:查看项目的开发人员和查看每个人员参予的项目。配置如下:

5.补充:关于外键关系的引用。只有在使用的时候才会查询,所以在加载所有需要的属性之前,不可以 关闭 Session(尚未有完善的思路)
第七章 第七章:Hibernate 查询
Hibernate 支持两种主要的查询方式:HQL 查询和 Criteria 查询。其中前者是重点。

Hibernate 的查询结果是直接存放在 List 中的对象,不需要再进行封装。 HQL 中没有表和字段的概念,只有类、对象和属性 1.使用 HQL 查询的步骤:得到 session——编写 HQL 语句——创建 Query 对象——执行查询,得到结果。 如下例:
Session session=super.getSession(); String hql="FROM TblZfxx"; List list=query.list(); //得到 session //编写 HQL 语句 //招待查询,得到结果
Query query=session.createQuery(hql); //创建 Query 对象
注: 上面的 HQL 语句中, TblZfxx 不是表名, 而是类名 (区分大小写) 也可以定成”com.jb.entity.TblZfxx”; , FROM 关键字不区分大小写;HQL 语句可以省略 Select 子句,TblZfxx 也可以用 as 指定别名(as 可省略), 如以上语句可以写成"Select zf FROM TblZfxx as zf",此语句表示查询所有的住房信息,以 TblZfxx 列表的 方式返回。 2.HQL 的丰富功能 HQL 的 where 子句支持的运算符有:>, <, >=, <=, <>, =, is null, and, or, not, in, between, 括号。 (1)属性查询 (只查询对象中的某几个属性, 查询数据还是保存在 List 中, 不过每行数据为一个 Object 数组) 。 示例如下:
Session session=super.getSession(); String hql="Select zf.date,zf.title FROM TblZfxx zf"; Query query=session.createQuery(hql); List list=query.list(); super.closeSession(); for (Object[] obj : list) { System.out.println(obj[0]+"\t"+obj[1]); }
(2)参数查询(条件查询,支持 where 子句、like 和”%”)(如果使用拼接时好像会出现乱码),参数查询也支 持类似于 PreparedStatement 的方式(参数下标从 0 开始)。如下:
Session session=super.getSession(); Query query=session.createQuery(hql); query.setString(0, "%房子%"); List list=query.list(); super.closeSession(); //得到session String hql="FROM TblZfxx zf where zf.title like ?";
也可以使用命名参数查询(可以增强可读性,HQL 语句中的变量名为占位符):
//根据租金范围查询房屋信息 public void testQueryByZj(int zj1,int zj2) { Session session=super.getSession(); Query query=session.createQuery(hql); query.setInteger("zj1", zj1); query.setInteger("zj2", zj2); List list=query.list(); super.closeSession(); //得到session String hql="FROM TblZfxx zf where zf.zj between :zj1 and :zj2";

printZfxxList(list); }
(3)关联查询(类似于表联接查询)
//查询某个联系人所拥有的房屋所在的街道信息 查询某个联系人所拥有的房屋所在的街道信息 public void testAssociatedQuery(String lxr) { Session session=super.getSession(); Query query=session.createQuery(hql); query.setString(0, lxr); List list=query.list(); printJdList(list); super.closeSession(); } //得到session String hql="select jd From TblJd jd,TblZfxx zf where zf.tblJd=jd and zf.lxr like ?";
(4)分页查询
//分页查询 public List search(int pageNo, int pageSize) { Session session=super.getSession(); Query query=session.createQuery(hql); query.setFirstResult((pageNo-1)*pageSize); query.setMaxResults(pageSize); List list=query.list(); super.closeSession(); return list; } //得到session String hql="FROM TblZfxx zf order by zf.zj asc";
注:query.setFirstResult(从第几条记录开始);query,setMaxResults(共返回多少条数据) (5)统计函数。包括 min(),max(),count(),avg(),sum()。 当查询结果只有一条时,我们可以用 query.uniqueResult()方法直接获得结果。如下:
String hql="select sum(zf.zj) from TblZfxx zf"; Query query=session.createQuery(hql); double count=(Double)query.uniqueResult();
综合示例:下图中,fw.lx.lxid 只有在面向对象的查询中才可以这样使用.

3.Criteria 查询 步骤:创建 Criteria 对象——用 Restrictions 对象的静态方法(like,ge,le,in 等)构造查询条件,并添加 进 Criteria 对象——通过 Criteria 的 addOrder()方法指定查询的排序方式(也支持分页查询)。 注:c.add(Restrictions.like("title", condition.getTitle(), MatchMode.ANYWHERE)); 其中第一个参数是属性名,第二个参数是属性的值,第三个参数是关键字匹配模式,可选的有 MatchMode.ANYWHERE, MatchMode.END, MatchMode.START, MatchMode.EXACT(精确查询)。如下例所 示:
//根据条件查询 public List search(TblZfxx condition) { Criteria c=super.getSession().createCriteria(TblZfxx.class); if (condition != null) { if (condition.getTitle()!=null && !condition.getTitle().trim().equals("")) { c.add(Restrictions.like("title", condition.getTitle(), MatchMode.ANYWHERE)); } if (condition.getZj1() != 0) { c.add(Restrictions.ge("zj", condition.getZj1())); } if (condition.getZj2()!=0) { c.add(Restrictions.le("zj", condition.getZj2())); } //下面的问题没有解决掉(异常:不能解析tblFwlx.fwlx)

if (condition.getFwlxs().size()>0) { c.add(Restrictions.in("tblFwlx.fwlx", condition.getFwlxs())); } } c.addOrder(Order.asc("zj")); List list=c.list(); super.closeSession(); return list; } //指定排序属性
第八章:使用 Spring 管理对象
Spring 组成部分:Spring Core,Spring AOP,Spring DAO,Spring Context,Spring Web MVC,Spring ORM, Spring Web 1.Spring 依赖注入的步骤:添加 Spring 支持——编写 Bean 配置文件——在代码中使用。 其中,配置文件如下:(另外,在定义引用时一般引用的是接口)

注:Bean 中注入 property 的地方在类中需要有相应的 setter 方法。在节点中,value 属性用于注 入基本类型的值。ref 属性用于注入已经定义好的 Bean。 在代码中引用 Bean 的方法

ApplicationContext context=new ClassPathXmlApplicationContext("di.xml"); Printer printer=(Printer)context.getBean("printer");
2.Spring AOP(面向方面编程):独立编写业务逻辑代码和方面代码,在系统运行时,再将方面代码“织入” 到系统中。 实现特定功能的方面代码在 AOP 概念中称为“通知(Advice)”,分为前置通知、后置通知、环绕通知和 异常通知。 前置通知是在方法执行之前自动执行的通知;后置通知是在方法执行之后自动执行的通知;环绕通知 能力最强,可以在方法调用前执行通知代码,可以决定是否还调用目标方法;异常通知是方法抛出异常时 自动执行的方法。 3.实现 AOP 的步骤:编写业务代码——编写方面代码(实现相应的接口)——配置 aop.xml 文件(示例 见 后 面 ) —— 将 方 面 代 码 织 入 到 业 务 对 象 中 , Spring 会 将 原 Bean 和 方 面 都 封 装 到 org.springframework.aop.framework.ProxyFactoryBean 类别中。用户使用时通过代理类访问原 Bean. 前置通知要实现 MethodBeforeAdvice 接口,该接口实现一个方法:
public void before(Method m, Object[] args, Object target) throws Throwable; “织入”代理Bean的配置文件: com.bookshop.aop.BookBiz logAdvice
注:首先定义原Bean“bookBizTarget”和“logAdvice”;定义代理类,名为“bookBiz”,我们将通过这个 Bean访问业务方法。 代理类有三个必须设置的属性:proxyInterfaces,表示被代理的接口;interceptorNames,表示织入的通 知列表;target,表示被代理的原Bean。 4.调用方法:如下:
ApplicationContext context=new ClassPathXmlApplicationContext("aop.xml");

BookBiz bookBiz=(BookBiz)context.getBean("bookBiz"); bookBiz.buy("高志水", "CMMI使用手册", 50); https://www.360docs.net/doc/603192497.html,ment("王筝", "《盗墓笔记》一点都不恐怖,很好看!");
第九章: 第九章:Spring 与 Sturts、Hibernate 的集成 、
1.Spring+Hibernate 的配置。 注入 Session 的默认配置(开发阶段使用)

“生产机配置”(部署到机器上时使用,可以使用 DataSource)
com/aptech/jb/model/entity/User.hbm.xml

com/aptech/jb/model/entity/Zfxx.hbm.xml com/aptech/jb/model/entity/Fwlx.hbm.xml com/aptech/jb/model/entity/Qx.hbm.xml com/aptech/jb/model/entity/Jd.hbm.xml org.hibernate.dialect.SQLServerDialect true
2.使用 Spring 管理依赖关系 我们的程序依赖关系是:Action==>Biz==>DAO==>SessionFactory==>DataSource,而在 Spring 中,注入的 方式向与依赖的方向相反,注入方式为:Action<==Biz<==DAO<==SessionFactory<==DataSource 3.业务逻辑层与数据访问层的衔接。 (1)把 Biz 层中直接实例化数据访问接口的代码去掉,并增加接口属生的 setter 方法,方便注入。如:
public class ZfxxBizImpl implements ZfxxBiz { private ZfxxDAO zfxxDAO; public void setZfxxDAO(ZfxxDAO zfxxDAO) { this.zfxxDAO = zfxxDAO; } public List getZfxxList(Zfxx condition) { return this.zfxxDAO.getZfxxList(condition); } }
(2)在 Spring 配置文件中定义 zfxxBiz Bean,在上面的配置文件中新加代码如下:

(3)测试代码(普通测试)
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); ZfxxBiz biz=(ZfxxBiz)context.getBean("zfxxBiz"); Zfxx cond=new Zfxx(); cond.setTitle("");

List zfxxes = biz.getZfxxList(cond); for (Zfxx zfxx : zfxxes) { System.out.println(zfxx.getTitle()+"\t\t"+zfxx.getLxr()); } System.out.println(zfxxes.size());
4.与 Struts 集成(通过 Spring 提供的 ContextLoaderPlugIn 插件实现) ,具体步骤如下: (1)在 stuts-config.xml 配置文件中增加如下代码:

注:classpath 表示到 classpath 下去找 xml 文件,如果 Spring 配置文件在/WEB-INF/下,可以这样配置 value="/WEB-INF/applicationContext.xml"。如果 Spring 配置文件有多个,则可以同时配置多个路径,各路 径之间用逗号隔开。 (2)将 struts-config.xml 中的 Action 类别都配置为“org.springframework.web.struts.DelegatingActionProxy”类 型,如下:

(3)在 Spring 配置文件中配置 ZfxxAction。 (此时的没有 id 属性了,而是 name 属性,且 name 属性的 值要与对应的 ActionBean 的 path 属性一致。。如下: )

5.一个完整的 Spring 配置文件。


com/aptech/jb/model/entity/User.hbm.xml org.hibernate.dialect.SQLServerDialect true
6.Spring1.x 的事务处理方式: (与上一章配置 logAdvice 类似) ,步骤如下: (1)声明一个事务管理器,需要注入 sessionFactory 属性。 (2)配置 AOP 代理


PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly
注释:PROPAGATION_REQUIRED,readonly(每条属性的定义方式)
其中 key 表示匹配方法的模式,可以使用通配符, “add*”表示这条属性应用于 add 开头的方法。 属性的值为 PROPAGATION_REQUIRED,表示当前方法必须运行在一个事务环境中,如果一个现有事务 正在运行中,该方法将运行在这个事务中,否则,就要开始一个新的事务。可选的值如下: PROPAGATION_MANDATORY:表示当前方法必须运行在一个事务上下文中,否则就抛出异常。 PROPAGATION_NEVER:表示当前方法不应该运行在一个事务上下文中,否则就抛出异常。 PROPAGATION_REQUIRED_NEW:表示当前方法必须运行在自己的事务里。 PROPAGATION_SUPPORTS:表示当前方法不需要事务处理环境,但如果有一个事务正在运行的话,这个 方法也可以运行在这个事务里。 出于效率的考虑,不需要更改数据的方法应配置 readOnly 启用只读事务。 7.同时配置多个类,可以采取类似于基类的方法

8.Spring2.0 中声明事物的方法(尚不理解)

JAVA三大框架测试题

框架阶段测试卷 选择题(共50题,每题2分,满分100分) 1.选出不是Restrictions方法的选项(D )。 A.eq() B.gt() C.like() D.isNULL() 2.已知系统中TBL_USER 表对应的实体类是TblUser,下列HQL 语句中正确的是 (D )。 A.from Tbl_User B.select * from tbluser C.select TblUser from TblUser D.from TblUser t where t.uname = "15" 3.阅读下面的代码,要输出查询结果中第一条记录的用户名,正确的代码是(AD )。 String hql = "select u.uname, u.upass from TblUser u"; Query query = session.createQuery(hql); A.Object[] arr = (Object[])query.list().iterator().next(); System.out.println(arr[0]); B.TblUser user = (TblUser)query.list().get(0); System.out.println(user.getUname()); C.String uname = (String)query.list().get(0).get(0); System.out.println(uname); D.String uname = (String)query.list().get(0)[0]; System.out.println(uname); 4.对下面代码中存在的错误,说法不正确的是(D)。 String hql = "from TblUser u where u.status = @status ";//<1> Query query = session.createQuery();//<2> query.setNamedParameter(":status","");//<3> return query.executeQuery(hql);//<4> A.第一行中的命名参数“@status”应该是“:status” B.第二行createQuery 函数应该传入hql 作为参数 C.第三行命名参数名称“:status”应该是“status” D.第四行应该是“return query.list(hql);” 5.下面代码的执行效果是(C )。 String hql = "from TblStudent s order by s.score asc"; Query query = session.createQuery(hql); query.setFirstResult(0); query.setMaxResults(5); return query.list(); A.返回分数最高的五个学生

Java工程师面试题(三大框架)

Java工程师(程序员)面试题 Struts,Spring,Hibernate三大框架的面试 1.Hibernate工作原理及为什么要用? 原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作6.提交事务7.关闭Session 8.关闭SesstionFactory 为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2.Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many 4.Struts1流程: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被ActionServlet接收。 3、根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。 4、是否验证,需要验证则调用ActionForm 的validate方法,验证失败则跳转到input,成功则继续。 5、Action从ActionForm获得数据,调用javabean 中的业务方法处理数据。 6、Action返回ActionForward对象,跳转到相应JSP 页面或Action。 7、返回HTTP响应到客户端浏览器。 MVC设计模式:modal:“模型”也称业务逻辑,是正真完成任务的代码,相当与JavaBeanview:视图,其实就是显示界面,相当于JSPcontroller:控制器,他控制模型和视图的交互过程,相当于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系映射 5.struts是什么? struts1是基于JSP和servlet的一个开源的Web应用框架,使用的是MVC的设计模式struts2是基于webwork技术的框架,是sun和webwork公司联手开发的一个功能非常齐全的框架,struts2和struts1没有任何关系,是一个全新的框架 6.spring是什么? spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注

Java EE开发四大常用框架

Java EE开发四大常用框架 Struts Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。 Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关: 1、模型 (Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。 2、视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面。 3、控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action 类。 4、一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean 的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。 Spring Spring是轻量级的J2EE应用程序框架。 Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案。 Spring不会特別去提出一些子框架来与现有的OpenSource框架竞争,除非它觉得所提出的框架夠新夠好,例如Spring有自己的 MVC框架方案,因为它觉得现有的MVC方案有很多可以改进的地方,但它不强迫您使用它提供的方案,您可以选用您所希望的框架来取代其子框架,例如您仍可以在Spring中整合您的Struts框架。 Spring的核心概念是IoC,IoC的抽象概念是「依赖关系的转移」,像是「高层模组不应该依赖低层模组,而是模组都必须依赖于抽象」是 IoC的一种表现,「实现必须依赖抽象,而不是抽象依赖实现」也是IoC的一种表现,「应用程序不应依赖于容器,而是容器服务于应用程序」也是IoC的一种表现。 Spring的架构性的好处 Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。如果你仅仅使用了Struts或其他的包含了J2EE特有APIs的framework,你会发现Spring关注了遗留下的问题。 Spring能消除在许多工程上对Singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。 Spring 能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc乃至源编码吗?有了Spring,你可很简单地看到类的JavaBean 属性。倒置控制的使用(在下面讨论)帮助完成这种简化。Spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。 Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。 使用Spring构建的应用程序易于单元测试。

三大主流框架的技术起源

在Java开发中,我们经常使用Struts、Hibernate和Spring三个主流框架,但你是否知道这三个框架最初是为解决怎样的问题而生的? Struts、Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用<%>符号嵌入很多的Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。 Struts 为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个Form类负责传递Action和JSP 中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行<%%>包围的Java代码了。可是所有的运算逻辑都放在Struts的Action里将使得Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。 使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。Hibernate 这时出现了Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。我的感受是,使用Hibernate比JDBC方式减少了80%的编程量。 现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的Struts需要调用一个业务类,就需要new一个业务类出来,然后使用;业务层需要调用持久层的类,也需要new 一个持久层类出来用。通过这种new的方式互相调用就是软件开发中最糟糕设计的体现。简单的说,就是调用者依赖被调用者,它们之间形成了强耦合,如果我想在其他地方复用某个类,则这个类依赖的其他类也需要包含。程序就变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。为此,出现Spring 框架。 Spring Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是所谓的依赖注射和控制反转。现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,这个结构是目前国内最流行的Java Web应用程序架构了。另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,以至于Spring自己也实现了一个使用依赖注射的MVC框架,叫做Spring MVC,同时为了很好的处理事物,Spring 集成了Hibernate,使事物管理从Hibernate的持久层提升到了业务层,使用更加方便和强大。

Java三大框架(ssh)总结

Hibernate框架 第一章数据结构 1.1认识数据结构 数据:是信息的载体,是能够被计算机识别、存储、计算的符号集合是计算机处理的对象的总称; 数据元素:也称为结点,是组成数据的基本单位; 数据项:是数据的最小单位; 数据对象:是具有相同特征的数据元素的集合,它是数据的子集; 数据结构:计算机存储、组织数据的方式; ●逻辑结构:指从逻辑关系上描述数据,与数据的存储无关,且独立于语言; ?线性结构:有且仅有一个开始结点和一个终端结点,所有结点最多只有一个前驱 结点和一个直接后继结点; ?非线性结构:指一个结点可能有多个直接前驱和直接后继结点。 ●存储结构:指数据元素及其关系在计算机存储时如何表示,依赖于语言; ●数据运算:通茶昂贵定义在数据的逻辑结构上。 1.2算法 是为求解一个问题需要遵循的,被清晰的制定的简单指令的集合;正确的算法有如下特点: ●用待处理问题的相关信息作为输入数据 ●对一个既定的合法输入,多次执行同一算法,总返回同一个结果(随机算法除外) ●算法中的指令是可行的,即每个指令都可以实现 ●算法中指令的数量是有限的 ●算法执行完毕后,能够输出正确的数据集合 1.3算法分析 目的在于选择合适的算法,算法分析是从复杂度来考虑的。复杂度:衡量一个算法好坏的重要手段; ●时间复杂度:以算法执行时间长短来衡量 ●空间复杂度:以算法执行占用的存储空间来衡量

第二章算法 第三章设计模式 3.1面向对象设计原则 单一职责原则:要求每个对象应该只有一种责任; 开闭原则:设计程序时对扩展开放,对修改关闭; 里氏替换原则:任何情况下,子类替换父类,不会影响程序运行; 依赖倒置原则:提倡高层不依赖底层,二者都依赖抽象; 接口隔离原则:把多个功能分开声明,不强迫客户实现不需要的功能; 迪米特原则:最少只是原则尽可能的降低访问级别; 组合/聚合复用原则:尽量不用继承达到复用类的目的,而是使用组合和聚合。 3.2设计模式分类 创建型模式:如何创建对象以及何时创建对象,工厂模式,单例模式 结构型模式:对象该如何组织以及采用什么样的结构更合理 行为型模式:规定了各个对象应该具备的职责以及对象间的通信模式 3.3什么是框架 应用程序骨架;框架技术的优势在于: ●不用再考虑公共问题,框架已经帮我们做好了 ●可以专心在业务逻辑上,保证核心业务逻辑的开发质量 ●结构统一,便于学习、维护 ●框架集成的前人的经验有助于写出稳健、性能优良并且结构优良的高质量程序 3.4主流框架 3.4.1 Struts框架 最早的Java开源框架之一,定义了通用的Controller(控制器),通过配置文件(一般是struts-config.xml)隔离了Model(模型)和View(视图),以Action的概念对用户请求进行了封装,是代码更清晰易读。 3.4.2 Struts2框架 新的框架特性: ●从逻辑中分离出横切关注点的拦截器 ●减少或者消除配置文件 ●贯穿整个框架的强大表达式语言 ●支持可变更和可重用的基于MVC模式的标签API

JAVA 框架 SPRING 总结

Spring是什么? Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。他提供依赖注入容器,目标是使现有的技术更加易用,促进良好的编程习惯。 Spring框架是一个分层架构,由7个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式 Spring的6大容器 1、核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 2、Spring(JEE)上下文:Spring上下文是一个配置文件,向Spring框架提供上下 文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。 3、Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集 成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。 4、Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管 理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO的面向JDBC的异常遵从通用的DAO异常层次结构。 5、Spring ORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关 系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从Spring的通用事务和DAO异常层次结构。 6、Spring Web模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web 的应用程序提供了上下文。所以,Spring框架支持与Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 7、Spring MVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。 通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI。 Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。

java框架Spring2复习题

一、选择题(每题2分,共计100分) 1.下面关于AOP的说法错误的是()。 A.AOP将散落在系统中的“方面”代码集中实现 B.AOP有助于提高系统的可维护性 C.AOP已经表现出了将要替代面向对象的趋势 D.AOP是一种设计模式,Spring提供了一种实现 2.事务隔离级别是由谁实现的?()。 A.Java应用程序 B.Hibernate C.数据库系统 D.JDBC驱动程序 标准SQL规范: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别;为了解决更新丢失,脏读,不可重读(包括虚读和幻读)等问题在标准SQL规范中,定义了4个事务隔离级别,分别为未授权读取,也称为读未提交(read uncommitted);授权读取,也称为读提交(read committed);可重复读取(repeatable read);序列化(serializable). 3.下列哪项不是Spring的依赖注入方式()。[选两项] A.setter注入 B.getter注入 C.接口注入 D.构造注入 4.在Spring框架中,面向方面编程(AOP)的目标在于( )。 A.编写程序时不用关心其依赖组件的实现 B.将程序中涉及的公用问题集中解决 C.封装JDBC访训数据库的代码,简化数据访训层的得复性代码 D.实现面面的”无刷新”

A.Spring提供了HibernateDaoSupport类来简化Hibernate的使用 B.在Spring配置文件种可以通过Spring提供的LocalSessionFactoryBean,来获得SessionFactory的实例 C.通过集成Spring和Hibernate,用Spring管理程序的依赖关系,将SessionFactory 注入到DataSource中 D.通过Spring,可以在Biz层代码中无需直接实例化DAO类,而是通过注入得到 6.依赖注入说法正确的是()。 A.依赖注入的目标是在代码之外管理程序组建间的依赖关系 B.依赖注入即是“面向接口”的编程 C.依赖注入是面向对象技术的替代品 D.依赖注入的使用会增大程序的规模 7.关于spring说法错误的是()。 A.spring是一个轻量级JAVA EE的框架集合 B.spring是“依赖注入”模式的实现 C.使用spring可以实现声明事务 D.spring提供了AOP方式的日志系统8.在Spring 中,配置Hibernate 事务管理器(Hibernate TransactionManager)时,需要 注入的属性名称是( )。 A.dataSource B.sessionFactory C.baseHibernateDao D.transactionProxyFactoryBean 9.下面()不是Spring AOP中的通知类型。 A.前置通知 B.后置通知 C.代理通知 D.异常通知

三大框架原理

ooa(object oriented analysis)面向对象分析 ood(object oriented design)面向对象设计 Oop 面向对象编程 Spring javabean的生命周期 配置初始化调用销毁 Spring 1、spring原理 2、IoC概念:控制权由对象本身转向容器:由容器根据配置文件区创建实例并创建各个实例之间依赖关系。 spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中, 程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间 的藕合度。它的原理是在applicationContext.xml加入bean标记, 在bean标记中通过class属性说明具体类名、通过property标签说明 该类的属性名、通过constructor-args说明构造子的参数。其一切都是 返射,当通过applicationContext.getBean(―id名称‖)得到一个类实例时, 就是以bean标签的类名、属性名、构造子的参数为准,通过反射实例对象, 唤起对象的set方法设置属性值、通过构造子的newInstance实例化得到对象。 正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring 的一个问题。 spring第二大作用就是aop,其机理来自于代理模式,代理模式 有三个角色分别是通用接口、代理、真实对象 代理、真实对象实现的是同一接口,将真实对象作为 代理的一个属性,向客户端公开的是代理,当客户端 调用代理的方法时,代理找到真实对象,调用真实对象 方法,在调用之前之后提供相关的服务,如事务、安全、 日志。其名词分别是代理、真实对象、装备、关切点、连接点。 2、动态代理:不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过 类实例化一个动态代理,在实例化动态代理时将真实对象 及装备注入到动态代理中,向客户端公开的是动态代理, 当客户端调用动态代理方法时,动态代理根据类的返射得

最受欢迎的Java框架介绍

最受欢迎的Java框架介绍

17个最受欢迎的Java 框架:优点、缺点 Java 依旧是最受欢迎的编程语言。这里是如今被使用最多的Java 框架第一部分。 在2018年,Java 依旧是世界上最受欢迎的编程语言。它自带一个庞大的生态和全世界超过900万的Java 开发者。虽然Java 不是最简单的语言,但是你不必从零开始写Java 程序。这里有许多杰出的Java 框架可以编写运行在Java虚拟机上的web 和手机应用程序、微服务和REST API。 Java 框架允许你聚焦于你的app的业务逻辑,而不是编写如处理数据库连接或异常处理这样的基础功 能。此外,如果你有一些Java 的经验,你可以更快的开始。这些框架都使用相同的语法并且与相似的 条件、模型和概念工作。 我们前17 的Java 框架基于直到2018年的使用情况并按字母顺序排列展示的。这里是顶级Java 框架的第一部分。 Blade:极小占用的简单应用程序框架 Blade 是一个轻量级、高性能的Java 框架,它允许你用简单的方式快速构建web 应用程序。作者希望用户再一天内了解整个框架。因此,Blade 专注于简洁和优雅。 Blade 框架遵循MVC(模型-视图-控制器)软件设计模式。它有易于理解的设计,并且不依赖其他任何 第三方库或引入太多层。Blade 基于Java 8。Netty web服务器和模板引擎也内置于框架中。它占用极小,源代码总共小于500kb。

用Blade,你可以访问RESTful 风格的路有接口并可以将你的app 作为当作基础Maven 项目部署。Blade 也内置了安全功能。例如,它带有CSRF(跨站点请求伪造)和XSS(跨站点脚本)防御。它是 一个多功能框架,因为它自带插件扩展和webjar 资源的支持。其主站的文档是中文的。但是,它在 Github repo 也有英文文档。 Dropwizard:生产级RESTful Web 服务 Dropwizard 是一个高性能且简单的用于快速开发RESTful Web 服务的Java 框架。它特别适合创建 Java 微服务。 Dropwizard 框架汇集了一些成熟的Java 库,为你提供了快速且无干扰的开发平台。它自带了一个嵌入 式Jetty 服务器、Google Guava、LogBack、Hibernate Validator、Joda Time和许多其他流行的Java 库。此外,Dropwizard 还包含可用于构建RESTful Web 服务的Jersey 和用于处理JSON 的jackson。你可以将Dropwizard 想成一个独立的生态系统,包含了上述所有依赖捆绑为一个单独的包。 如果你选择Dropwizard,你将不必花费大量时间为如配置、监控、日志的辅助功能编写代码。相反, 你可以专注于你的app 的主要业务逻辑并达到最大生产率。这就是为什么Dropwizard 经常被称为操作 友好的Java 框架。如果你之前写过Java 那么入门不会很难;Dropwizard 的文档甚至有一个简单的 Hello World 示例,它可以帮助你完成第一步。 Grails:基于Groovy 的Web 应用程序框架

整合SSH三大框架介绍

一.在MyEclipse里先建立一个Web project 的项目,选最新版本的java ee。 二.添加struts2框架支持 1.引入struts2必须得几个jar包,放在WebRoot->WEB-INF->lib 目录下。 2.将WEB应用部署到tomcat服务器上:找到tomacat的安装目录Tomcat6.x\apache-tomcat-6.0.33\conf,打开其中的server.xml文件,在文件末尾上面加入例如 这样的句子,其中path的值为你需要访问网站的上下文,docBase的值为该web项目的WebRoot所在的目录,最后一个readloadable最好选true。 3.在WebRoot->WEB-INF->web.xml中加入struts2的过滤

器将部署好的应用纳入到struts2的管辖范围类,具体代码如下 struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPre pareAndExecuteFilter struts2 /* 4.在web项目的src目录下,建一个struts.xml文件,这里是处理struts整个流程的文件。在其中加入 上面的name随便取,extends绝对不能变。 5.这样以后,启动tomcat服务器看看能不能正常启动,如果正常启动后,在浏览器上访问,http://localhost/上下文/index.jsp看能不能进入,若能进入则表示struts2的框架已经成功加到web项目中了,可以开始下一步了。

总结Java部分的框架和开源项目

文章分类: 下面我将为大家总结一下Java部分的框架和开源项目,让您从总的方面对Java部分框架有一定的了解。 Spring Framework【Java开源JEE框架】 Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的InversionofControl 容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/Rmapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVCWeb框架。【SpringIDE:Eclipse 平台下一个辅助开发插件】 WebWork【Java开源Web开发框架】 WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。WebWork目前最新版本是,现在的前身是RickardOberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNotationLanguage),IoC(InversionofControl倒置控制)容器等。WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类),session(会话)application(应用程序)范围的映射,request请求参数映射。 WebWork2支持多视图表示,视图部分可以使用JSP,Velocity,FreeMarker,JasperReports,XML等。在中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.【EclipseWork:用于WebWork 辅助开发的一个Eclipse插件】 Struts【Java开源Web开发框架】 Struts是一个基于SunJ2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签?和信息资源(messageresources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】Hibernate【Java开源持久层框架?】 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Eclipse平台下的Hibernate辅助开发工具:【HibernateSynchronizer】【MiddlegenIDE】 Quartz【Java开源调度框架】 Quartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs 可以做成标准的Java组件或EJBs。Quartz的最新版本为Quartz1.5.0。 Velocity【Java开源模板引擎】 Velocity是一个基于java的模板引擎(templateengine)。它允许任何人仅仅简单的使用模板语言(templatelanguage)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一

java web四大常用框架

Struts Struts是一个基于Sun Java EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。 Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关: 1、模型(Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。 2、视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面。 3、控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。 4、一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。 Spring Spring是轻量级的Java EE应用程序框架。 Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案。 Spring不会特別去提出一些子框架来与现有的OpenSource框架竞争,除非它觉得所提出的框架夠新夠好,例如Spring有自己的MVC框架方案,因为它觉得现有的MVC方案有很多可以改进的地方,但它不强迫您使用它提供的方案,您可以选用您所希望的框架来取代其子框架,例如您仍可以在Spring中整合您的Struts框架。 Spring的核心概念是IoC,IoC的抽象概念是「依赖关系的转移」,像是「高层模组不应该依赖低层模组,而是模组都必须依赖于抽象」是IoC的一种表现,「实现必须依赖抽象,而不是抽象依赖实现」也是IoC的一种表现,「应用程序不应依赖于容器,而是容器服务于应用程序」也是IoC的一种表现。 Spring的架构性的好处 Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。如果你仅仅使用了Struts或其他的包含了Java EE特有APIs的framework,你会发现Spring关注了遗留下的问题。 Spring能消除在许多工程上对Singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。 Spring 能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc乃至源编码吗?有了Spring,你可很简单地看到类的JavaBean 属性。倒置控制的使用(在下面讨论)帮助完成这种简化。Spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。 Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。 使用Spring构建的应用程序易于单元测试。 Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。 Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适

JAVA的三大架构

JAVA中常说的三大框架指:SSH 即:Spring、Struts、Hibernate Spring:功能强大的组件粘合济,能够将你的所有的java功能模块用配置文件的方式组合起来(还让你感觉不到spring的存在)成为一个完成的应用 Struts:不说了,大名鼎鼎的功能强大的MVC架构 Hibernate:强大的ORM工具,然后很方便将数据库记录转化为java的实体实例,将java 的实体实例很容易的保存到数据库中,如果你不需要很复杂的数据库访问,利用它你根本就不用了解数据库的细节 Java工程师(程序员)面试题 Struts,Spring,Hibernate三大框架的面试 1.Hibernate工作原理及为什么要用?原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2.Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many 4.Struts1流程: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被ActionServlet接收。 3、根据struts-config.xml配置, ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。 4、是否验证,需要验证则调用ActionForm的validate方法,验证失败则跳转到input,成功则继续。 5、Action从ActionForm获得数据,调用javabean 中的业务方法处理数据。 6、Action返回ActionForward 对象,跳转到相应JSP页面或Action。 7、返回HTTP响应到客户端浏览器。 MVC设计模式:modal:“模型”也称业务逻辑,是正真完成任务的代码,相当与JavaBeanview:视图,其实就是显示界面,相当于JSPcontroller:控制器,他控制模型和视图的交互过程,相当于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系映射 5.struts是什么?

java三大框架概述

三大框架 ·Java三大框架各自的作用是什么? struts:主要负责表示层的显示 spring:利用它的IOC和AOP来处理控制业务(负责对数据库的操作) hibernate:主要作用是数据的持久化到数据库 一、Spring Spring是一个解决了许多在J2EE开发中常见的问题的强大架。Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。光谷校区专业老师指出,Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC 容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate 和其他O/R?mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring 提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVCWeb框架。 二、Structs 说到Struts框架,它是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet 和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。 三、Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate 可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

相关文档
最新文档