美文网首页
Java Web 极速开发框架jfinal 的搭建

Java Web 极速开发框架jfinal 的搭建

作者: xq9527 | 来源:发表于2020-02-02 22:09 被阅读0次

    前言:

    这个Java web服务端的jfinal 框架最早出来上班的时候那个公司的所使用,之前有基本的了解 。 现在只是重新学习了就从零开始的搭建一个基础的项目分享给大家 如果有不足和错误的地方望各位及时指正,废话话不多说我们正式开始

    1开发环境:

    建议使用myeclispe 或者基础版本的eclipse 装插件都可以 myeclipse 下载地址:https://www.myeclipsecn.com/ eclispe 下载地址: https://www.eclipse.org/downloads/

    2具体实现:

    一 需要用到的jar包

    c3p0-0.9.5.2.jar (数据库连接池的jar包)

    jfinal-3.3.jar (jfinal框架库的jar包)

    mysql-connector-java-5.1.20.jar (mysql的jar包)


    TIM截图20200202202355.png
    二 数据库账号密码jdbcUrl配置
    TIM截图20200202204558.png
    jdbcUrl = jdbc:mysql://localhost/test?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
    username = root  //换成自己的数据库的账号和 密码
    password = 123456 
    showSql=true
    
    三 jfinal 的web.xm的配置
    TIM截图20200202215213.png
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>jfinal_work</display-name>
      <!-- Jfinal配置文件 -->
      <filter>
    <!--   
      <filter-name>encodingFilter</filter-name>  
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
            <init-param>  
                <param-name>encoding</param-name>  
                <param-value>UTF-8</param-value>  
            </init-param>  
            <init-param>  
                <param-name>forceEncoding</param-name>  
                <param-value>true</param-value>  
            </init-param>  
        </filter>  
        <filter-mapping>  
            <filter-name>encodingFilter</filter-name>  
            <url-pattern>/*</url-pattern>  
        </filter-mapping> -->
      
        <filter-name>jfinal</filter-name>
        <filter-class>com.jfinal.core.JFinalFilter</filter-class>
        <init-param>
            <param-name>configClass</param-name>
            <param-value>config.App_config</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>jfinal</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      <!-- Jfinal配置文件 -->
    </web-app>
    
    四 我们写一个config类继承JFinalConfig 核心配置类读取数据库的配置信息和路由的配置
    package config;
    import com.jfinal.config.Constants;
    import com.jfinal.config.Handlers;
    import com.jfinal.config.Interceptors;
    import com.jfinal.config.JFinalConfig;
    import com.jfinal.config.Plugins;
    import com.jfinal.config.Routes;
    import com.jfinal.core.JFinal;
    import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
    import com.jfinal.plugin.c3p0.C3p0Plugin;
    import com.jfinal.plugin.ehcache.EhCachePlugin;
    import com.jfinal.template.Engine;
    import controller.LoginController;
    import model.Engineer;
    import model.Order;
    import model.Phonemodle;
    import model.User;
    
    
    /**
     * @author xuqing
     *
     */
    
    public class App_config  extends  JFinalConfig{
    
        @Override
        public void configConstant(Constants arg0) {
            loadPropertyFile("Databaseconfig.txt");
            arg0.setDevMode(true);
        }
    
        @Override
        public void configEngine(Engine arg0) {
        
        }
    
        @Override
        public void configHandler(Handlers arg0) {
        
            
        }
    
        @Override
        public void configInterceptor(Interceptors arg0) {
    
            
        }
    
        @Override
        public void configPlugin(Plugins arg0) {
            C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"),
                    getProperty("username"),
                    getProperty("password")
                    );
            ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(c3p0Plugin);
            //配置model
            activeRecordPlugin.addMapping("user", User.class);
            activeRecordPlugin.addMapping("orderfrom", Order.class);
            activeRecordPlugin.addMapping("phonemodle", Phonemodle.class);
            activeRecordPlugin.addMapping("engineer", Engineer.class);
            arg0.add(c3p0Plugin);
            arg0.add(activeRecordPlugin);
            activeRecordPlugin.setShowSql(true);
    
        }
         /**
                * 添加接口方法
                 *   配置路由器
          *   
          *   
          */
        @Override
        public void configRoute(Routes arg0) {
            arg0.add("/user", controller.LoginController.class);
            arg0.add("/order", controller.OrderController.class);
        }
        
        /**
         * 建议使用 JFinal 手册推荐的方式启动项目
         * 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
         */
        public static void main(String[] args) {
            JFinal.start("WebRoot", 80, "/", 5);
        }
    

    读取的是 Databaseconfig.txt 里面的数据库账号密码还有编码等信息


    TIM截图20200202204558.png

    读取代码具体实现

        @Override
        public void configPlugin(Plugins arg0) {
            C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"),
                    getProperty("username"),
                    getProperty("password")
                    );
            ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(c3p0Plugin);
            //配置model 
            activeRecordPlugin.addMapping("user", User.class);
            activeRecordPlugin.addMapping("orderfrom", Order.class);
            activeRecordPlugin.addMapping("phonemodle", Phonemodle.class);
            activeRecordPlugin.addMapping("engineer", Engineer.class);
            arg0.add(c3p0Plugin);
            arg0.add(activeRecordPlugin);
            activeRecordPlugin.setShowSql(true);
    
        }
    

    配置访问路由来映射我们对应访问的controller 层的代码逻辑

      /**
                * 添加接口方法
                 *   配置路由器
          *   
          *   
          */
        @Override
        public void configRoute(Routes arg0) {
            arg0.add("/user", controller.LoginController.class);
            arg0.add("/order", controller.OrderController.class);
        }
        
    

    创建modle 层 需要继承jfinal 里面的modle

    package model;
    import com.jfinal.plugin.activerecord.Model;
      /**
       * @author Administrator
       * xuqing
       * 用于登录注册的 modle 
       */
    
    public class User extends Model<User>{
        public static final  User   dao =  new User();
        
    }
    
    

    controller 控制层的编写 我们的controller 要继承 import com.jfinal.core.Controller 这个包下面的Controller
    如下代码是返回一个简单json的例子
    通过调用setAttr()方法和 renderJson(); 方法来返回json数据

    package controller;
    import java.util.List;
    import utils.util;
    import com.jfinal.aop.Before;
    import com.jfinal.core.Controller;
    import com.jfinal.ext.interceptor.POST;
    import model.Engineer;
    import model.User;
    public class LoginController extends Controller{
        //通过调用setAttr()方法和  renderJson(); 方法来返回json数据 
        public void index(){
            setAttr("message", "jfinal部署成功!");
            renderJson();
        } 
        
    }
    

    我们先跑一把 选中项目 run as run on Server 选择你本地关联的Tomcat

    TIM截图20200202212113.png
    我们通过控制台看到本地的tomcat 已经启动了
    TIM截图20200202212228.png
    我们现在用postman来访问测试下
    localhost 是本机IP地址 端口默认是8080 当然你也可以修改
    http://localhost:8080/jfinal_work/user/index TIM截图20200202212427.png

    到此这个项目我们已经启动了 还有连接数据库操作数据库增删改查的一些逻辑 我简单讲解下
    通过调用 getPara 来获取网络请求传过来的数据

    String  username =getPara("username");
    String  password =getPara("password");
    

    sql 语句尽量写在modle 或者是service 我这边是偷懒就写在了controller 里面了 各位同学在写的时候要养成写大型项目的好习惯把sql语句抽离出来写

     String   sql="select * from  xq   where  username = "+"'"+username+"'";
     User  user=User.dao.findFirst(sql);
    

    全部代码的实现如下

    package controller;
    import java.util.List;
    import utils.util;
    import com.jfinal.aop.Before;
    import com.jfinal.core.Controller;
    import com.jfinal.ext.interceptor.POST;
    import model.Engineer;
    import model.User;
    
    
    public class LoginController extends Controller{
        public void index(){
            setAttr("message", "jfinal部署成功!");
            renderJson();
        } 
    
        /**
         * 注册
         * xuqing  
         * 2018-1-22
         * 
         * 
         */
        public  void   register(){
       //通过调用 getPara 来获取网络请求传过来的数据   
     
            String  username =getPara("username");
            String  password =getPara("password");
            String   againpassword =getPara("againpassword");
              if(!util.isMobileNum2(username)){
                  setAttr("msg", "请输入正确格式的手机号码"); 
                  setAttr("code", "0");
                  renderJson();
                  return;
                  
              }
              if(!password.equals(againpassword)){
                  setAttr("msg", "两次输入的密码不一致"); 
                  setAttr("code", "0");
                  renderJson();
                  return;
              }
        //  sql  语句尽量写在modle 或者是service 我这边是偷懒就写在了controller 里面了 各位同学在写的时候要养成写大型项目的好习惯把sql语句抽离出来写 
             String   sql="select * from  xq   where  username = "+"'"+username+"'";
            User  user=User.dao.findFirst(sql);
            
            if(user==null){
                user=new  User();   
                user.set("username", username);
                user.set("password", password);
                user.save();
                setAttr("msg", "注册成功");
                setAttr("code", "200");
            } else{
                  setAttr("msg", "已经存在此账号");
                  setAttr("code", "0");
            }
            renderJson();
    
        }
        
        public  void  selectuseralldata(){
            String  sql ="select * from  xq";
          List<User>listdata =User.dao.find(sql);
          setAttr("listdata", listdata);
          renderJson();
        }
        
            /**
             * 
             *登录的
             *xuqing
             *2018-1-22
             *
             */
        public  void     login(){
            String    username=getPara("username");
            String    password=getPara("password");
            String  sql ="select  * from  xq where username ="+"'"+username+"'";
            User  user=User.dao.findFirst(sql);
            
            try {
                if(user==null){
                    setAttr("msg", "不存在此用户");
                      setAttr("code", "0");
                }else{
                    if(user.get("password").equals(password)){
                        String  sql2="select * from   engineer where phone = "+"'"+username+"'";
                        Engineer engineer=Engineer.dao.findFirst(sql2);
                        if(engineer!=null){
                            setAttr("allow","200");
                            setAttr("allowmsg","是工程师身份");
                        }else {
                            setAttr("allow","0");
                            setAttr("allowmsg","不是工程师身份");
                            
                        }
                                    
                        setAttr("msg", "登录成功");
                          setAttr("code", "200");
                          setAttr("userid", user.get("id"));
                         
                        
                    }else{
                        setAttr("msg", "用户名或者密码错误");    
                          setAttr("code", "0");
                    
                    }
                }
                
            } catch (Exception e) {
              setAttr("msg", "网络异常登录失败");
            }
            
            renderJson();
        }
           /***
            * 修改密码
            * 通过旧密码修改新密码
            * 
            */
        public  void  updatepsw(){
             String  userid=getPara("userid");
             String oldpsw =getPara("oldpsw");
             String newpsw =getPara("newpsw");
             String againpsw =getPara("againpsw");
             String  sql="select * from   xq   where id="+userid;
             User user=User.dao.findFirst(sql);
             if(user!=null){
                 if(user.get("password").equals(oldpsw)){
                     if(newpsw.equals(againpsw)){
                         user=User.dao.findById(userid);
                         user.set("password", newpsw);
                         user.update();
                         setAttr("msg", "修改密码成功"); 
                     }else{
                         setAttr("msg", "两次密码不一致"); 
                     }
                    
                 }else{
                    setAttr("msg", "原密码不正确"); 
                     
                 }
              
             }
             
            renderJson();
       
        }
        public  void  getuser(){
            String  id=getPara("id");
            String  sql ="select  * from  xq  where id = "+id;
            User  user=User.dao.findFirst(sql);
            setAttr("user", user);
            renderJson();
        }
    }
    

    整个项目从部署到获取前端或者移动端传过来的数据的获取 还有数据库的增删改查 都有代码示例和说明 , 整个框架搭建不算很复杂虽然没有spring boot 那简单快速 但是整个框架比较的轻量化 适合快速的开发小型项目, 拓展性也很强大 所以分享给大家 。
    项目地址:https://gitee.com/qiuyu123/eclipse_adt.git

    最后总结:

    我也是学习Java EE没多久的新手(之前做安卓和混编的 ) 因为今年湖北疫情严重 春节假期延长在家没啥事做就学习下 之前就了解过的Java Web极速开发框架jfinal 框架 ,整个工程创建到运行成功 对于有Java web基础的同学难度不算太大 比较顺利 。教程有不足和错误的地方希望大家及时的指正,有兴趣的朋友也可以加我QQ/微信 有空多多交流 个人微信/QQ1693891473

    QQ 交流群:

    92437359.png

    相关文章

      网友评论

          本文标题:Java Web 极速开发框架jfinal 的搭建

          本文链接:https://www.haomeiwen.com/subject/bgxcxhtx.html