Jfinal 入门

IDE----->IDEA

新建项目

新建web项目

添加maven特性

方便导入jar包,不用一个个导入了

配置pom.xml

<dependencies>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>8.1.8</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.20</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>

目录结构

添加文件DefaultConfig.java

用于在web.xml中配置

package config;
import Model.User;
import com.jfinal.config.*;
import com.jfinal.kit.PropKit;
import com.jfinal.log.Log4jLoggerFactory;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;
import controller.HelloController;
import controller.UserController; /**
* Created by DawnHeaven on 16-5-30.
*/
public class DefaultConfig extends JFinalConfig {
//全局设定
@Override
public void configConstant(Constants constants) {
constants.setLoggerFactory(new Log4jLoggerFactory());
constants.setEncoding("UTF-8");//设置编码
constants.setDevMode(true);
constants.setViewType(ViewType.FREE_MARKER);//设置视图模板 默认为freemarker
constants.setFreeMarkerViewExtension(".ftl");
} @Override
public void configRoute(Routes routes) {
//匹配路径为 / 使用HelloController处理
routes.add("/", HelloController.class);
//匹配路径为 /user 使用UserController处理, 最后一个参数是,返回的视图从哪个路径下寻找
routes.add("/user", UserController.class, "/WEB-INF/template");
} @Override
public void configPlugin(Plugins plugins) {
//配置数据库连接
PropKit.use("jdbc.properties");
final String URL =PropKit.get("jdbcUrl");
final String USERNAME = PropKit.get("user");
final String PASSWORD =PropKit.get("password"); DruidPlugin druidPlugin = new DruidPlugin(URL,USERNAME,PASSWORD);
druidPlugin.setFilters("stat,wall");
plugins.add(druidPlugin); //注册service
ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
//添加Model类和数据库表的映射。user指的是表名,userid指的是主键
activeRecordPlugin.addMapping("user","id", User.class);
plugins.add(activeRecordPlugin); } @Override
public void configInterceptor(Interceptors interceptors) { } @Override
public void configHandler(Handlers handlers) {
handlers.add(new ContextPathHandler());
}
}

web.xml中添加 filter

<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>config.DefaultConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

ContextPathHandler

package config;

import com.jfinal.handler.Handler;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Created by DawnHeaven on 16-6-1.
*/
public class ContextPathHandler extends Handler {
@Override
public void handle(String s, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, boolean[] booleans) {
httpServletRequest.setAttribute("CONTEXT_PATH",httpServletRequest.getContextPath());
nextHandler.handle(s, httpServletRequest, httpServletResponse, booleans);
}
}

HelloController

package controller;

import com.jfinal.core.ActionKey;
import com.jfinal.core.Controller; /**
* Created by DawnHeaven on 16-5-30.
*/
public class HelloController extends Controller { // @ActionKey("index") ActionKey的优先级高,没有匹配index
public void index(){
render("/index.html");
}
}

UserController

package controller;

import Service.UserService;
import com.jfinal.core.ActionKey;
import com.jfinal.core.Controller; import java.util.HashMap;
import java.util.Map; /**
* Created by DawnHeaven on 16-5-31.
*/
public class UserController extends Controller {
private UserService userService = new UserService(); public void index(){
setAttr("user", "fanzhijie");
renderFreeMarker("user.ftl");//返回ftl页面
} public void login(){
String username = getPara("name");
String password = getPara("phone");
boolean loginCheck = userService.login(username,password);
renderJson(loginCheck);//返回Json
} public void register(){
String username = getPara("name");
String phone = getPara("phone");
String email = getPara("email");
boolean result = userService.add(username,phone, email);
if(result) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", username);
map.put("phone", phone);
map.put("email", email); map.put("json", 1);
renderJson(map);
}
else
renderJson("error");
}
}

User

package Model;

import com.jfinal.plugin.activerecord.Model;

/**
* Created by DawnHeaven on 16-5-31.
*/
public class User extends Model<User> {
}

UserService

package Service;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record; /**
* Created by DawnHeaven on 16-5-31.
*/
public class UserService {
public boolean add(String name,String phone, String email){
String SQL = "SELECT id FROM user WHERE name =?";
Integer result = Db.queryFirst(SQL, name);
if(result==null){
Record user = new Record().set("name", name).set("phone", phone).set("email", email);
Db.save("user", user);
return true;
}
return false;
} public boolean login(String name,String phone){
String SQL = "SELECT id FROM user WHERE name =? and phone=?";
Integer result = Db.queryFirst(SQL, name, phone);
if(result!=null)
return true;
else return false;
}
}

jdbc.property

driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/testdb
user=root
password=root initialSize=1
minIdle=1
maxActive=20

log4j

log4j.rootLogger=INFO, stdout, file
log4j.appender.stdout.Target=System.out
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n # Output to the File
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=./myapp.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n # Druid
log4j.logger.druid.sql=warn,stdout
log4j.logger.druid.sql.DataSource=warn,stdout
log4j.logger.druid.sql.Connection=warn,stdout
log4j.logger.druid.sql.Statement=debug,stdout
log4j.logger.druid.sql.ResultSet=warn,stdout

User.ftl

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>${user}</title>
</head>
<body>
${user}
<div>
<input type="text" id="name">
<input type="text" id="phone">
<input type="text" id="email">
<button id="add">add</button>
<button id="check">check</button>
</div> <div id="result">
</div>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript">
$("#check").click(function () {
var name = $("#name").val();
var phone = $("#phone").val();
var email = $("#email").val(); $.ajax({
url:"/user/login",
data:{name:name,phone:phone},
success: function (result) {
$("#result").html("result--->" + result);
},
type:"POST"
}
);
});
$("#add").click(function () {
var name = $("#name").val();
var phone = $("#phone").val();
var email = $("#email").val(); $.ajax({
url:"/user/register",
data:{name:name,phone:phone,email:email},
success: function (result) {
if(result.json = 1){
$("#result").html("name:" + result.name + "<br>phone:" + result.phone + "<br>email;" + result.email);
}else{
$("#result").html(result);
}
},
type:"POST"
}
);
});
</script>
</body>
</html>

