JFinal结合百度BAE进行开发

使用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做的还是挺不错的。

再把这个工程的代码结构截图贴出来

转载于:https://my.oschina.net/capjes/blog/162115

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值