SSH框架学习笔记

1、JaveEE的三层结构和MVC模式的关系:

     SSM架构:(Spring, Spring-mvc, Mybatis)

SSH框架学习笔记_第1张图片

      SSH架构:(Spring, Struts, Hibernate)

SSH框架学习笔记_第2张图片

2、Struts2框架

     (1)Struts2简介:来自Apache基金会的软件,http://struts.apache.org,Struts2与Struts1完全没有关系,Struts2的前身是WebWorks。Spring MVC\Struts2\Struts1都是MVC模式的Web框架,MVC是非常流行的用户界面设计模式。

     (2)Maven导包:struts2-core。

     (3)配置Struts2:

              <1>下载Struts2的jar包:1. 从struts.apache.org下载:解压缩、将*.jar复制到/WEB-INF/lib文件夹;2. 使用Maven下载:使用Eclipse内嵌搜索,搜索到struts2-core的坐标(xml),保存pom.xml;3. 使用maven.tedu.cn/nexus(maven.aliyun.com/nexus)在线搜索,搜索到struts2-core的坐标(xml),保存pom.xml。

              <2>配置主控制器:1. 控制器类:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter在struts-core-xxxx.jar包中;2. 编辑文件web.xml(部署描述文件);

              <3>添加struts的配置文件:1. 位置:package中(classpath中);2. 文件名:struts.xml,struts的filter会自动按照文件名struts.xml找到这个文件,文件名不能错。

      (4)创建HelloWorld项目步骤:

              <1>修改配置文件struts.xml,添加web请求的处理路径

                     

                      - namespace="/test" 表示处理一级路径 /test

                     class="com.tedu.HelloAction">

                      - name="hello"处理二级路径 /test/hello.action

                      - class="com.tedu.HelloAction" 在处理请求时候执行HelloAction的execute()方法,execute方法一定有String返回值,常见的值有“success”"error"

                     /WEB-INF/msg.jsp

                      - 与action方法的返回值配合,表示返回“success”时候,转发到msg.jsp页面,msg.jsp 作为用户看的视图。

              <2>添加类com.tedu.HelloAction

                     - 包含String execute()

                     - 方法中 return "success"

              <3>添加 /WEB-INF/msg.jsp

              <4>将项目部署到Tomcat上

      (5)由控制器向页面传递消息:

              <1>在控制器中添加属性,并且为属性添加get方法;

              <2>在控制器方法中向属性赋值;

              <3>在JSP页面上使用EL表达式读取属性值;EL表达式实际上执行属性的get方法,如果没有get方法就无法获取属性值。

      (6)从页面向控制器传递值:

              有两种方式:

              <1>基本属性传递方式

                     1. 在控制器中声明与html表单项name属性一致的Bean属性;

                     2. 添加Bean属性的getxxx setxxx方法;

                     3. Struts会在接受请求的时候,自动将表单属性值注入到Bean属性中。

              <2>域模型属性传递方式

                     利用域模型打包传递表单数据,优点:

                     1. 可以便捷的处理表单输入;

                     2. 特别是在表单被项目重用的时候,显得更加方便。

                      步骤:

                     1. 创建域模型对象  User,添加属性id和pwd,添加bean属性访问方法;

                     2. 在控制器中添加User属性user和get set方法;

                     3. 在表单中的输入项目name属性值为user.id;

        (7)如何获取session对象:

               <1>通过工厂方法获取session对象

               <2>利用注入获得session对象

               <1>通过工厂方法获取session对象

                      Struts提供了ActionContext对象,这个对象可以获取session,并且访问session。Struts2为了降低耦合性,将HttpSession封装在Map中,调用Map的put方法就可以将数据保存到session中。

               <2>利用注入获得session对象

                      使用ActionContext对象获取Session对象,其缺点是将代码与ActionContext对象耦合在一起,耦合度增加了。为了减少耦合,Struts2提供了Session注入方式。

               不仅仅Spring提供了注入功能,Struts2也利用注入方式工作。这里的Session就是注入得到,还可以注入Request对象。注入的好处是彻底实现了松耦合代码。

               步骤:

               1. 在Action类上实现SessionAware接口

                   class Login2Action implements SessionAware

               2. 在Action类中添加Session属性,和属性访问方法

                   private Map session;

                   public void setSession(Map session){

                            this.session = session;

                   }

               3. 在execute方法中就可以利用session属性访问session了

                   session.put("loginUser", user);

        Filter在容器一启动就会创建,Servlet在第一次访问的时候创建,如果在web.xml中加入,则在容器启动的时候创建,Filter和Servlet创建时都调用init方法,可以在init方法里测试什么时候创建。

