在此之前,对于搭建这样一个框架很是苦恼,总是出错 ,今天,作为一个初学者,将自己实验多次的成功的步骤复原,希望能帮到需要的人
先说一下步骤流程(我认为比较快的步骤)
1、创建maven工程,并配置tomcat(看下一篇博客)
2、创建java文件夹
3、配置pom.xml
4、新建并配置applicationContext.xml和 dispatcher-servlet.xml
5、配置web.xml
6、配置jpa
一、创建java文件夹
1、在src>>main文件夹下新建一个Directory,文件名为java;然后右键点击Mark Directory as --Generated Source Root
2、在文件下创建4个包 package(domain,dao,service,controller)之前先建一个java class,类名随便起,用不到;
二、配置pom.xml
pom.xml的作用就是加载jar包的作用,把需要的jar包引用一下 (如果没有下载下来就在pom.xml页面右键点击maven-reimport自动加载jar 包)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>xyz</groupId>
<artifactId>demo124</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>demo200 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--spring jar包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.7.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.3.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>3.2.0.Final</version>
</dependency>
<!--JPA jar 包-->
<!--oracle-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<!--hibernate-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>4.3</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<!--日志jar-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>provided</scope>
</dependency>
<!--json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>jcifs</groupId>
<artifactId>jcifs</artifactId>
<version>1.3.17</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>8.0.23</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<finalName>demo124</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
</plugin>
</plugins>
</build>
</project>
三、新建并配置spring MVC 的配置文件
在第二个步骤导入jar包,在src>>main>>resource下新建两个xml文件(applicationContext.xml和 dispatcher-servlet.xml)
![]()
文件名称可以按照我的写,方便后面关系的对应
接下来配置这两个文件
先看一下我的目录结构:
![]()
先来配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> <!--初始entity实体管理器--> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="permissionPersistenceUnit"/> </bean> <!--初始transaction事务管理器--> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> <!--初始化spring JPA--> <!--注意下面的package 路径,对应目录下的dao层--> <jpa:repositories base-package="com.
geoway.test.dao" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager" repository-impl-postfix="Impl"> <!--factory-class="com.geoway.monitor.dao.BaseDaoRepositoryFactoryBean">--> </jpa:repositories> <!-- 建立视图内拦截器来解决JPA中访问延迟加载属性时产生的无会话异常 --> <!-- LazyInitializationException: could not initialize proxy no session --> <!-- 此拦截器会注入到servlet配置中的DefaultAnnotationHandlerMapping中 --> <bean name="openEntityManagerInViewInterceptor" class="org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor"> <property name="entityManagerFactory"> <ref bean="entityManagerFactory" /> </property> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <ref bean="openEntityManagerInViewInterceptor" /> </list> </property> </bean> </beans>
然后再来配置dispatcher-servlet.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!--<!– 启动包扫描功能,以便注册带有@Controller、@service、@repository、@Component等注解的类成为spring的bean –>--> <context:component-scan base-package="com.
geoway.test"/> <!--<mvc:resources mapping="/resources/**" location="/WEB-INF/pages/"></mvc:resources>--> <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <property name="favorPathExtension" value="false" /> <property name="favorParameter" value="false" /> <property name="ignoreAcceptHeader" value="false" /> <property name="mediaTypes" > <value> html=text/html json=application/json </value> </property> </bean> </beans>
四、配置web.xml,浏览器运行的时候会首先读取web.xml文件(主要是在文件里配置找到上面两个.xml文件的路径)
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- 加载spring配置文件 指定Spring Bean的配置文件所在目录 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 加载mvc servlet配置文件--> <servlet> <!--注意下面的servlet-name的名称可以自定义,但是下面的servlet-mapping标签下面的servlet-name一定要和自己定义的名称一样--> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <!--下面的servlet-name的名称mvc-dispatcher来找到上面的servlet-name名称。然后找到 dispatcher-servlet.xml文件--> <servlet-name>mvc-dispatcher </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> <display-name>Archetype Created Web Application</display-name> </web-app>
五、终于配置的差不多了,但是运行会报错(创建实体管理entityManager出错)那是因为数据库的操作没有配置好,所以耐下心来,好事情总是值得等待的~~~![]()
那我们可就来做最后一步的操作:配置JPA,生成persistence.xml的方法有两种,我先演示一下利用jpa(非本地的)生成的吧
1、点击project structure 在右上角,见图所示:
2、如下图,如果没有模块下面没有jpa就要自己新建一个,点击红色数字标注的加号,选择JPA,然后点击目录下的JPA,然后点击3处的加号,选择persistence.xml,路径一般放在模块名称\src\main\resources\META-INF\persistence.xml,上面的两个配置文件也要放在resource里面
3、生成的persistence.xml你会发现里面是空的,里面是要装一下数据库的配置信息,配置之前需要先连接一下数据库,我的是Oracle数据库
写到这里发现已经写得好多了,对不初学者来说脑子一定晕得很,想把它拆开写吧,但是又觉得拆开了没有逻辑感了,就这样按照这个逻辑下去吧,咱先来连接一下数据库
3.1、刚才咱不是生成了persistence.xml了嘛,咱现在就来点他,我的工程就是demo124,选择generate persistence mapping 的By database schema
3.2 接下来就弹出一个界面(数据库我的不是本地的,连的是公司的服务器上的)
上面的设置知道第五步出现successful 才说明你库连上了
然后回到步骤1的界面,我们选一张表生成一个实体,看看
ok 之后会在domian层下面生成一张表的实体,
接下来 终于 终于 到最后一步了:配置persistence.xml(加油,加油)(注意,有两种配置方式,下面我注释掉的是系统自动生成的,但是我运行就报错,说生成实体管理失败,我找了好多办法,试了下下面的用下面的写法就成功了,其实我觉得主要还是有有用户名和密码啥的)
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="permissionPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <!--下面是我生成的一张用户表--> <class>com.XXX.test.domain.TbYxuser</class> <!--<properties>--> <!--<property name="toplink.jdbc.url" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>--> <!--<property name="toplink.jdbc.driver" value="oracle.jdbc.OracleDriver"/>--> <!--<property name="hibernate.connection.url" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>--> <!--<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>--> <!--<property name="openjpa.ConnectionURL" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>--> <!--<property name="openjpa.ConnectionDriverName" value="oracle.jdbc.OracleDriver"/>--> <!--<property name="eclipselink.jdbc.url" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>--> <!--<property name="eclipselink.jdbc.driver" value="oracle.jdbc.OracleDriver"/>--> <!--</properties>--> <properties> <property name="hibernate.connection.url" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/> <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/> <property name="hibernate.connection.username" value="XXX"/> <property name="hibernate.connection.password" value="XXX"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.max_fetch_depth" value="5"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>
。。。。。。。。。。。到这一步终于写完了。劳心劳力,如果运行后还老是出现这样的问题,那就要需要注意我说的在配置的过程中强调的了
SEVERE: Exception sending contextinitialized event to listener instance of classorg.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'entityManagerFactory' defined in class pathresource [applicationContext.xml]: Invocation of init method failed; nestedexception is javax.persistence.PersistenceException: Unable to build entitymanager factory
看一下运行的结果:
开心吧~~~~啦啦啦
我现在自己不看网上的案例自己就能很快的搭建起来这样的框架,突然有点佩服自己了,想想自己一开始什么都不会,老是吐槽为啥这么多的文件,也不知他们之间的联系是啥,所以老是缺这少那的,走一步卡一步,还好自己没放弃,一步步的来,关键在于遇到问题了要去解决而不是逃避,要不然,自己永远什么都学不会。