使用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作的仍是挺不錯的。
再把這個工程的代碼結構截圖貼出來