- 目錄結構
- DemoConfig類
package demo.config;
import com.jfinal.config.*;
import com.jfinal.core.JFinal;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
import demo.pojo.User;
import demo.controller.UserController;
/**
* @author yuyang
*/
public class DemoConfig extends JFinalConfig {
@Override
public void configConstant(Constants me) {
loadPropertyFile("config.properties");
// PropKit.use("config.properties");
// me.setBaseViewPath("/template");
// me.setDevMode(PropKit.getBoolean("devMode", true));
me.setViewType(ViewType.JSP);
}
@Override
public void configRoute(Routes me) {
me.add("/", UserController.class);
me.add("/user", UserController.class);
}
public void configEngine(Engine engine) {
}
@Override
public void configPlugin(Plugins me) {
// DruidPlugin druidPlugin=new DruidPlugin("jdbc:mysql://localhost/jfinal_demo","root","123456","com.mysql.jdbc.Driver");
// me.add(druidPlugin);
//
// me.add(getActiveRecordPlugin(druidPlugin));
/**
* 配置Mysql支援
*/
//配置c3p0資料庫連接配接池插件
C3p0Plugin cp = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user").trim(), getProperty("password").trim());
me.add(cp);
//配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(cp);
me.add(arp);
arp.setShowSql(true);
//映射Blog表到Blog模型
arp.addMapping("user", User.class);
/**
* 配置Oracle支援
*/
// //配置c3p0資料庫連接配接池插件
// C3p0Plugin cp = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password"),getProperty("jdbcDriver"));
// /*//配置Oracle驅動
// cp.setDriverClass(getProperty("jdbcDriver"));*/
// me.add(cp);
// //配置ActiveRecord插件
// ActiveRecordPlugin arp = new ActiveRecordPlugin(cp);
// me.add(arp);
// //配置Oracle方言
// arp.setDialect(new OracleDialect());
// //配置屬性名(字段名)大小寫不敏感容器工廠
// arp.setContainerFactory(new CaseInsensitiveContainerFactory());
// //映射test_blog表到Blog模型(我在Oracle資料庫中建的表是這個表名)
// arp.addMapping("TEST_BLOG","ID", Blog.class);
}
private ActiveRecordPlugin getActiveRecordPlugin(DruidPlugin druidPlugin) {
ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
//這裡是資料庫表名,主鍵
arp.addMapping("user","id", User.class);
return arp;
}
@Override
public void configInterceptor(Interceptors me) {
}
@Override
public void configHandler(Handlers me) {
}
public static void main(String[] args) {
JFinal.start("src/main/webapp",81,"/");
}
}
- UserController
package demo.controller;
import com.jfinal.core.Controller;
import demo.pojo.User;
import java.util.List;
/**
* @author yuyang
* @version V1.0
* @Package demo
* @Description: TODO
* @date 2019-4-10 8:41
*/
public class UserController extends Controller {
/**
* 直接通路user位址進入list.jsp
*/
public void index(){
List<User> users = User.userDao.find("select * from user");
setAttr("users",users);
System.out.print("得到的資料是"+users.size()+"條");
render("/list.jsp");
}
/**
* 通路user/form進入from.jsp頁面
*/
public void form(){
Integer id = getParaToInt(0);
if(id!=null&&id>0){
setAttr("user",User.userDao.findById(id));
}
render("form.jsp");
}
/**
* 送出方法
*/
public void submit(){
User user = getModel(User.class,"user");
user.save();
redirect("/user");
}
/**
* 編輯方法
*/
public void edit(){
form();
}
/**
* 删除方法
*/
public void del(){
User.userDao.deleteById(getPara(0));
redirect("/user");
}
/**
* 更新方法
*/
public void update(){
User user = getModel(User.class,"user");
user.update();
redirect("/user");
}
}
- user類
package demo.pojo;
import com.jfinal.plugin.activerecord.Model;
/**
* @author yuyang
* @version V1.0
* @Package demo
* @Description: TODO
* @date 2019-4-10 8:41
*/
public class User extends Model<User> {
//Model的dao方法
public static final User userDao = new User();
//靜态常量
public static final int SEX_MALE = 1;//男
public static final int SEX_FEMAQL = 2;//女性
}
- config.properties
jdbcUrl=jdbc:mysql://localhost:3306/XXX?useUnicode=true&characterEncoding=utf8 user=root password = devMode =true showSql = true
- log4g.properties
log4j.rootLogger=WARN, stdout, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
# Output to the File
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=F/jfinal-demo.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
- form.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.css">
<html>
<head>
<title>使用者注冊</title>
</head>
<body>
<div id="main" class="container">
<div class="row">
<div class="col-lg-6 col-sm-6 col-md-6">
<form action="${user==null?'/user/submit':'/user/update'}" method="post">
<input type="hidden" name="user.id" value="${user.id}">
<div class="form-group">
<label>使用者名</label>
<input type="text" name="user.username" value="${user.username}" class="form-control" placeholder="請輸入使用者名">
</div>
<div class="form-group">
<label>年齡</label>
<input type="text" name="user.age"value="${user.age}" class="form-control" placeholder="請輸年齡">
</div>
<div class="form-group">
<label>性别</label>
<div class="radio-inline">
<input type="radio" name="user.sex"<c:if test="${user.sex!=null && user.sex==1}">checked="checked" </c:if>value="1">男
</div>
<div class="radio-inline">
<input type="radio"name="user.sex"<c:if test="${user.sex!=null && user.sex==2}">checked="checked" </c:if> value="2">女
</div>
</div>
<div class="form-group">
<label>備注</label>
<textarea name="user.remark" value="${user.remark}" style="height: 70px" class="form-control" placeholder="請輸入備注">${user.remark}</textarea>
</div>
<div style="text-align: center" >
<button type="submit" class="btn btn-primary" style="width: 120px">送出</button>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
- list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>使用者清單</title>
</head>
<link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/jquery/2.2.2/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
<body>
<div class="pull-left">
<a href="/user/form" class="btn bg-primary">新增使用者</a>
</div>
<table class="table table-bordered table-hover">
<thead>
<tr>
<th colspan="5" align="center">使用者資訊表</th>
</tr>
<tr>
<th>使用者ID</th>
<th>姓名</th>
<th>性别</th>
<th>年齡</th>
<th>使用者描述</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.sex}</td>
<td>${user.age}</td>
<td>${user.remark}</td>
<td><a class="btn btn-primary btn-sm" href="/user/edit/${user.id}">修改</a> <a class="btn btn-danger btn-sm"
href="/user/del/${user.id}">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<name>jfinal-test</name>
<groupId>com.hand</groupId>
<artifactId>jfinal-test</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
<configuration>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8888</port>
<maxIdleTime>30000</maxIdleTime>
</connector>
</connectors>
<webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory>
<contextPath>/</contextPath>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>8.1.8</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp</artifactId>
<version>9.3.0.M1</version>
</dependency>
</dependencies>
</project>
總結:第一次搭建項目遇見很多錯誤,幾乎都是jar包缺失引起,要明白每個功能對應得jar依賴,不要盲目去抄襲,項目無論怎樣報錯,都是可以解決的,重要的是有耐心,一步一步去調試,不積跬步無以至千裡。緻每個初學者,加油!