JFinal开发环境配置

http://maven.apache.org/download.cgi(Maven官方下载地址)

配置 Maven环境变量前,先确认 “JAVA_HOME”这个环境变量是对应于JDK的安装目录。
第二十章 基于JFinal的大数据框架快速开发 - 图1

配置 Maven的系统变量。

验证配置是否正确。
第二十章 基于JFinal的大数据框架快速开发 - 图2

修改默认仓库路径。到 D:\Program Files\apache-maven-3.3.9\conf目录下打开 settings.xml文件,修改默认的仓库路径。

1. 下载 IDEA14或者 IDEA15

2. 鼠标双击安装程序开始安装

第二十章 基于JFinal的大数据框架快速开发 - 图3

第二十章 基于JFinal的大数据框架快速开发 - 图4

3. 安装完成后打开IDEA,并完成激活

1. 新建项目

点击 IDEA菜单栏左上角的 “File” 选项,在出现的下拉列表中选择第一项 “New”,在 “New” 选项的右边再选择 “Project” 选项打开 “New Project” 对话框。
第二十章 基于JFinal的大数据框架快速开发 - 图5

设置 GroupId和 ArtifactId。

设置 Maven的安装目录、settings.xml的文件位置和本地仓库的位置等信息。
第二十章 基于JFinal的大数据框架快速开发 - 图6

设置项目名称。

项目创建完成。
第二十章 基于JFinal的大数据框架快速开发 - 图7

2. 在 pom.xml文件中添加 jar包依赖

pom.xml文件说明:

project:pom.xml文件中的顶层元素;

modelVersion:指明 POM使用的对象模型的版本。这个值很少改动。

artifactId:指明此项目产生的主要产品的基本名称。项目的主要产品通常为一个 JAR文件。第二,象源代码包通常使用 artifactId作为最后名称的一部分。典型的产品名称使用这个格式: - . (比如:myapp-1.0.jar)。

version:项目产品的版本号。Maven帮助你管理版本,可以经常看到 SNAPSHOT这个版本,表明项目处于开发阶段。

name:项目的显示名称,通常用于 maven产生的文档中。

url:指定项目站点,通常用于 maven产生的文档中。

description:描述此项目,通常用于 maven产生的文档中。

要添加依赖我们要先到 maven仓库里面去查询。

首先我们要添加一些基本的依赖关系如:

  1. <groupId>javax.servlet</groupId>
  2. <artifactId>javax.servlet-api</artifactId>
  3. <version>3.1.0</version>
  4. </dependency>
  5. <dependency>
  6. <groupId>javax.servlet</groupId>
  7. <artifactId>jstl</artifactId>
  8. <version>1.2</version>
  9. </dependency>

第二十章 基于JFinal的大数据框架快速开发 - 图8

第二十章 基于JFinal的大数据框架快速开发 - 图9

3. 配置项目

打开 “Project Structure”。
第二十章 基于JFinal的大数据框架快速开发 - 图10

配置 “Project”。

配置 “Modules”。
第二十章 基于JFinal的大数据框架快速开发 - 图11

配置 “Libraries”。

添加外部依赖的jar包。有时候将一些本地已存在的 jar包添加到了 src/main/webapp/WEB-INF/lib(该目录要手动创建)这个目录里,那么可以在这里设置将这些 jar包导进项目中而不需要通过在pom.xml中去添加这些jar包的依赖关系来导入。

选中存放 jar包的文件夹。
第二十章 基于JFinal的大数据框架快速开发 - 图12

配置 “Facets”。

3. 配置Tomcat

打开配置。
第二十章 基于JFinal的大数据框架快速开发 - 图13

添加新Tomcat Server配置。

第二十章 基于JFinal的大数据框架快速开发 - 图14

第二十章 基于JFinal的大数据框架快速开发 - 图15

启动 Tomcat。
第二十章 基于JFinal的大数据框架快速开发 - 图16

