以前开始学SSH的时候是根据马士兵的视频学的,当时由于急功近利,就稀里糊涂的将视频看了一下,看的时候根据马老师的操作配了一次环境,当时由于刚刚开始结束SSH框架,什么都不懂。按照马老师配的环境配了一次之后就没自己动手配过,用当时配的环境写了一个小程序然后就不了了之了。当时也感觉倒入的jar包挺乱的,不知道到底应该倒入哪些包,或者不应该倒入哪些包,有的时候倒入之后会起很多的冲突,想必这些应该都是初学者迷茫之处。最近由于做毕业设计,想重新把环境搭建起来,保留着以后备用。本来想用以前的那个框架,回头一想太老了吧,就想用最近官方发布的struts2.3.14+spring3.1.1+hibernate4.1.0将环境搭建起来。开始的时候也参考了很多的文章,也将别人搭建好的框架下在下来进行运行,根据大牛们的文章和自己的想法才将环境搭建起来。下面我将搭建环境的步骤重新记录下来供大家参考,有不对的地方请大家多多指出,共同进步!!!
一、搭建环境时所必须的jar包(这些东西都是我从官方下载下来的,大家可以直接拿来用)
二、环境搭建
2、程序中所使用到的jar包
三、环境的详细搭建
1、首先咱们先把框架中所需导入的包以及包的位置给大家详解一下
a、导入struts的包
将下载下来的struts-2.3.14.zip进行解压,解压后进入apps文件夹,里面有几个不同的war包,这个是可以用winrar打开的,
找到struts2-rest-showcase.war包,然后用winrar打开,找到\WEB-INF\lib目录文件夹,里面含有一部分jar包,将其导入,其中有个commons-lang-2.4.jar包是重复的,两个包用一个就可以了,将commons-lang-2.4.jar删除,将其余的包复制到自己新建的web项目中的\WEB-INF\lib目录下,需要导入的struts包入下图所示
此外还需要导入一个使struts和spring相结合的包,具体的位置如下图所示
再次还需要导入aopalliance-1.0.jar。起初我认为这个包是hibernate的东西,后来查了一下,这个包原来在struts中,具体的位置如下图所示
struts包倒入完毕。
b、导入hibernate4.1.0的包,
打开hibernate-release-4.1.0.Final.zip,找到hibernate-release-4.1.0.Final.zip\hibernate-release-4.1.0.Final\lib目录,下面有个required文件夹,将其中的包复制到自己新建的web项目中的\WEB-INF\lib。具体的包的名称如下图所示
导入这些包之后会发现其中有两个名称相同commons-collections包,就是版本不一样,由于struts和hibernate运行时都需要此包,所以咱们在分别导入包的时候就导入了两次,把版本较低的那个包删除即可,即删除commons-collections-3.1.jar。同时javassist包也是重复的,将多余的那个包删除即可,删除版本较低的即javassist-3.11.0.GA.jar。
由于此系统用到的连接池是c3p0的连接池,所以还需要加入c3p0的包,具体包的位置如下图所示
继续导入hibernate-entitymanager-4.1.0.Final.jar 具体位置如下图所示
c、导入spring3.1.1的包
在导入spring的包的时候,其中有些包从名称上看一下,然后百度一下就能知道包的作用是什么,当时我导入spring包的时候是参考的别人配的环境,所以有些包的作用是什么我也不知道,大家只要把下面的包导入之后就肯定没问题。具体导入的包入下图所示,框起来的包必须导入(只是以我的经验来看,可能有些包始没用的)
d、导入slf4j的包,
其中主要用的是log4j,但是是用log4j的时候需要slf4j的支持,所以先导入slf4j的包,具体需要导入的包入下图所示
在设计原则中有这样一句话“我们应该针对接口编程,而不是正对实现编程”。但是我们还是在一直使用new关键字来创建一个对象,这不就是在针对实现编程么?
针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。入股代码是针对接口而写,那么可以通过多态,它可以与任何新类实现该接口。但是,当代码使用一大堆的具体类时,等于是自找麻烦,因为一旦加入新的具体类,就必须要改变代码。在这里我们希望能够调用一个简单的方法,我传递一个参数过去,就可以返回给我一个相应的具体对象,这个时候我们就可以使用简单工厂模式。
一、基本定义
简单工厂模式又称之为静态工厂方法,属于创建型模式。在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例。简单工厂模式定义了一个类,这个类专门用于创建其他类的实例,这些被创建的类都有一个共同的父类。
二、模式结构
模式结构图如下:
模式分析:
Factory:工厂角色。专门用于创建实例类的工厂,提供一个方法,该方法根据传递的参数不同返回不同类的具体实例。
Product:抽象产品角色。为所有产品的父类。
ConcreteProduct:具体的产品角色。
简单工厂模式将对象的创建和对象本身业务处理分离了,可以降低系统的耦合度,使得两者修改起来都相对容易些。当以后实现改变时,只需要修改工厂类即可。
三、简单工厂模式实现
模式场景:在一个披萨店中,要根据不同客户的口味,生产不同的披萨,如素食披萨、希腊披萨等披萨。
该例的UML结构图如下:
代码实现
Pizza制造工厂:SimplyPizzaFactory.java
/** * 专门用于创建披萨的工厂类 */ public class SimplePizzaFactory { public Pizza createPizza(String type){ Pizza pizza = null; if(type.equals("cheese")){ pizza = new CheesePizza(); } else if(type.equals("clam")){ pizza = new ClamPizza(); } else if(type.equals("pepperoni")){ pizza = new PepperoniPizza(); } else if(type.equals("veggie")){ pizza = new VeggiePizze(); } return pizza; } }
抽象披萨:Pizza.java
/** * 抽象pizza类 */ public abstract class Pizza { public abstract void prepare(); public abstract void bake(); public abstract void cut(); public abstract void box(); }
具体披萨:CheesePizza.java
public class CheesePizza extends Pizza{ @Override public void bake() { System.out.println("bake CheesePizza ..."); } @Override public void box() { System.out.println("box CheesePizza ..."); } @Override public void cut() { System.out.println("cut CheesePizza ..."); } @Override public void prepare() { System.out.println("prepare CheesePizza ..."); } }
PizzaStore.java
public class PizzaStore { SimplePizzaFactory factory; //SimplePizzaFactory的引用 public PizzaStore(SimplePizzaFactory factory){ this.factory = factory; } public Pizza orderPizza(String type){ Pizza pizza; pizza = factory.createPizza(type); //使用工厂对象的创建方法,而不是直接new。这里不再使用具体实例化 pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }
四、简单工厂模式的优缺点
优点
1、简单工厂模式实现了对责任的分割,提供了专门的工厂类用于创建对象。
2、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
3、通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。
缺点
1、由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
将以下内容添加到maven的pom.xml中。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<components>
<component>
<name>hbm2java</name>
<outputDirectory>src/main/java/</outputDirectory>
<implementation>jdbcconfiguration</implementation>
</component>
<component>
<name>hbm2hbmxml</name>
<outputDirectory>src/main/resources/</outputDirectory>
</component>
<component>
<name>hbm2dll</name>
<outputDirectory>src/main/resources/</outputDirectory>
</component>
<component>
<name>hbm2cfgxml</name>
<outputDirectory>src/main/resources/</outputDirectory>
<implementation>jdbcconfiguration</implementation>
</component>
</components>
<componentProperties>
<drop>true</drop>
<configurationfile>/src/main/resources/hibernate.cfg.xml</configurationfile>
<packagename>com.vuclip.platform.persistence.entity</packagename>
</componentProperties>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>