使用JFinal结合百度BAE的云环境(Jetty)、云数据库(MYSQL)进行开发网站。
1.申请百度开发者账号,登录百度开发者中心。
2.在百度开发者管理中心的管理面板中,快速创建应用,新建一个WEB网站。
接着填写应用的信息
创建成功后:
API KEY和Secret Key在后面的百度云数据库配置时会用到。
然后在环境中配置网站的运行环境:
选择确定。然后选择创建应用的版本。
创建成功后。
红色部分为SVN的地址,复制这个地址到Eclipse中check工程到本地。
用户名和密码,为你的百度开发者账号和密码。
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做的还是挺不错的。
再把这个工程的代码结构截图贴出来