正确启动后会默认显示index.jsp页面的内容

1. 搭建 JFinal项目步骤+说明

  1. 一个 JFinal项目一般至少包括三个部分:配置(com.hithinksoft.config)、实体类(com.hithinksoft.model)、控制器(com.hithinksoft.controller)。
  2. 在com.hithinksoft.config包中创建一个名为MyConfig(类名自定义)的类,它要继承 com.jfinal.config.JFinalConfig,并且要实现JFinalConfig中的五个抽象方法。这个类是必需的,它会对整个 web项目进行配置。
  3. com.hithinksoft.model包下的实体类都要继承 com.jfinal.plugin.activerecord.Model。
  4. com.hithinksoft.controller包下的控制器都要继承 com.jfinal.core.Controller。
  5. 下面编写一个示例:
    • 定义两个实体类: com.hithinksoft.model.User.java和 com.hithinksoft.model.Blog.java;
    • 定义两个控制器: com.hithinksoft.controller.UserController.java和 com.hithinksoft.controller.BlogController.java。
    • 定义页面:在 src\main\webapp\WEB-INF\pages\blogs下面定义四个页面,blogs.jsp、 blog.jsp、publish.jsp和 update.jsp。blogs.jsp页面时展示所有博客信息的,而 blog.jsp页面是展示某一条博客的详细信息的,publish.jsp页面是用来发布博客的,update.jsp页面是用来更改博客的;在 src\main\webapp\WEB-INF\pages\users下定义一个 login.jsp页面和 一个 register.jsp页面来进行登录和注册。

具体目录结构图:
第二十章 基于JFinal的大数据框架快速开发 - 图17

2. 添加依赖

  1. <dependency>
  2. <groupId>log4j</groupId>
  3. <artifactId>log4j</artifactId>
  4. <version>1.2.16</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. <version>5.0.8</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>c3p0</groupId>
  13. <artifactId>c3p0</artifactId>
  14. <version>0.9.1.2</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>com.mchange</groupId>
  18. <artifactId>mchange-commons-java</artifactId>
  19. <version>0.2.12</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>com.jfinal</groupId>
  23. <artifactId>jfinal</artifactId>
  24. <version>2.2</version>
  25. </dependency>

3. 配置 web.xml文件

在 web.xml中添加一下代码

  1. <filter>
  2. <filter-name>jfinalFilter</filter-name>
  3. <filter-class>com.jfinal.core.JFinalFilter</filter-class>
  4. <init-param>
  5. <param-name>configClass</param-name>
  6. <param-value>com.hithinksoft.config.MyConfig</param-value>
  7. </init-param>
  8. <filter-mapping>
  9. <filter-name>jfinalFilter</filter-name>
  10. <url-pattern>/*</url-pattern>
  11. </filter-mapping>

上面标签中的和的是一样的,是自定义的。标签中的类就是上面的 MyConfig类。

4. 创建 com.hithinksoft.config.MyConfig类,继承 com.jfinal.config.JFinalConfig并实现其中的方法

  1. package com.hithinksoft.config;
  2. import com.jfinal.config.*;
  3. public class MyConfig extends JFinalConfig {
  4. @Override
  5. public void configConstant(Constants constants) {
  6. }
  7. @Override
  8. public void configRoute(Routes routes) {
  9. }
  10. @Override
  11. }
  12. @Override
  13. public void configInterceptor(Interceptors interceptors) {
  14. }
  15. @Override
  16. public void configHandler(Handlers handlers) {
  17. }
  18. }

5. 验证项目的搭建是否成功

添加以下内容进行验证:

  1. 在 MyConfig类的 configRoute方法中添加一个路由,例如:routes.add(“/“, HelloController.class) (也可以是别的Controller类)。
  2. 在 HelloController.java中添加一个 index方法(方法名称自定义),在 index方法里面添加一条 renderJsp(“index.jsp”)跳转语句。
  3. 在 src\main\webapp\WEB-INF\目录下的 index.jsp页面中随便添加一些内容。
  4. 启动Tomcat服务器,如果浏览器输入了 index.jsp页面的内容,则说明 JFinal项目的搭建成功。

6. MyConfig类的具体内容

7. 用户登录

  1. webapp/WEB-INF/pages/blogs/login.jsp
  2. <form method="post" action="/blog/users/loginUser"
  3. style="width:200px;margin:100px auto;">
  4. 帐号:<input type="text" name="user.username"/><br/><br/>
  5. 密码:<input type="password" name="user.password"/><br/><br/>
  6. <input type="submit" value="登录"/>
  7. </form>

填写正确信息并点击“登录”按钮后,代码会根据 “/blog/users/loginUser”映射到 UserController里面的 loginUser()方法里面继续执行。

  1. com.hithinksoft.controller.UserController.java
  2. public void loginUser() {
  3. User user = getModel(User.class);
  4. String username = user.getStr("username");
  5. String password = user.getStr("password");
  6. /*验证登录的账户和密码是否匹配,如果匹配就获取该 User对象*/
  7. user = user.validate(username, password);
  8. if (user != null) {
  9. setSessionAttr("user", user);
  10. redirect("/blogs/blogs");
  11. } else {
  12. redirect("/users/login.jsp");
  13. }
  14. }

