前言:
这个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.pngjdbcUrl = 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
我们通过控制台看到本地的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
网友评论