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. ADS的使用

    ADS是一款强大的软件,应用程序不能直接操作硬件,而ADS程序是无操作系统支持的,可以直接操作硬件,下面来介绍一下ADS的基本使用方法. 编辑本段基本简介: ADS(ARM Developer Sui ...

  2. HashMap(JDK1.8)源码剖析

    在JDK1.6中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的Entity都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找 ...

  3. JSDOM之节点

    javascript-节点属性详解 根据 DOM,HTML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 HTML 标签是一个元素节点 包含在 HTML 元素中 ...

  4. session的介绍与简单使用

    cookie由浏览器带着,容易被篡改因为cookie很容易被篡改,所以cookie用来记住用户名,记住浏览历史等安全性要求不高的地方可以用sessin技术session技术将信息存入服务器,然后再给客 ...

  5. JAXB - Annotations, Type Mapping: XmlSchemaType

    The annotation XmlSchemaType defines a mapping between an arbitrary Java type and a simple schema bu ...

  6. 点击 a 标签触发事件而不跳转页面

    有时候需要让 a 标签像 button 一样,被点击的时候触发事件而不跳转页面. <html> <body> <a id="a1" href=&quo ...

  7. 在XP系统下搭建maven环境出的问题 Unable to locate the Javac Compiler in: C:\Program Files\Java\jre6\..\lib\tools.jar

    Build errors for spider; org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute g ...

  8. C# ACM poj1007

    求逆序数,快排 public static void acm1007(int a, string[] c) { Dictionary<int, string> dic = new Dict ...

  9. checkbox prop()函数

    1.设置checkbox选中状态 ①选中: .prop('checked',true); ②不选中:.prop('checked',false); 2.获取checkbox选中状态 .prop('ch ...

  10. Java实战之03Spring-03Spring的核心之AOP(Aspect Oriented Programming 面向切面编程)

    三.Spring的核心之AOP(Aspect Oriented Programming 面向切面编程) 1.AOP概念及原理 1.1.什么是AOP OOP:Object Oriented Progra ...