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

前言:

这个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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容