Jfinal 項目搭建

本篇介紹JFinal項目的搭建和簡單功能實現。javascript

JFinal項目搭建

項目搭建

新建一個Dynamic Web Projecthtml

outPut

Target runtimejava

outPut

Default Output Folder 推薦使用WebRoot\WEB-INF\classesmysql

此處的 Default out folder 必需要與WebRoot\WEB-INF\classes 目錄徹底一致纔可使用 JFinal 集成的 Jetty 來啓動項目。 jquery

修改 Content directory,推薦輸入WebRootgit

outPut

jfinal-xxx.jarjetty-server-8.1.8.jar 拷貝至項目 WEB-INF\lib 下便可。github

  • Tips:這裏的WEB-INF\libWebRoot目錄下的和上面配置的保持一致,固然你也可使用WebContent

修改 web.xmlweb

<filter>
    <filter-name>jfinal</filter-name>
    <filter-class>com.jfinal.core.JFinalFilter</filter-class>
    <init-param>
        <param-name>configClass</param-name>
        <param-value>config.DemoConfig</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>jfinal</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

添加DemoConfigsql

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

outPut

  • 訪問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/addUserhello/deleteUserhello/findUserhello/updateUser分別對應着HelloController的四個方法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <span>帳號</span>
        <input type="text" id="username" />
        <span>密碼</span>
        <input type="text" id="password" />
        <button id="add">添加</button>
        <button id="delete">刪除</button>
        <button id="find">查詢</button>
        <button id="update">修改</button>
    </body>
    <script type="text/javascript" src="js/jquery-1.9.1.js" ></script>
    
    <script>
        
        $(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);
                })
                
            });     
        })
    </script>
</html>

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("修改爲功");
    }
    
}

outPut

outPut

other

一樣你也可使用Model類對應configPlugin配置 。

DemoConfig

arp.addMapping("user", User.class);

創建數據庫表名到 Model 的映射關係,而後使用繼承Model的方法。

public class User extends Model<User> {  

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

源代碼

相關文章
相關標籤/搜索