使用Ninja马上两年了,之前多多少少的都是跟着项目模仿着写,今年上半年准备从一个小项目开始从始至终走一遍;

首先官网:http://www.ninjaframework.org;

github:  https://github.com/ninjaframework/ninja

微信公众号:

aaarticlea/jpeg;base64,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IpGXJ69q/layPSgBAMmv6pwc0h5BGaAMHrQA6ikJxQDmgD+VgDNf1TZzmv5WhwelKeBjH50AJ61/VN1phHPev5XCeelACV/VOe9fysV/VOe9AH8rB60UHrRQAAZNf1Tg5oIJBGaQLg0AKSB1oByKaw5z7dK/lbPXpQB/VPX8q/XFf1T5r+VrGKAG4oIwa/qlOev6V/K2Rz0/KgD+qeiiigAooooAKKKKAE71/KxX9U/ev5WKAP6pzzQBiv5WKKAP6p8ewox7Cv5WKKAP6pySBnGa/lZIxg+9IDg0ZJNAH9U46UtIOlLQB/KvmlBJpKB1oAdjvmmng9a/qnxmv5WCc0AKOvWv6pFPP9acRkUYAFADSxB6V/K2QPWj1r+qbpQB/KwOT1p2O+aaDiv6p8YoA/lZ6V/VMBiv5WfWv6p6AEI46V/K12z61/VKRkYNAGKAP5WxyK/qjHTpS96/lY60ALgetf1SbsnGPxpxGRRtHpQB/K1tHX3ppGDX9U5Ar+VgnNAH9U9FfysUUAf1TMecYpQOOlfysA1/VOBigD+Vkdetf1SA896cRkUYAFACYz1pQMdq/lYPWigD+qiiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9k=" alt="" width="178" height="178" />

---------------------------------------------------------------------------------------------------

1:准备:jdk1.8(环境变量配置)等;IDEA(开发工具);GIT(版本控制器);maven(项目构建工具);PostgreSQL(数据库);

安装过程略(如果感兴趣可以加Ninja的QQ新群:262296156或者2群:560927314)

访问ninja官网实在太慢了,于是我把整个网站抓下来了,已经分享到群里了,需要的可以直接下载

--------------------------------------------------------------------------------------------------

2:直接创建一个Ninja项目官网位置:www.ninjaframework.org/documentation/getting_started/create_your_first_application.html

------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------

直接进行maven构建;

mvn archetype:generate -DarchetypeGroupId=org.ninjaframework -DarchetypeArtifactId=ninja-servlet-archetype-simple

解释一下这句话:我们使用maven构建项目,那就用它构建一个ninja原型--maven原型构建;

在你的某个目录下使用git窗口执行上面的代码,项目自动构建完毕(交互部分窝用中文解释一下);

