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引入时,总是引用不到,我还没搞清楚具体的导入方法,我只是发现,我现有的目录结构下可以使用

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

最新文章

  1. AndroidProjects个人项目归纳
  2. Android开发学习路线图
  3. javascript运算符——关系运算符
  4. 20145330第五周《Java学习笔记》
  5. Java迭代 : Iterator和Iterable接口
  6. Android 实现布局动态加载
  7. 团体程序设计天梯赛-练习集L1-001. Hello World
  8. android Locat工作日志的使用
  9. cmake编译时遇到的问题解决
  10. MPICH3.2 单机编译、安装及测试
  11. MySQL关于check约束无效的解决办法
  12. 高效率遍历Map以及在循环过程中移除 remove指定key
  13. Kotlin编码----var和val的区别
  14. [51nod1239欧拉函数之和]
  15. Head First Android --- Intent
  16. Oracle 和 SQLSERVER 重新获取统计信息的方法
  17. Linux内存管理--物理内存分配【转】
  18. python基础之return,参数
  19. Linux的虚拟内存管理-如何分配和释放内存,以提高服务器在高并发情况下的性能,从而降低了系统的负载
  20. iOS8模糊效果UIVisualEffectView的使用

热门文章

  1. 基础:c++中引用与java中的引用
  2. LVS配置与安装
  3. 关于Eclipse Modeling Framework进行建模,第二部分
  4. Linux源码的目录结构
  5. 春&amp;风
  6. JavaScript入门(8)
  7. js限制文本框只能输入数字
  8. 转--T-SQL 总结
  9. 【JAVA】浅谈java内部类
  10. 隐藏NavigationBar 带来的坑