3、  UTF-8可以编码10万以上的文字,包括大多数现存的文字,一个中文编码为3个字节;GBK只可以处理中英文,包括2万文字,一个中文编码为2个字节。response.setCharacterEncoding("utf-8");设置服务器端编码方案,response.setContentType("text/html; charset=UTF-8");设置客户端解码方案。

4、Spring整合Struts2

      (1)导包:struts2-core 2.3.8、struts2-spring-plugin 2.3.8、struts2-json-plugin

      (2)Struts2提供了Spring整合插件struts2-spring-plugin.jar,只要将这个插件添加到/WEB-INF/lib文件夹中,就会自动将spring整合到struts2。整合以后Struts2的Action对象将由Spring容器创建。

      (3)手工整合:1. 分别到Spring和Struts2网站下载jar包;2. 将jar包复制到/WEB-INF/lib文件夹中;3. 修改web.xml文件添加Spring容器初始化监听器; 4. 添加Spring配置文件。

               利用Maven整合:1. 创建Maven项目,导入Struts2组件,并且配置struts.xml和web.xml; 2.找到struts2-spring组件坐标添加到Struts2项目的pom.xml,插件版本与Struts2的版本必须一致。maven会自动导入插件依赖的Spring包,这是Maven最便捷的特点。

5、(1)dispatcher:转发;

      (2)redirectAction:重定向到其他Action;

      (3)stream:用于处理图片或者下载;

      (4)json:用于处理ajax请求。

      转发类型是在Struts的主配置文件中定义struts-default.xml;json:在struts2-json-plugin插件中定义。

      dispatcher:是默认的Result,也是最常用的类型。

      redirectAction:重定向到其他Action,用于处理重定向结果。org.apache.struts2.dispatcher.ServletActionRedirectResult

      stream:用于处理图片或者下载。org.apache.struts2.dispatcher.StreamResult

      json:用于处理ajax请求。json不是struts默认的result类型,需要使用一个插件来支持这个类型。org.apache.struts2.json.JSONResult

                 有两种使用方式:(1)将Action的全部属性发送到客户端;

                                             (2)将Action的一个属性发送到客户端。

                 json返回结果必须使用struts2-json-plugin插件支持,必须先导入json插件。

6、struts2也提供了拦截器功能,struts2的许多默认功能也是通过其内部的拦截器实现的。

7、值栈ValueStack

      (1)从控制器向页面传值的缓冲区;

      (2)ValueStack包含当前环境相关的全部对象: request、session、application等;

      (3)ValueStack包含两个区域:一个区域是root,是一个List,存储值,一个区域是context,是一个Map,存储环境相关的全部对象;

      在Struts2中ValueStack是软件的消息中心,软件的数据和相关环境信息都缓存在这个对象中,其作用与JSP中的pageContext类似,pageContext是JSP中的消息中心。

      JSP页面中使用标签可以展示ValueStack

8、OGNL表达式

      OGNL可以在网页struts标签中使用,在struts2中用于读写ValueStack的数据。

      (1)读取root区域数据:从栈顶到栈底逐一搜索Bean属性,找到属性就输出;

      (2)读写context区域使用#key的方式查找:#session.loginName。

      OGNL与ValueStack配合可以从控制器向页面传递数据。

      ValueStack与EL

      Struts2中拦截了EL表达式,使其从ValueStack中获取数据,也就是说使用EL就可以很好的访问ValueStack。

9、Spring整合Struts2、Mybatis

      导包:struts2-core、struts2-spring-plugin、struts2-json-plugin、mybatis、mybatis-spring 1.2.3、dbcp 1.4、mysql 5.1.36、aspectjweaver、spring-aop、aopalliance、codec、junit。

10、Hibernate(冬眠)

      导包:hibernate-core 3.6.9、mysql。

      由于是开源软件,其包的依赖关系不够完善,有的Hibernate导入以后会出现ClassNotFound异常,可以更换其他版本。

      其想法是将java的实体对象映射存储到数据库的表中,只需要将实体与表的映射关系定义好,Hibernate会自动的生成数据库的SQL语句。

      Hibernate称为ORM(对象关系映射)框架,是一种不需要写SQL的框架。

      使用步骤:

      (1)导入Hibernate相关包;

      (2)导入数据库的驱动程序;

      (3)添加Hibernate主配置文件;

      (4)添加Hibernate映射配置文件;

      (5)添加实体类,建议实体类实现equals和hashCode方法,使用Eclipse生成即可。

      (6)调用Hibernate API就可以自动生成SQL访问数据库了。