启动设置

启动结果

相关文档

jfinal-2.2-manual.pdf

疑问

在js引入时,总是引用不到,我还没搞清楚具体的导入方法,我只是发现,我现有的目录结构下可以使用

知道的,可以提点我一下,谢谢

Jfinal 入门的更多相关文章

  1. jFinal 2.2入门学习之一:搭建框架输出helloword

    官方推荐用Eclipse IDE for Java EE Developers 做为开发环境 1.创建 Dynamic Web Project 2.修改 Default Output Folder,推 ...

  2. JFinal 3.3 入门学习 -- Hello JFinal World.

    资源准备 jar包下载:http://www.jfinal.com/download/?file=jfinal-3.3-all.zip 下载完成后需要用到的jar包: 将 jfinal-3.3-bin ...

  3. jFinal 2.2入门学习之二:使用sqlserver数据库学习搭建jfinal-demo框架(MySQL的话就不需要看这个了)

    1.去官网下载最新的jfinal_Demo(我这是JFinal-2.2) 2.解压demo源码,eclipse导入项目 3.本地创建数据库,修改信息,(注意:如果sqlserver端口号冲突,需要配置 ...

  4. 基于jFinal建立简单的服务端-接收请求并返回指定内容

    本菜鸡是一名弱弱的测试工程师,最近完成了一个支付相关的项目,项目工作中,需要建立一个模拟支付宝的网关,主要是接收请求并返回数据.作为一名没有丝毫开发经验的菜鸡,初期入门相当费劲,主要还是思维上的转变. ...

  5. 3.2.1 SpringMVC入门

    一. SpringMVC入门 1. MVC介绍 MVC全名 是Model View Controller, 是模型(model) - 视图(view) - 控制器(controller) 的缩写, 它 ...

  6. JFinal DB.tx()事务回滚及lambda表达式应用

    JFinal DB.tx()事务回滚 在要往数据库操作多条数据时,就需要用到事务,JFinal中有封装好的事务应用 写法: Db.tx(new IAtom(){ @Override public bo ...

  7. JFinal视频教程

    最近开始录制JFinal视频教程,发布在腾讯课堂上,免费公开面向JFinal开发者,作为JFinal开发者入门学习.实际项目用遇到问题寻找解决方案的最好途径. 目前JFinal课程已经开始更新. 腾讯 ...

  8. SSM(spring mvc+spring+mybatis)学习路径——2-1、spring MVC入门

    目录 2-1 Spring MVC起步 一.回顾Servlet 二.SpringMVC简介 三.搭建SpringMVC第一个案例 四.简单流程及配置 五.使用注解开发Controller 六.参数绑定 ...

  9. springMVC入门笔记

    目录 一.回顾Servlet 二.SpringMVC简介 三.搭建SpringMVC第一个案例 四.简单流程及配置 五.使用注解开发Controller 六.参数绑定 基本数据类型的获取: 如果表单域 ...

随机推荐

  1. javascript笔记02:严格模式的特定要求

    1.严格模式变量必须声明,不然会报错: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  2. C语言结构体的引入

    #include <stdio.h> struct student{ int ID; ]; int age; }; int main(){ //赋值: , }; ,.name=}; , , ...

  3. vagrant Ubuntu server 12.04 dpkg: dependency problems prevent configuration of python-gi

    Ubuntu server 12.04因为尝试安装过xfce,导致sudo apt-get install xxx 都会返回,如: vagrant@precise32:~$ sudo apt-get ...

  4. CSS3选择器使用小结

    CSS3 选择器小结 一 通用选择器 1  *{}通配选择符(CSS2):适合所有元素对象. 2  E类型(HTML)选择符(CSS1):以文档语言对象类型DOM作为选择符. 3  E#myid是id ...

  5. 纯CSS实现三列布局(两边固定,中间自适应)

    看了一些网上的案例,感觉较繁杂,于是,自己整理了一篇来说明这个东西. 也是给我自己复习吧,以前有人问道,我还没答上来呢.== 看代码: html: <div class="top&qu ...

  6. python输出1到100之和的几种方法

    1. 使用内建函数range print sum(range(1,101)) 2. 使用函数reduce print reduce(lambda a,b:a+b,range(1,101)) 3. 使用 ...

  7. 第六篇、CSS属性

    <!--1.可继承性 visible(可见的):hidden --掩藏,但是结构还保存 cursor(光标样式):pointer(手指)crosshair(十字架) 一般是文字控制属性 内联标签 ...

  8. C# 刷新当前窗体

    在有多个窗体时,刷新当前激活的窗体 在MainForm.cs中: private void m_reflashtoolStripButton1_Click(object sender, EventAr ...

  9. 学习C++ Primer 的个人理解(九)

    这一章介绍顺序容器,在之前的第三章中,了解到的vector就属于顺序容器的一种. 一个容器就是一些特定类型对象的集合. 除了vector,还有哪些顺序容器? vector: 大小可变,随机访问的速度很 ...

  10. 学习C++ Primer 的个人理解(六)

    第四章和第五章没什么特别的.基本上就是书本上的字面意思,也没什么需要注意的细节.直接记录第六章. 本章介绍了函数,其实也没什么特别的.但有几个重点 1.形参的类型决定了形参和实参的交互方式.形参是引用 ...