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

举报
xq9527 发表于 2022/06/09 20:11:26 2022/06/09
【摘要】 前言:这个Java web服务端的jfinal 框架最早出来上班的时候那个公司的所使用,之前有基本的了解 。 现在只是重新学习了就从零开始的搭建一个基础的项目分享给大家 如果有不足和错误的地方望各位及时指正,废话话不多说我们正式开始 1开发环境:建议使用myeclispe 或者基础版本的eclipse 装插件都可以 ...

前言:

这个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包)
6865547-2644d6ea7fb65aad.png

二 数据库账号密码jdbcUrl配置

6865547-bbc26379989cf9ef.png

jdbcUrl = jdbc:mysql://localhost/test?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
username = root  //换成自己的数据库的账号和 密码
password = 123456 
showSql=true
三 jfinal 的web.xm的配置

6865547-99e9fc5a4dcc98c2.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 里面的数据库账号密码还有编码等信息

6865547-784a2e41a31c1e99.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
6865547-1df4854e52e4847a[0].png
我们通过控制台看到本地的tomcat 已经启动了
6865547-e73a7b98e561f77e.png
我们现在用postman来访问测试下
localhost 是本机IP地址 端口默认是8080 当然你也可以修改
http://localhost:8080/jfinal_work/user/index
6865547-a13ea79da72ce976.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 交流群:

6865547-920ae353e6648646.png
92437359.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。