zoukankan      html  css  js  c++  java
  • 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引入时,总是引用不到,我还没搞清楚具体的导入方法,我只是发现,我现有的目录结构下可以使用
    知道的,可以提点我一下,谢谢

  • 相关阅读:
    js 小数取整的函数
    VS2015 Apache Cordova
    C# 标签(条码)
    异步提交form的时候利用jQuery validate实现表单验证
    调试javascript
    Chrome 控制台console的用法
    MvcPager分页控件以适用Bootstrap
    更好理解接口
    为什么上班一天都是坐着,但仍会疲惫不堪?(转)
    如何解决空虚感?(转)
  • 原文地址:https://www.cnblogs.com/dawnheaven/p/5608771.html
Copyright © 2011-2022 走看看