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>

启动设置

启动结果

相关文档

jfinal-2.2-manual.pdf

疑问

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

posted @ 2016-06-22 22:08  DawnHeaven  阅读(1923)  评论(0编辑  收藏  举报