Jfinal 入门
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>
启动设置

启动结果

相关文档
疑问
在js引入时,总是引用不到,我还没搞清楚具体的导入方法,我只是发现,我现有的目录结构下可以使用
知道的,可以提点我一下,谢谢
Jfinal 入门的更多相关文章
- jFinal 2.2入门学习之一:搭建框架输出helloword
官方推荐用Eclipse IDE for Java EE Developers 做为开发环境 1.创建 Dynamic Web Project 2.修改 Default Output Folder,推 ...
- JFinal 3.3 入门学习 -- Hello JFinal World.
资源准备 jar包下载:http://www.jfinal.com/download/?file=jfinal-3.3-all.zip 下载完成后需要用到的jar包: 将 jfinal-3.3-bin ...
- jFinal 2.2入门学习之二:使用sqlserver数据库学习搭建jfinal-demo框架(MySQL的话就不需要看这个了)
1.去官网下载最新的jfinal_Demo(我这是JFinal-2.2) 2.解压demo源码,eclipse导入项目 3.本地创建数据库,修改信息,(注意:如果sqlserver端口号冲突,需要配置 ...
- 基于jFinal建立简单的服务端-接收请求并返回指定内容
本菜鸡是一名弱弱的测试工程师,最近完成了一个支付相关的项目,项目工作中,需要建立一个模拟支付宝的网关,主要是接收请求并返回数据.作为一名没有丝毫开发经验的菜鸡,初期入门相当费劲,主要还是思维上的转变. ...
- 3.2.1 SpringMVC入门
一. SpringMVC入门 1. MVC介绍 MVC全名 是Model View Controller, 是模型(model) - 视图(view) - 控制器(controller) 的缩写, 它 ...
- JFinal DB.tx()事务回滚及lambda表达式应用
JFinal DB.tx()事务回滚 在要往数据库操作多条数据时,就需要用到事务,JFinal中有封装好的事务应用 写法: Db.tx(new IAtom(){ @Override public bo ...
- JFinal视频教程
最近开始录制JFinal视频教程,发布在腾讯课堂上,免费公开面向JFinal开发者,作为JFinal开发者入门学习.实际项目用遇到问题寻找解决方案的最好途径. 目前JFinal课程已经开始更新. 腾讯 ...
- SSM(spring mvc+spring+mybatis)学习路径——2-1、spring MVC入门
目录 2-1 Spring MVC起步 一.回顾Servlet 二.SpringMVC简介 三.搭建SpringMVC第一个案例 四.简单流程及配置 五.使用注解开发Controller 六.参数绑定 ...
- springMVC入门笔记
目录 一.回顾Servlet 二.SpringMVC简介 三.搭建SpringMVC第一个案例 四.简单流程及配置 五.使用注解开发Controller 六.参数绑定 基本数据类型的获取: 如果表单域 ...
随机推荐
- java基础学习总结五(递归算法、冒泡排序、查看生成API)
一:递归算法 概念:自己调用自己的方法 示例代码如下: @Test /** * 递归求和 * 5+4+3+2+1=15 */ public void getSum() { long sum = sum ...
- [转]Oracle开发专题之:%TYPE 和 %ROWTYPE
本文转自:http://www.cnblogs.com/kingjiong/archive/2009/02/19/1393837.html 1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来 ...
- ADB无线连接
注意:PC和手机在同一个局域网 背景:很长的时候手机线不够用,连接线还是不爽,偶尔会掉,平时可能手机会被拿走,重现crash的问题,不能很友好的使用DDMS,自己找了一些文章,ADB无线连接,实验成功 ...
- 【linux操作命令】crontab
带续写... 版权声明:本文为博主原创文章,未经博主允许不得转载.
- XML DOM操作,适用目前流行的浏览器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- python 安装第三方库,超时报错--Read timed out.
Traceback (most recent call last): File "/home/xiaoduc/.pyenv/versions/3.5.0/lib/python3.5/site ...
- Sqlserver 理解子查询
理解子查询: 理解子查询: 多表连接查询往往也可以用子查询进行替代 子查询本质是嵌套进其他 select update insert Delete 语句的一个被限制的select语句,在子查询中,只有 ...
- ###《More Effective C++》- 基础议题
More Effective C++ #@author: gr #@date: 2015-05-11 #@email: forgerui@gmail.com 一.仔细区别pointers和refere ...
- (转)安装程序发布利器——InstallShield 2011 Limited Edition
最近经常写WCF服务和Windows服务,之前知道可以通过vs2010自带的“安装项目”可以发布程序,但是自vs2010起,同时提供了InstallShield LE. 下面我们通过图示,来了解Ins ...
- javascript Date类型 学习笔记
1 创建一个新的日期对象,如果不带参数,则对象自动获得当前的日期和时间 var d = new Date() 2 如果需要指定特定的日期,则可以通过Date.parse() 或者 Date().UTC ...