getModel用来接收页面表单域传递过来的model对象,表单域的名称以“modelName.attrName”方式命名,如帐号中 name属性的命令方式为 “user.username”,密码中 name属性的命名方式为 “user.password”。上述代码中的 getModel(User.class)表示接收页面表单域传递过来的 User实体对象,它里面保存有在页面填写的账户和密码。
redirect(“/blogs/blogs”)方法的作用是跳转页面的,相当于在浏览器地址栏中输入了 “localhost:8080/blog/blogs/blogs”,代码会进入 com.hithinksoft.controller.BlogController中的 blogs()方法(注:redirect方法参数中的第一个“/”就代表根路径“localhost:8080/blog/”)。

  1. com.hithinksoft.controller.BlogController
  2. public void blogs() {
  3. //查询所有的博客
  4. List<Blog> blogs = Blog.blogRepository.find("select * from blog");
  5. //将查询到的博客保存进 request作用域中,这样就可以在前端页面中获取到这些博客
  6. setAttr("blogs", blogs);
  7. renderJsp("blogs/blogs.jsp");
  8. }

上述代码最后是跳转到 “src/main/webapp/WEB-INF/pages/blogs/blogs.jsp”页面。
renderJsp是 render系列方法中的一种,它的作用就是渲染不同类型的视图并返回给客户端,简单地说就是按某种视图类型在浏览器中打开一个已经存在的页面。它与前面的 redirect的区别是 redirect是用来跳转请求的,redirect的请求结果是请求服务器来打开一个页面,而 render系列方法就是打开一个页面。这跟 Servlet中的请求分发和重定向类似。

8. 浏览博客

  1. com.hithinksoft.controller.BlogController
  2. public void blog() {
  3. Integer blogId = getParaToInt(0);
  4. Blog blog = Blog.blogRepository.findById(blogId);
  5. setAttr("blog", blog);
  6. renderJsp("blogs/blog.jsp");
  7. }

跳转页面

9. 发布博客

  1. webapp/WEB-INF/pages/blogs/publish.jsp
  2. <form method="post" action="/blog/blogs/publishBlog/${user.id}" style="width:600px;margin:50px auto;border:1px solid #A9A9A9;padding:10px 20px;">
  3. 标题:
  4. <input type="text" name="blog.title" value="${blog.title}"
  5. style="width: 600px;padding: 4px;"/><br/><br/>
  6. 内容:
  7. <textarea name="blog.content" style="width:600px;padding:4px;height:400px;">
  8. ${blog.content}
  9. </textarea>
  10. <input type="submit" value="发布"/>
  11. </form>

