新手入門-如何使用JFinal開發javaweb(1)
博主本人是菜鳥。寫這篇部落格的原因是為了讓和我一樣的入門級菜鳥少走彎,還有就是加深我的理解。
JFinal框架是國產的很輕量級的開發框架。能讓程式設計師寫的程式碼精簡很多,開發效率從而更快。
我是寫了一個JFinal版的資料庫驗證+跳轉的Demo。
介紹開始:
編輯器:MyEclipse;
資料庫:MySQL;
伺服器:tomcat;
1 首先新建web專案
要強調的是Target runtime必須選擇為None。然後點選兩次Next,選中建立web.xml。finish~~~
2 匯入支撐專案的jar包(包括JFinal、Mysql、JDBC)
必須匯入這四個jar包。其中:(1) c3p0是支撐JDBC的;(2)jfina是支撐jfinal的,jfinal預設使用freemarker作為MVC的View,所以也要匯入;(3)mysql-conncetor是支撐Mysql連線的
3 寫java程式碼
在src資料夾中建立四個package,分別為config,controller, model,service。其中config包裡是全域性配置檔案,controller對應的就是MVC中的Control,model與service組成MVC的Model。Control就是控制前後臺的互動,model對應資料庫的各個表以及派生model類,service就是寫sql語句的地方。
config中有三個方法最重要configConstant、configPlugin、configRoute
(1)configConstant:此方法用來配置 JFinal 常量值
(2)configPlugin:此方法用來配置 JFinal 的 Plugin,比如配置 C3p0 資料庫連線池外掛與 ActiveRecord資料庫訪問外掛
(3)configRoute:此方法用來配置 JFinal 訪問路由,比如將”/hello”對映到 HelloController 這個控制器
說完這些我們來看程式碼
↓此為BaseConfig.java
↓此是HelloController.javapackage config; import model.User; 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.kit.PropKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.c3p0.C3p0Plugin; import controller.HelloController; public class BaseConfig extends JFinalConfig { @Override public void configConstant(Constants me) { // TODO Auto-generated method stub PropKit.use("demo_config.txt"); me.setDevMode(PropKit.getBoolean("devMode", false)); } @Override public void configHandler(Handlers me) { // TODO Auto-generated method stub } @Override public void configInterceptor(Interceptors me) { // TODO Auto-generated method stub } @Override public void configPlugin(Plugins me) { // TODO Auto-generated method stub C3p0Plugin c3p0Plugin = new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim()); me.add(c3p0Plugin); ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin); me.add(arp); arp.addMapping("user", User.class); } @Override public void configRoute(Routes me) { // TODO Auto-generated method stub me.add("/hello", HelloController.class); } }
package controller;
import model.User;
import service.UserService;
import com.jfinal.core.Controller;
public class HelloController extends Controller {
UserService userService = new UserService();
public void index()
{
String name = getPara("name");
String password = getPara("password");
User user = new User();
user = null;
user = userService.findUser(name, password);
if(user != null)
render("/html/hello.html");
}
}
↓此是User.java
package model;
import com.jfinal.plugin.activerecord.Model;
public class User extends Model<User> {
public static final User dao = new User();
}
↓此是UserService.java
import model.User;
public class UserService {
public User findUser(String name,String password)
{
User user = new User();
user = null;
String sql = "select * from user where name='"+name+"' and password='"+password+"';";
user = User.dao.findFirst(sql);
System.out.printf("sql:"+sql);
return user;
}
}
4 千萬不能忘了Propkit要引用的txt檔案
Propkit是JFinal自帶的工具類。Propkit可以用來載入一個或多個配置檔案。在該Demo中PropKit用在BaseConfig的configConstant方法中。
需要強調的是,載入的配置檔案必須要放在src下。原因是:友情連結http://www.oschina.net/question/2461549_2148022?fromerr=ceMjBkEb
↓此是demo_config.txt
jdbcUrl = jdbc:mysql://127.0.0.1/jfinal_test?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
user = root
password = root
devMode = true
5 寫前臺介面
在WebRoot下建立資料夾html,在html資料夾下建立hello.html與login.html。其中hello.html裡什麼都不用新增,login.html設計一個表單提交。
↓此是login.html
<!DOCTYPE html>
<html>
<head>
<title>login.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<form action="../hello" method="post">
<table>
<tr>
<td>name:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>password:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Login"></td>
</tr>
</table>
</form>
</body>
</html>
6 修改web.xml檔案
web.xml在WebRoot/WEB-INF資料夾下
↓此是web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>JFinalDemo</display-name>
<filter>
<filter-name>JFinalDemo</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>config.BaseConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>JFinalDemo</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
7 資料庫
建立資料庫的語句與插入的測試資料。
CREATE DATABASE IF NOT EXISTS jfinal_test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE TABLE user (id INT NOT NULL AUTO_INCREMENT,name CHAR(10) NOT NULL,password CHAR(10) NOT NULL,PRIMARY KEY(id));
insert into user(name,password) values('test','test');
8 執行
賬戶密碼都是test,點選login後,跳轉成功
總結
由於本人並沒有structs經驗,MVC也只是入門級,所以剛開始閱讀JFinal的文件時完全不會配置,但是認真梳理一下,從頭開始一步步的匯入支撐的檔案,並結合自己的MVC體會,算是會用JFinal了。在後面的一段時間內,我會經常與JFinal打交道,所以以後還會寫一些對JFinal的使用感悟。