11、Hibernate

      (1)主键类型:

               利用支持主键生成策略

               <1>自增类型identity

                      语法:

                      添加用户时,hibernate就是利用自增ID为Student生成ID,并读取到实体对象中。自增列不能插入数据,必须由数据库自动生成ID。

               <2>sequence序列

                      Oracle、DB2等数据库提供了Sequence,用于生成ID,语法:

                     

                                seq_name

                     

                      只有Oracle、DB2数据库支持,seq_name是Sequence对象的名称。

                <3>UUID

                       Hibernate会自动调用UUID算法生成ID。语法:

                       

      (2)被Hibernate管理的实体对象有三种状态:

               <1>临时状态:刚刚创建的对象,或者被删除的对象,数据库中没有对应的记录,这是对象的状态为临时状态。调用了save或者saveOrUpdate方法以后,对象将被保存到数据库中,对象状态将转换为持久状态。

               <2>持久状态:保存以后的对象或者从数据库中获取的对象,其状态是持久状态,持久状态下改变对象的数据,将生成相应的sql语句,将对象的状态保存到数据库中。

               <3>游离状态:对象被从Session的缓存中清理出来,对象状态变成游离状态,游离状态对象脱离数据库的联系,更改对象的属性,不再影响数据库。如果需要将游离状态的对象数据更新到数据库,可以调用update方法,update方法执行以后,对象又还原回持久状态,并且将已经更改的属性更新到数据库。

      (3)HQL查询

               (Hibernate Query Language)Hibernate提供一种新的查询语言,与SQL类似,但是与数据库无关。与SQL相近的语法,from类名,where条件,group by...,having...,select...,order by...。

              HQL与SQL不同点:

              (1)HQL面向对象,按照类名属性进行查询,SQL按照表、列进行查询;

              (2)HQL不支持select *,省略就是select *,直接from;

              (3)HQL不支持函数,可以有分组函数;

              (4)HQL不支持join on。

              使用HQL:

              (1)打开session;

              (2)创建Query对象;

              (3)使用Query对象执行HQL,返回集合;

              (4)关闭Session。

      (4)关联关系

               在数据库中表与表有关联关系,反应到实体类上就体现了引用关系。

      (5)Hibernate的懒惰(lazy)加载现象:

               尽可能晚的情况下加载数据库的数据到内存对象,使用延迟加载可以提高软件性能。

               在映射文件上使用lazy="false"可以关闭延迟加载功能,在软件中使用OpenSessionInViewFilter功能,可以在视图层使用延迟加载功能。

12、Spring与Hibernate整合

      整合的目的:将Hibernate的对象交给Spring容器,由Spring容器进行管理。

      整合步骤: 

      (1)导入Hibernate(导入数据库驱动,数据库连接池(实现DataSource的类,dbcp,c3p0));分别导入Hibernate、JDBC Driver以及连接池c3p0,连接池可以用dbcp,c3p0或阿里的druid;

      (2)导入Spring;

      (3)导入Spring-ORM,是Spring整合Hibernate的扩展插件,这个插件是Spring提供的,用于在Spring中整合支持Hibernate;

      (4)配置Spring:配置数据源(连接池),配置Hibernate SessionFactory(把Hibernate的参数配置进去),配置事务管理,配置HibernateTemplate(封装了Hibernate提供的CRUD方法);

               利用事务管理器,就可以将Hibernate的事务托管到Spring,利用Spring提供的注解就可以管理事务的开启提交和关闭,可以大大简化编码。

      (5)编写数据访问层(DAO)接口;

      (6)实现DAO:利用Spring注解注入HibernateTemplate对象,就可以非常便捷的实现DAO接口,HibernateTemplate封装了Hibernate提供的CRUD功能

      导包:hibernate-core 3.6.9、mysql 5.1.36、c3p0 0.9.1、druid(com.alibaba)1.0.16、spring-core 3.0.5、spring-orm 3.0.5、struts2-core 2.3.24、struts2-spring-plugin 2.3.24、struts2-json-plugin 2.3.24。

      ClassNotFoundException一般是缺少包,MethodNotFoundException一般是导的包版本不对。


你可能感兴趣的:(J2EE)