java jfinal的入门案例

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。

JFinal有如下主要特点:

MVC架构,设计精巧,使用简单
遵循COC原则,零配置,无xml
独创Db + Record模式,灵活便利
ActiveRecord支持,使数据库开发极致快速
自动加载修改后的java文件,开发过程中无需重启web server
AOP支持,拦截器配置灵活,功能强大
Plugin体系结构,扩展性强
多视图支持,支持FreeMarker、JSP、Velocity
强大的Validator后端校验功能
功能齐全,拥有struts2的绝大部分功能
体积小仅339K,且无第三方依赖

1、项目目录:

2、web.xml的配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 3 
 4   <display-name>JFinalDemo</display-name>
 5     <welcome-file-list>
 6         <welcome-file>index.html</welcome-file>
 7         <welcome-file>index.jsp</welcome-file>
 8     </welcome-file-list>
 9     
10     <filter>
11         <filter-name>jfinal</filter-name>
12         <filter-class>com.jfinal.core.JFinalFilter</filter-class>
13         <init-param>
14             <param-name>configClass</param-name>
15             <param-value>com.test.config.TestConfig</param-value>
16         </init-param>
17     </filter>
18     <filter-mapping>
19         <filter-name>jfinal</filter-name>
20         <url-pattern>/*</url-pattern>
21     </filter-mapping>
22 </web-app>

3、TestConfig可以看到这是一个配置文件

 1 package com.test.config;
 2 import com.jfinal.config.Constants;
 3 import com.jfinal.config.Handlers;
 4 import com.jfinal.config.Interceptors;
 5 import com.jfinal.config.JFinalConfig;
 6 import com.jfinal.config.Plugins;
 7 import com.jfinal.config.Routes;
 8 import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
 9 import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
10 import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
11 import com.jfinal.plugin.c3p0.C3p0Plugin;
12 import com.test.controller.ClassesController;
13 import com.test.controller.StudentController;
14 import com.test.model.Classes;
15 import com.test.model.Student;
16 public class TestConfig extends JFinalConfig{
17 
18     @Override
19     public void configConstant(Constants me) {
20          me.setDevMode(true);
21     }
22 
23     @Override
24     public void configInterceptor(Interceptors me) {
25     }
26 
27     @Override
28     public void configHandler(Handlers me) {
29     }
30 
31     @Override
32     public void configPlugin(Plugins me) {
33         C3p0Plugin cp = new C3p0Plugin("jdbc:mysql://localhost:3306/test","root", "189389");
34         cp.setDriverClass("com.mysql.jdbc.Driver");
35         me.add(cp);
36         ActiveRecordPlugin arp = new ActiveRecordPlugin(cp);
37         me.add(arp);
38         arp.setDialect(new MysqlDialect());
39         arp.setContainerFactory(new CaseInsensitiveContainerFactory());
40         arp.addMapping("student", "studentid", Student.class);
41         arp.addMapping("classes", "classesid", Classes.class);
42     }
43 
44     @Override
45     public void configRoute(Routes me) {
46         me.add("/", StudentController.class);
47         me.add("/student", StudentController.class);
48         me.add("/classes", ClassesController.class);
49     }
50 }

3、StudentValidator 验证器

 1 package com.test.validator;
 2 import com.jfinal.core.Controller;
 3 import com.jfinal.validate.Validator;
 4 public class StudentValidator extends Validator{
 5 
 6 
 7     @Override
 8     protected void validate(Controller c) {
 9         validateRequiredString("student.studentname", "studentnameMsg", "请输入学生名称!");
10     }
11     
12     //在校验失败时才会调用
13     @Override
14     protected void handleError(Controller c) {
15         c.keepPara("student.studentname");//将提交的值再传回页面以便保持原先输入的值
16         c.render("/add.html");
17     }
18 
19 }

4、StudentInterceptor 拦截器,这里实际只是简单的空实现

 1 package com.test.interceptor;
 2 
 3 import com.jfinal.aop.InterceptorStack;
 4 
 5 
 6 public class StudentInterceptor extends InterceptorStack {
 7 
 8     @Override
 9     public void config() {
10         
11     }
12 
13 }

5、StudentController 控制器

 1 package com.test.controller;
 2 import java.util.List;
 3 import com.jfinal.core.Controller;
 4 import com.test.model.Student;
 5 public class StudentController extends Controller {
 6     // @Before(StudentInterceptor.class)
 7     public void index() {
 8         try {
 9             List<Student> list = Student.dao.find("select * from student");
10             setAttr("studentList", list);
11         } catch (Exception e) {
12             e.printStackTrace();
13         }
14         render("/index.html");
15     }
16     public void add() {
17         render("/add.html");
18     }
19     public void delete() {
20         Student.dao.deleteById(getParaToInt());
21         forwardAction("/student");
22     }
23     public void update() {
24         try {
25             Student student = getModel(Student.class);
26             student.update();
27         } catch (Exception e) {
28             e.printStackTrace();
29         }
30         forwardAction("/student");
31     }
32     public void get() {
33         Student student = Student.dao.findById(getParaToInt());
34         setAttr("student", student);
35         render("/index2.html");
36     }
37     public void save() {
38         try {
39             Student student = getModel(Student.class);
40             student.save();
41         } catch (Exception e) {
42             e.printStackTrace();
43         }
44         forwardAction("/student");
45     }
46 }

6、Model的使用

1 package com.test.model;
2 
3 import com.jfinal.plugin.activerecord.Model;
4 
5 @SuppressWarnings("serial")
6 public class Classes extends Model<Classes>{
7 
8     public static final Classes dao = new Classes();
9 }
 1 package com.test.model;
 2 
 3 import com.jfinal.plugin.activerecord.Model;
 4 
 5 @SuppressWarnings("serial")
 6 public class Student extends Model<Student>{
 7 
 8     public static final Student dao = new Student();
 9     
10     public Classes getClasses(){
11         
12          return Classes.dao.findById(get("classesid"));
13     }
14 }

7、数据库的配置

 1 CREATE TABLE `student` (
 2   `studentid` int(11) NOT NULL AUTO_INCREMENT,
 3   `studentname` varchar(10) DEFAULT NULL,
 4   `studentage` int(11) DEFAULT NULL,
 5   `studentsex` varchar(2) DEFAULT NULL,
 6   `classesid` int(11) DEFAULT NULL,
 7   PRIMARY KEY (`studentid`),
 8   KEY `clsid` (`classesid`),
 9   CONSTRAINT `clsid` FOREIGN KEY (`classesid`) REFERENCES `classes` (`classesid`)
10 ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
11 
12 
13 
14 CREATE TABLE `classes` (
15   `classesid` int(11) NOT NULL AUTO_INCREMENT,
16   `classesname` varchar(20) DEFAULT NULL,
17   `classesaddress` varchar(50) DEFAULT NULL,
18   PRIMARY KEY (`classesid`)
19 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

8、下面的就是页面了

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <title>add.html</title>
 5 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 6 <meta http-equiv="description" content="this is my page">
 7 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 8 <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
 9 </head>
10 <body>
11     <form action="/JFinalDemo/student/save" method="post">
12         姓名: <input type="text" name="student.studentname" />
13         ${studentnameMsg!}${studentnameLMsg!} <br /> 年龄: <input type="text"
14             name="student.studentage" /> <br /> 性别: <input type="text"
15             name="student.studentsex" /> <br /> 班级: <input type="text"
16             name="student.classesid" /> <br /> <input type="submit" value="保存" />
17     </form>
18 </body>
19 </html>
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <title>index.html</title>
 5 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 6 <meta http-equiv="description" content="this is my page">
 7 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 8 </head>
 9 <body>
10     <a href="/JFinalDemo/student/add">添加</a>
11     <table border="1">
12         <tr>
13             <td>姓名</td>
14             <td>年龄</td>
15             <td>性别</td>
16             <td>班级</td>
17             <td>操作</td>
18         </tr>
19         <#list studentList as student>
20         <tr>
21             <td>${student.studentname}</td>
22             <td>${student.studentage}</td>
23             <td>${student.studentsex}</td>
24             <td>${student.getClasses().classesname}</td>
25             <td><a href="/JFinalDemo/student/delete/${student.studentid}">删除</a><a href="/JFinalDemo/student/get/${student.studentid}">修改</a>
26             </td>
27         </tr>
28         </#list>
29     </table>
30 </body>
31 </html>
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <title>index2.html</title>
 5 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 6 <meta http-equiv="description" content="this is my page">
 7 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 8 <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
 9 </head>
10 <body>
11     <form action="/JFinalDemo/student/update" method="post">
12         <input type="text" name="student.studentid"
13             value="${student.studentid}" /> <br /> 姓名: <input type="text"
14             name="student.studentname" value="${student.studentname}" /> <br />
15         年龄: <input type="text" name="student.studentage"
16             value="${student.studentage}" /> <br /> 性别: <input type="text"
17             name="student.studentsex" value="${student.studentsex}" /> <br />
18         班级: <input type="text" name="student.classesid"
19             value="${student.classesid}" /> <br /> <input type="submit"
20             value="保存" />
21     </form>
22 </body>
23 </html>

9、最后给出依赖的jar

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <classpath>
 3     <classpathentry kind="src" path="src"/>
 4     <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 5     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/c3p0-0.9.1.2.jar"/>
 6     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/freemarker-2.3.16.jar"/>
 7     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/javaee.jar"/>
 8     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/jfinal-1.8-bin-with-src.jar"/>
 9     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/log4j-1.2.16.jar"/>
10     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java-5.1.20-bin.jar"/>
11     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/velocity-1.2.jar"/>
12     <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/velocity-dep-1.2.jar"/>
13     <classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
14 </classpath>

这是一个jfinal的入门小案例,这是官网地址(http://www.jfinal.com/)



 

posted on 2017-05-23 16:02  祥昊  阅读(358)  评论(0)    收藏  举报

导航