手把手教会你开发动态web项目(2)

这一章主要讲项目的结构。

1. 项目使用gradle进行管理,如果你熟悉可以跳过这段,这里简单介绍一下。Gradle是一个类似于maven的项目管理构建工具,配置文件为项目根目录底下的build.gradle,你可以在这里配置项目的第三方依赖包。

dependencies {
    def springFrameworkVersion = "4.2.5.RELEASE"
compile "org.springframework:spring-context:${springFrameworkVersion}"
compile "org.springframework:spring-core:${springFrameworkVersion}"
compile "org.springframework:spring-aop:${springFrameworkVersion}"
compile "org.springframework:spring-beans:${springFrameworkVersion}"
compile "org.springframework:spring-expression:${springFrameworkVersion}"
compile "org.springframework:spring-web:${springFrameworkVersion}"
compile "org.springframework:spring-webmvc:${springFrameworkVersion}"
compile "org.springframework:spring-aspects:${springFrameworkVersion}"
compile "org.springframework:spring-orm:${springFrameworkVersion}"

def springSecurityVersion = "4.0.4.RELEASE"
compile "org.springframework.security:spring-security-web:${springSecurityVersion}"
compile "org.springframework.security:spring-security-config:${springSecurityVersion}"

compile "org.codehaus.groovy:groovy-all:2.3.11"
compile "org.hibernate:hibernate-core:5.1.0.Final"
compile "com.typesafe.scala-logging:scala-logging-slf4j_2.10:2.1.2"
compile "com.typesafe:config:1.3.0"
compile 'ch.qos.logback:logback-classic:1.1.6'
compile "javax.servlet:jstl:1.2"
compile 'org.apache.commons:commons-dbcp2:2.1.1'
compile 'javax.transaction:jta:1.1'
compile 'mysql:mysql-connector-java:5.1.27'
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.2'

providedCompile "javax.servlet:javax.servlet-api:3.1.0"

testCompile "org.springframework.boot:spring-boot-starter-web:1.3.2.RELEASE"
testCompile "org.springframework:spring-test:${springFrameworkVersion}"
testCompile group: "junit", name: "junit", version: "4.12"
testCompile 'com.h2database:h2:1.4.191'

def tomcatVersion = '7.0.59'
tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
            "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}",
            "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}"
}

可以看到它其实就是一个动态脚本,基于groovy语法,所以你可以灵活的在里面添加代码来实现你需要的管理功能

2. 代码结构



 如图,src下面分为了main和test,框架的核心代码写在了src/main/scala底下,web静态资源存放在webapp目录下,重点则放在了resources底下,再如图



 
 可以看到resources下有个dev目录,里面存放的是application.conf文件,此文件定义了项目中需要使用的一些配置,比如数据库链接,hibernate配置等。这里你还可以看到在resources目录底下也有一个application.conf,框架会先读取这个下面的配置,再读取相应的环境下的application.conf,比如上面的dev,所以在dev中你可以覆盖resources下的application.conf的配置信息。除了dev,你还可以配置test,uat,staging和production。需要你相应的为其创建目录。

db.sql则是提供了创建所有数据表的sql,目前里面提供了最主要的几个表,User,Role,UserRole和RoleAuthority表,提供给spring security使用。

logback.xml则是用来配置应用的日志

groovy目录下存放的是所有跟业务相关的开发代码,我们主要关心的就是这个目录,所有动态的实现都在这里。你需要在这里创建groovy文件,但是你不需要使用groovy语法,因为groovy也支持原生的java语法,所以你只需要写java代码就可以了。但是推荐你学习一下groovy,你会喜欢上它的动态特性和简洁的代码大笑

这里稍微解释一下为什么把groovy目录放在resources下的原因。在application.conf中有一个groovy的配置,里面需要你设置groovy的文件的根目录,目的是让框架可以知道groovy文件所在的位置而去读取源代码进行类的动态加载,如果是放在src底下,IDE会自动编译groovy的类,从而导致没办法动态读取源文件。而当你需要部署你的代码到正式环境下时,你需要单独为你的groovy文件部署到某个文件目录下,并重新再application.conf文件中指定目录,因为war不会对这些groovy文件进行打包。

猜你喜欢

转载自georgezeng.iteye.com/blog/2282337