$ mvn archetype:generate -DarchetypeGroupId=org.ninjaframework -DarchetypeArtif
actId=ninja-servlet-archetype-simple
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --
-
[INFO] Generating project in Interactive mode
[INFO] Archetype [org.ninjaframework:ninja-servlet-archetype-simple:6.0.0-rc1] f
ound in catalog remote
Downloading: https://repo.maven.apache.org/maven2/org/ninjaframework/ninja-servl
et-archetype-simple/6.0.0-rc1/ninja-servlet-archetype-simple-6.0.0-rc1.jar
Downloaded: https://repo.maven.apache.org/maven2/org/ninjaframework/ninja-servle
t-archetype-simple/6.0.0-rc1/ninja-servlet-archetype-simple-6.0.0-rc1.jar (13 KB
 at 2.8 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/ninjaframework/ninja-servl
et-archetype-simple/6.0.0-rc1/ninja-servlet-archetype-simple-6.0.0-rc1.pom
Downloaded: https://repo.maven.apache.org/maven2/org/ninjaframework/ninja-servle
t-archetype-simple/6.0.0-rc1/ninja-servlet-archetype-simple-6.0.0-rc1.pom (3 KB
at 5.1 KB/sec)
Define value for property 'groupId': : Define value for property 'artifactId': : Define value for property 'version':
1.0-SNAPSHOT: : Define value for property 'package':  : : [WARNING] Archetype is
 not fully configured
Define value for property 'groupId': : Define value for property 'artifactId': :
 [INFO] Using property: version = 1.0-SNAPSHOT
Define value for property 'package':  : : cmy //这里是packeage的名字,你可以自己定义
[WARNING] Archetype is not fully configured
Define value for property 'groupId': : cmy    
 <!-- 构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;
在某个 特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,
Maven为项目产生的构件包括:JARs,源 码,二进制发布和WARs等。--> 
Define value for property 'artifactId': : cmy
[INFO] Using property: version = 1.0-SNAPSHOT //这里是 打包后的版本
[INFO] Using property: package = cmy          //这里是packeage的名字,你可以自己定义
Confirm properties configuration:
groupId: cmy
artifactId: cmy
version: 1.0-SNAPSHOT
package: cmy
 Y: : y
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Archetype: ninja-ser
vlet-archetype-simple:6.0.0-rc1
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: groupId, Value: cmy
[INFO] Parameter: artifactId, Value: cmy
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: cmy
[INFO] Parameter: packageInPathFormat, Value: cmy
[INFO] Parameter: package, Value: cmy
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: cmy
[INFO] Parameter: artifactId, Value: cmy
[INFO] project created from Archetype in dir: e:\_My_File_____\_work\MyCode\myCo
de\javaworkspace\A_myproject\cmy
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 09:57 min
[INFO] Finished at: 2017-03-13T15:44:03+08:00
[INFO] Final Memory: 16M/273M
[INFO] ------------------------------------------------------------------------

进入项目,安装一下maven依赖包:

cd cmy
mvn clean install // to generate the compiled classes the first time
mvn ninja:run // to start Ninja's SuperDevMode 运行项目

构建完毕:

我接手新项目习惯性研究一下包目录结构,那Ninja也有介绍,官方地址http://www.ninjaframework.org/documentation/getting_started/the_anatomy_of_a_ninja_application.html

如果有必要等抽空解释一下目录结构,暂时先放在这里如下:

 ├── pom.xml                                     // Instructions about dependencies and the build (Maven)
└── src
├── main
│ ├── java
│ │ ├── META-INF
│ │ │ └── persistence.xml // Contains informations how to access databases via JPA
│ │ ├── assets // Static assets of your application
│ │ │ └── css
│ │ │ └── custom.css
│ │ ├── conf
│ │ │ ├── Module.java // Dependency injection definitions via Guice (Optional)
│ │ │ ├── Routes.java // Contains all routes of your application in one location
│ │ │ ├── ServletModule.java // Integration of arbitrary servlet filters and mappings (Optional)
│ │ │ ├── StartupActions.java // Customization of application startup (Optional)
│ │ │ ├── application.conf // Configuration for test dev and production mode
│ │ │ ├── messages.properties // 18n messages
│ │ │ └── messages_de.properties
│ │ ├── controllers // Controllers will handle the actual request and do something
│ │ │ ├── ApiController.java
│ │ │ ├── ApplicationController.java
│ │ │ ├── ArticleController.java
│ │ │ └── LoginLogoutController.java
│ │ ├── dao // Database access via DAO objects and not in the controller
│ │ │ ├── ArticleDao.java
│ │ │ ├── SetupDao.java
│ │ │ └── UserDao.java
│ │ ├── db // Database migrations when dealing with RDBMS (Flyway)
│ │ │ └── migration
│ │ │ ├── V1__.sql
│ │ │ └── V2__.sql
│ │ ├── ehcache.xml // Configuration for ehcache
│ │ ├── etc
│ │ │ ├── LoggedInUser.java
│ │ │ └── LoggedInUserExtractor.java // Argument extractors for controller methods
│ │ ├── filters
│ │ │ └── LoggerFilter.java // Filter to filter the request in the controller
│ │ ├── logback.xml // Logging configuration via logback / slf4j
│ │ ├── models // Some models that map to your relational database
│ │ │ ├── Article.java
│ │ │ ├── ArticleDto.java
│ │ │ ├── ArticlesDto.java
│ │ │ └── User.java
│ │ └── views // html views - always map to a controller and a method
│ │ ├── ApplicationController
│ │ │ ├── index.ftl.html // Maps to controller "ApplicationController" and method "index"
│ │ │ └── setup.ftl.html
│ │ ├── ArticleController
│ │ │ ├── articleNew.ftl.html
│ │ │ └── articleShow.ftl.html
│ │ ├── LoginLogoutController
│ │ │ ├── login.ftl.html
│ │ │ └── logout.ftl.html
│ │ ├── layout
│ │ │ ├── defaultLayout.ftl.html
│ │ │ ├── footer.ftl.html
│ │ │ └── header.ftl.html
│ │ └── system // Error html views. Can be customized to output custom error pages
│ │ ├── 403forbidden.ftl.html
│ │ └── 404notFound.ftl.html
│ ├── resources
│ └── webapp
│ └── WEB-INF
│ └── web.xml // Needed for servlet containers to start up Ninja
└── test
├── java
│ └── controllers // Different tests for your application
│ ├── ApiControllerDocTest.java
│ ├── ApiControllerDocTesterTest.java
│ ├── ApiControllerMockTest.java
│ ├── ApiControllerTest.java
│ ├── ApplicationControllerFluentLeniumTest.java
│ ├── ApplicationControllerTest.java
│ ├── LoginLogoutControllerTest.java
│ └── RoutesTest.java
└── resources
└── test_for_upload.txt

好了,接下来就开始配置项目了:

我要开发的是一个简单的博客系统,运行在互联网上的项目,因此一个配置或者布局构架等等和业务系统有所区别;

项目分析:

前台:需要文章列表就可以,我希望最好有个主页进入

后台:管理页面(我初步设置两三种权限,系统管理员,博主后台,运营后台)

--------------------------------------------------------------------------

开始配置application.conf 文件:

java_Ninja实战过程的更多相关文章

  1. MySQL数据库主从同步实战过程

       Linux系统MySQL数据库主从同步实战过程 安装环境说明 系统环境: [root@~]# cat /etc/redhat-release CentOS release 6.5 (Final) ...

  2. ORACLE11g 没有控制文件如何通过rman备份恢复数据的详细实战过程

    1.副总裁需要裸恢复的严峻现实 集团总部的信息部负责人给我打电话说为了找一年前的记录,所以需要对一年前2015年5月1日的数据进行恢复.而2016年初因为进行迁移,所以有些文件可能丢失,手上只有rma ...

  3. s11 Docker+DevOps实战--过程和工具

    开发人员本地提交代码,本地使用容器模拟生产环境测试,测试通过提交到git master 分支,就会触发pipeline执行集成构建.集成工具: gitlab-vi,travis,或Jenkins.自动 ...

  4. 基于redis排行榜的实战总结

    前言: 之前写过排行榜的设计和实现, 不同需求其背后的架构和设计模型也不一样. 平台差异, 有的立足于游戏平台, 为多个应用提供服务, 有的仅限于单个游戏.排名范围差异, 有的面向全局排名, 有的只做 ...

  5. swift项目实战FoodPin目录

    好吧,据说写博客能够找到好工作,那我也来分享一个项目吧! 自己自学iOS开发也有半年多了,现在就来分享一个swift的小项目吧!这个项目的来源是<Beginning iOS8 programmi ...

  6. pxe网络安装操作系统 原理与详细过程

    摘要:在实际工作中,我们经常会遇到这样的情况:想要安装Linux但是计算机不带光驱或软驱,或者是笔记本配置的非标准的软驱和光驱,如1394接口,USB接口等,在Linux安装时所引导的Linux内核一 ...

  7. 实战经验丨CTF中文件包含的技巧总结

    站在巨人的肩头才会看见更远的世界,这是一篇技术牛人对CTF比赛中文件包含的内容总结,主要是对一些包含点的原理和特征进行归纳分析,并结合实际的例子来讲解如何绕过,全面细致,通俗易懂,掌握这个新技能定会让 ...

  8. ProxySQL+Mysql实现数据库读写分离实战

    ProxySQL介绍 ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎.具有以下特性:http://www.proxysql.com/ 1.连接池,而且是multiplexing 2 ...

  9. Mongodb 集群实战

    该实战过程完全跟着官网一步一步实现 ,官网教程:https://docs.mongodb.com/manual/tutorial/atlas-free-tier-setup/ 使用Mongo Shel ...

随机推荐

  1. hdu5303(2015多校2)--Delicious Apples(贪心+枚举)

    Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  2. Python魔法师

    第一章:数据结构和算法 1.1 查找最大或者最小的n个元素 heapq 模块的两个函数 nlargest()  nsmallest() import heapq nums = [1, 8, 2, 23 ...

  3. 工业控制系统USB存储设备可信管理方案的(ICICS2015)论文PPT:TMSUI: A Trust Management Scheme

    本PPT是发表在ICICS2015 大会的论文 TMSUI: A Trust Management Scheme of USB Storage Devices for Industrial Contr ...

  4. STL学习笔记(变序性算法)

    变序性算法改变元素的次序,但不改变元素值. 这些算法不能用于关联式容器,因为在关联式容器中,元素有一定的次序,不能随意变动. 逆转元素次序 void reverse(BidirectionalIter ...

  5. STL学习笔记(第五章 STL组件)

    STL组件 若干精心勾画的组件共同合作,构筑起STL的基础.这些组件最关键的是容器.迭代器和算法. 下图演示了STL组件之间的合作 容器(Containers) 容器类别(简称容器)用来管理一组元素. ...

  6. 未能加载文件或程序集 MySql.Web

    偶然间碰到这个错误,找到一个临时的解决办法,真正的原因还不知道是什么,也不知道这种解决方法会不会对以后有什么副作用. “/”应用程序中的服务器错误. 配置错误 说明: 在处理向该请求提供服务所需的配置 ...

  7. centos安装postgresql

    #安装postgresqlyum -y install postgresql-server #执行数据库初始化脚本service postgresql-9.2 initdb #启动服务service ...

  8. $on、$emit和$broadcast的使用

    $emit只能向parent controller传递event与data( $emit(name, args) ) $broadcast只能向child controller传递event与data ...

  9. hdu 1159(Common Subsequence)简单dp,求出最大的公共的字符数

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  10. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1...

    之前项目一直好好的,之后电脑重装系统,数据库重新安装了一个5.6版本的,项目jar包丢失了,之后就又重新找了一些jar包倒入,结果运行报错: Caused by: com.mysql.jdbc.Mys ...