本篇介绍JFinal项目的搭建和简单功能实现。
JFinal项目搭建
项目搭建
新建一个Dynamic Web Project
Target runtime 为
Default Output Folder 推荐使用WebRoot\WEB-INF\classes
*此处的 Default out folder 必须要与WebRoot\WEB-INF\classes 目录完全一致才可以使用 JFinal 集成的 Jetty 来启动项目。 *
修改 Content directory,推荐输入WebRoot。
jfinal-xxx.jar 与jetty-server-8.1.8.jar 拷贝至项目 WEB-INF\lib 下即可。
Tips:这里的WEB-INF\lib 为WebRoot目录下的和上面配置的保持一致,当然你也可以使用WebContent
修改 web.xml:
jfinal
com.jfinal.core.JFinalFilter
configClass
config.DemoConfig
jfinal
/*
添加DemoConfig:
package config;
import com.jfinal.config.*;
import controller.HelloController;
public class DemoConfig extends JFinalConfig {
// 配置常量值 `如开发模式常量 devMode 的配置,默认视图类型 ViewType的配置`
public void configConstant(Constants me) {
me.setDevMode(true);
}
// 配置 JFinal 访问路由 如下代码配置了将”/hello”映射到 HelloController 这个控制器 http://localhost/hello 将 访 问 HelloController.index() 方
public void configRoute(Routes me) {
me.add("/hello", HelloController.class);
}
// 配置 JFinal 的 Plugin 如数据库访问插件
public void configPlugin(Plugins me) {
}
// 配置 JFinal 的全局拦截器
public void configInterceptor(Interceptors me) {
}
// 配置JFinal的Handler
public void configHandler(Handlers me) {
}
}
添加HelloController:
package controller;
import com.jfinal.core.Controller;
public class HelloController extends Controller {
public void index() {
renderText("Hello JFinal World.");
}
}
Run As --> Run configurations
访问http://localhost/hello
上面的启动配置也可以使用一个任意的main方法代替。在任意一个类文件中添加一个main启动集成的jetty
如在DemoConfig中:
public static void main(String[] args) {
// eclipse 下的启动方式 指定端口和路径
JFinal.start("WebRoot", 8088, "/Demo", 5);
}
连接mysql数据库
修改DemoConfig:
//加载datasource.properties 数据库配置
public void configConstant(Constants me) {
loadPropertyFile("datasource.properties");
me.setEncoding("UTF-8");
me.setDevMode(true);
}
//连接mysql数据库
public void configPlugin(Plugins me) {
C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password").trim());
me.add(c3p0Plugin);
ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
me.add(arp);
}
//更改启动项目配置 现在就可以直接 `Run As` -->`Java Appliaction` 访问地址`http://localhost:8088/Demo/index.html`
public static void main(String[] args) throws Exception {
JFinal.start("WebRoot", 8088, "/Demo", 5);
}
添加datasource.properties:
jdbcUrl = jdbc:mysql://121.40.78.44/zhitong_test?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
user = root
password =Ne0Print1202
devMode = true
简单的增删查改功能
下面简单实现账号的增删查改。(不要太在意逻辑...)
添加一个简单的html页面,index.html
hello/addUser、hello/deleteUser、hello/findUser和hello/updateUser分别对应着HelloController的四个方法
账号
密码
添加
删除
查询
修改
$(document).ready(function(){
// 点击添加调用 HelloController中的addUser方法,路径"hello/addUser"
// 路径在 DemoConfig - configRoute 已配置好为 /hello
// 账号添加 传入参数 ”账号密码”
$("#add").click(function(){
var _userName = $("#username").val();
var _password = $("#password").val();
$.post("hello/addUser",{userName:_userName,password:_password},function(data){
alert(data);
})
});
// 账号删除 传入参数 ”账号密码”
$("#delete").click(function(){
var _userName = $("#username").val();
var _password = $("#password").val();
$.post("hello/deleteUser",{userName:_userName,password:_password},function(data){
alert(data);
})
});
// 密码查询 传入参数 ”账号” 根据账号 查找密码
$("#find").click(function(){
var _userName = $("#username").val();
$.post("hello/findUser",{userName:_userName},function(data){
alert(data);
})
});
// 密码修改 传入参数 ”账号 新密码” 根据账号 修改密码
$("#update").click(function(){
var _userName = $("#username").val();
var _password = $("#password").val();
$.post("hello/updateUser",{userName:_userName,password:_password},function(data){
alert(data);
})
});
})
在service包中添加和HelloController对应的HelloService
这里使用JFinal独创的 Db + Record 模式 ,提供了Model类之外的数据库操作功能。它充当了MVC中的Model层。
package service;
import java.util.List;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
public class HelloService {
public static void addUser(Record record){
Db.save("zt_user", record);
}
public static void deleteUser(String userName,String password){
Db.update("delete from zt_user where name = "+userName+" and password = "+password+" ");
}
public static Record findUser(String userName){
return Db.findFirst("select password from zt_user where name = "+userName+" ");
}
public static void updateUser(String userName,String password){
Db.update("update zt_user set password = "+password+" where name = "+userName+" ");
}
}
然后修改HelloController
jfinal Controller类提供了getPara系列方法用来从请求中获取参数。
这里我们使用getPara((String string)来获取账号和密码。
import java.util.List;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Record;
import service.HelloService;
import com.jfinal.core.Controller;
public class HelloController extends Controller {
public void addUser() {
String userName = getPara("userName");
String password = getPara("password");
Record user = new Record().set("name", userName).set("password", password);
HelloService.addUser(user);
renderText("添加成功");
}
public void deleteUser() {
String userName = getPara("userName");
String password = getPara("password");
HelloService.deleteUser(userName, password);
renderText("删除成功");
}
public void findUser() {
String userName = getPara("userName");
Record record = HelloService.findUser(userName);
renderText(""+record.get("password")+"");
}
public void updateUser() {
String userName = getPara("userName");
String password = getPara("password");
HelloService.updateUser(userName, password);
renderText("修改成功");
}
}
other
同样你也可以使用Model类对应configPlugin配置 。
DemoConfig:
arp.addMapping("user", User.class);
建立数据库表名到 Model 的映射关系,然后使用继承Model的方法。
public class User extends Model {
public static final User dao = new User();
}
项目部署
1.1 Jfinal项目部署和web项目相同,将项目webroot下的文件(包括webroot)拷贝到服务器tomcat的webapps目录下面。
2.2 然后删除webroot中的jetty-server-8.1.8.jarjar包
3.3startup 运行tomcat即可
Tips: 项目JDK版本要和服务器JDK版本一致,高版本编译的项目不能跑在低版本上面。
Tips: 使用render html 404,可以使用redirect
1:redirect 是重定向,当服务端向客户端响应 redirect后,并没有提供任何view数据进行渲染,仅仅是告诉浏览器响应为 redirect,以及重定向的目标地址
2:浏览器收到服务端 redirect 过来的响应,会再次发起一个 http 请求
3:由于是浏览器再次发起了一个新的 http 请求,所以浏览器地址栏中的 url 会发生变化
4:浏览中最终得到的页面是最后这个 redirect url 请求后的页面
5:所以redirect("/user/login.html") 相当于你在浏览器中手动输入 localhost/user/login.html