JFinal結合百度BAE進行開發

使用JFinal結合百度BAE的雲環境(Jetty)、雲數據庫(MYSQL)進行開發網站。 html

1.申請百度開發者帳號,登陸百度開發者中心。 java

2.在百度開發者管理中心的管理面板中,快速建立應用,新建一個WEB網站。 mysql

接着填寫應用的信息 web

建立成功後: sql

API KEY和Secret Key在後面的百度雲數據庫配置時會用到。 數據庫


而後在環境中配置網站的運行環境: apache

選擇肯定。而後選擇建立應用的版本。 api

建立成功後。 服務器

紅色部分爲SVN的地址,複製這個地址到Eclipse中check工程到本地。 app

用戶名和密碼,爲你的百度開發者帳號和密碼。

Finish後,工程建好後的結構:

加入以下的包:

把包添加到工程中:

看到工程裏面有錯誤,引入關聯Jetty的包中的類。

3.整個工程是不能運行在Tomcat中的,能夠對工程進行配置適合Tomcat的工程結構,具體怎麼配置的本身去作嘗試。

可是工程是可使用Jetty運行的,在前面引入了Jetty,測試就用Jetty做爲應用服務器進行測試,方便。

4.配置JFinal到工程裏面。

4.1.創建JFinal的config類BaeConfig。

package com.baetest.config;

import com.baetest.control.Index;
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.core.JFinal;

public class BaeConfig extends JFinalConfig{
	@Override
	public void configConstant(Constants me) {
		me.setViewType(ViewType.JSP);
	}

	@Override
	public void configRoute(Routes me) {
		me.add("/",Index.class);
	}

	@Override
	public void configPlugin(Plugins me) {
		
	}

	@Override
	public void configInterceptor(Interceptors me) {
		
	}

	@Override
	public void configHandler(Handlers me) {
		
	}
	
	public static void main(String[] args) {
		JFinal.start("WebRoot", 80, "/", 5);
	}
}

4.2.創建Control類Index

package com.baetest.control;

import com.jfinal.core.Controller;

public class Index extends Controller {
	public void index() {
		System.out.println("Hello BAE with JFianl");
	}
}

4.4.在web.xml中配置JFinal的過濾器。

<!-- Jfinal的過濾器 -->
	<filter>
		<filter-name>jfinal</filter-name>
		<filter-class>com.jfinal.core.JFinalFilter</filter-class>
		<init-param>
			<param-name>configClass</param-name>
			<param-value>com.baetest.config.BaeConfig</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>jfinal</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
4.5.作完上面的操做事後,就能夠運行了。在BaeConfig中Run Application運行Jetty進行測試。

運行結果:

5.上面運行成功後,下面進行百度雲數據庫的配置使用。因爲BAE,不容許用戶獲取固定的數據庫地址,所以BAE提供了動態獲取數據庫鏈接的方式。

5.1.去百度BAE下載動態獲取雲數據庫的鏈接的Demo網頁

<%@ page language="java" import="java.util.*,java.net.URL,java.sql.*,com.baidu.bae.api.util.BaeEnv" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Hello World</title>
  </head>
  <body>
    <%
        //(1)指定服務地址,其中dbname須要本身修改
        //String dbUrl = "jdbc:mysql://sqld.duapp.com:4050/dbname";
        //(2)直接從請求header中獲取ip、端口、用戶名和密碼信息
	//String host = request.getHeader("BAE_ENV_ADDR_SQL_IP");
	//String port = request.getHeader("BAE_ENV_ADDR_SQL_PORT");
	//String username = request.getHeader("BAE_ENV_AK");
	//String password = request.getHeader("BAE_ENV_SK");
       //(3)從線程變量BaeEnv接口獲取ip、端口、用戶名和密碼信息
	String host = BaeEnv.getBaeHeader(BaeEnv.BAE_ENV_ADDR_SQL_IP);
	String port = BaeEnv.getBaeHeader(BaeEnv.BAE_ENV_ADDR_SQL_PORT);
	String username = BaeEnv.getBaeHeader(BaeEnv.BAE_ENV_AK);
	String password = BaeEnv.getBaeHeader(BaeEnv.BAE_ENV_SK);
	String driverName = "com.mysql.jdbc.Driver";
	String dbUrl = "jdbc:mysql://";
	String serverName = host + ":" + port + "/";
 
 %>
 <%=serverName%>
  </body>
</html>
將上面的網頁代碼放入到工程目錄下。網頁有代碼引用錯誤,無論它,BAE環境中有這些類,會被引用的。只是在本地不能運行。

5.2.將整個工程代碼經過SVN提交到BAE環境中。經過配置的url絕對路徑訪問bae.jsp的頁面。結果如圖:

複製打印的這個地址到下面代碼中

5.3.在BaeConfig這個類中的public void configPlugin(Plugins me)方法中加入數據庫鏈接配置。

上面的,在使用C3PO時,老是出現沒法找到數據庫的異常。所以只有直接使用Mysql提供的數據庫源類。我是參考這篇文章的方法:

http://note.youdao.com/share/?id=72f1b9e0d3b97c5c0a62503a750e5cf5&type=note

5.4.在雲數據庫中添加一個測試的表格,而且在代碼中建好Model。

5.5.在Index類中使用新建的Model

package com.baetest.control;

import java.util.List;

import com.baetest.model.Test;
import com.jfinal.core.Controller;

public class Index extends Controller {
	public void index() {
		List<Test> testList = new Test().all();
		renderJson(testList);
	}
}
5.6.提交代碼到BAE上,進行測試,會出現異常或者是沒法訪問,到BAE的環境中查看運行的日誌就會找到緣由。

查看日誌:

出現的日誌:

初步判斷應該是日誌出現問題了,後來我在百度的文檔中發現BAE有本身日誌,好像是使用JDK自帶的日誌。下載百度的日誌包log4j-adapter-1.0.0.jar

加入日誌的代碼:

package com.baidu.bae.api.baelog;

import org.apache.log4j.WriterAppender;

public class BaeAppender extends WriterAppender {
	
}
將代碼提交到BAE,再次打開地址測試:

運行成功,偶也,你也能夠試試,百度的BAE作的仍是挺不錯的。

再把這個工程的代碼結構截圖貼出來

相關文章
相關標籤/搜索