上述代码也是个表单,所以它的表单元素的 name属性值得写法与 login.jsp页面的写法一样都是 “modelName.attrName”。当点击 “发布”按钮时代码会根据 action中的 “/blog/blogs/publishBlog/${user.id}”映射到 BlogController类中的 publishBlog方法,action最后面的 “/${user.id}”是要传递的参数(具体语法参考 JFinal官方文档),这个 user就是在登录后调用 setSessionAttr(“user”, user)方法保存到 session作用域中的 user。

  1. com.hithinksoft.controller.BlogController
  2. //获取 action传递过来的参数
  3. Integer userId = getParaToInt(0);
  4. Blog blog = getModel(Blog.class);
  5. blog.set("user_id", userId);
  6. //将发布的博客持久化到数据库中
  7. blog.save();
  8. redirect("/blogs/blogs");
  9. }

10. 修改已发布的博客

  1. webapp/WEB-INF/pages/blogs/update.jsp
  2. <form method="post" action="/blog/blogs/updateBlog/${blog.id}"
  3. style="width:600px;margin:50px auto;border:1px solid #A9A9A9;padding:10px 20px;">
  4. 标题:
  5. <input type="text" name="blog.title" value="${blog.title}"
  6. style="width: 600px;padding: 4px;"/><br/><br/>
  7. 内容:
  8. <textarea name="blog.content" style="width: 600px;padding: 4px;height: 400px;">
  9. ${blog.content}
  10. </textarea>
  11. <input type="submit" value="修改"/>
  12. </form>

点击 “修改”按钮进入 BlogController中的 updateBlog方法,并且用被修改的博客的id作为参数。

  1. com.hithinksoft.controller.BlogController
  2. public void updateBlog() {
  3. Integer blogId = getParaToInt(0);
  4. Blog blog = getModel(Blog.class);
  5. blog.set("id", blogId);
  6. blog.update();
  7. redirect("/blogs/blogs");
  8. }

11. 删除已发布的博客

  1. Alt+回车 导入包,自动修正
  2. Ctrl+N 查找类
  3. Ctrl+Shift+N 查找文件
  4. Ctrl+Alt+L 格式化代码
  5. Ctrl+Alt+O 优化导入的类和包
  6. Alt+Insert 生成代码(如get,set方法,构造函数等)
  7. Ctrl+E或者Alt+Shift+C 最近更改的代码
  8. Ctrl+R 替换文本
  9. Ctrl+F 查找文本
  10. Ctrl+Shift+Space 自动补全代码
  11. Ctrl+空格 代码提示
  12. Ctrl+Alt+Space 类名或接口名提示
  13. Ctrl+P 方法参数提示
  14. Ctrl+Shift+Alt+N 查找类中的方法或变量
  15. Alt+Shift+C 对比最近修改的代码
  16. Shift+F6 重构-重命名
  17. Ctrl+Shift+先上键
  18. Ctrl+X 删除行
  19. Ctrl+D 复制行
  20. Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*...*/ )
  21. Ctrl+J 自动代码
  22. Ctrl+E 最近打开的文件
  23. Ctrl+H 显示类结构图
  24. Ctrl+Q 显示注释文档
  25. Alt+F1 查找代码所在位置
  26. Alt+1 快速打开或隐藏工程面板
  27. Ctrl+Alt+ left/right 返回至上次浏览的位置
  28. Alt+ left/right 切换代码视图
  29. Alt+ Up/Down 在方法间快速移动定位
  30. Ctrl+Shift+Up/Down 代码向上/下移动。
  31. F2 Shift+F2 高亮错误或警告快速定位
  32. 代码标签输入完成后,按Tab,生成代码。
  33. 选中文本,按Ctrl+Shift+F7 ,高亮显示所有该文本,按Esc高亮消失。
  34. Ctrl+W 选中代码,连续按会有其他效果
  35. 选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。
  36. Ctrl+B 快速打开光标处的类或方法