1. 程式人生 > >新手入門-如何使用JFinal開發javaweb(1)

新手入門-如何使用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

package 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);
	}
}
↓此是HelloController.java
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的使用感悟。