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. 查看Oracle SQL执行计划的常用方式

    在查看SQL执行计划的时候有很多方式 我常用的方式有三种 SQL> explain plan for 2 select * from scott.emp where ename='KING'; ...

  2. javascript笔记06:类的创建

    1.创建一个javascript类---javascript使用函数形式构建类 <script type="text/javascript">  //定义一个类     ...

  3. Android -tool工具UIautomatorviewer提示“不能让屏幕黑屏”

    Android中有很多工具可以让我们使用,我使用比较多的有属DDMS,UIautomatorviewer,DDMS中信息也很强大,有空的时候在理理 这篇博主写的很详细:http://www.cnblo ...

  4. 前端基础系列——CSS规范(文章内容为转载)

    原作者信息 作者:词晖 链接:http://www.zhihu.com/question/19586885/answer/48933504 来源:知乎 著作权归原作者所有,转载请联系原作者获得授权. ...

  5. RabbitMQ 原文译03--发布和订阅

    发布/订阅 在之前的案例中我们创建了一个工作队列,这个工作队列的实现思想就是一个把每一个任务平均分配给每一个执行者,在这个篇文章我们会做一些不一样的东西,把一个消息发送给多个消费者,这种模式就被称作& ...

  6. IOS 高级开发 KVC(一)

    熟练使用KVC 可以再开发过程中可以给我们带来巨大的好处,尤其是在json 转模型的时候,KVC让程序员摆脱了繁琐无营养的代码堆积.减少代码量就是减少出错的概率.KVC 用起来很灵活,这种灵活的基础是 ...

  7. SQL Constraint/Index

    1.SQL Constraint Integrity Constraints are used to apply business rules for the database tables. The ...

  8. InstallShield: Component-Feature Associations

    Quote from: http://helpnet.installshield.com/installshield16helplib/IHelpFeatAssociateComponents.htm ...

  9. 九度OJ 1214 寻找丑数【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1214 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因 ...

  10. 伪分布式环境下命令行正确运行hadoop示例wordcount

    首先确保hadoop已经正确安装.配置以及运行. 1.     首先将wordcount源代码从hadoop目录中拷贝出来. [root@cluster2 logs]# cp /usr/local/h ...