锁定老帖子 主题:Android游戏开发之服务器端
精华帖 (15) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-09
最后修改:2010-01-09
首先我不知道这篇文章发到Android开发板块是否适合的,因为只部分内容大多数是有关Google appEngine的,但因为这是AppEngine和Android的配合开发,故对Android开发者也有一定的参考意义,故发到这里来了。
Demo1:对象的存储:
步骤1.定义JavaBean:
package com.ray.test; import java.util.Date; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; //标记对象可以持久化 @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Employee { //标记主键,作以后查询之用 @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private String firstName; @Persistent private String lastName; @Persistent private Date birthDate; public Employee(String firstName, String lastName, Date birthDate) { this.firstName = firstName; this.lastName = lastName; this.birthDate = birthDate; } public String getFirstName() { return firstName; } }
步骤2.存取Bean(可以写在Servlet的doGet()或者doPost()里面):
package com.ray.test; import java.io.IOException; import java.util.Date; import javax.jdo.PersistenceManager; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp)throws IOException { resp.setContentType("text/plain"); Employee e = new Employee("Alfred", "Smith", new Date()); //获取用以存取对象的PersistenceManager PersistenceManager pm = PMF.get().getPersistenceManager(); try { //存储对象 resp.getWriter().println("saving object!"); pm.makePersistent(e); }catch(Exception ex){ resp.getWriter().println("cannot persistent!"); ex.printStackTrace(); } finally { pm.close(); } try{ //再次获取用以存取对象的PersistenceManager pm = PMF.get().getPersistenceManager(); //由主键检索对象,Alfred之前被定义为主键的 Employee newE = pm.getObjectById(Employee.class, "Alfred"); //读取新对象的信息检测对象检索是否成功 resp.getWriter().println("Employee:"+newE.getFirstName()); }catch(Exception ex){ ex.printStackTrace(); resp.getWriter().println("cannot get data!"); pm.close(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { this.doGet(req, resp); } }
其中PMF类的代码如下,没看错应该是个单例模式:
package com.ray.test; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManagerFactory; public final class PMF { private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional"); private PMF() {} public static PersistenceManagerFactory get() { return pmfInstance; } }
Demo2.使用Google 账户认证服务:
package com.ray.test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; public class GoogleAccount extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //创建用户服务 UserService userService = UserServiceFactory.getUserService(); String thisURL = req.getRequestURI(); //通过请求对象的 getUserPrincipal() 方法测试用户是否使用 Google 帐户登录 if (req.getUserPrincipal() != null) { //如果有登录,则创建Login地址 resp.getWriter().println("<p>Hello, " + req.getUserPrincipal().getName() + "! You can <a href=\"" + userService.createLogoutURL(thisURL) + "\">sign out</a>.</p>"); } else { //如果没有登录,则创建Login地址 resp.getWriter().println("<p>Please <a href=\"" + userService.createLoginURL(thisURL) + "\">sign in</a>.</p>"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
手机访问登录效果:
需要特别指出的是,Google通过在web.xml里面配置权限来区分登录者的权限,可以用下面的代码来配置安全常量从而划定只能由admin访问的区域---admin路径下的所有页面:
<security-constraint> <web-resource-collection> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> 参考资料: http://code.google.com/intl/zh-CN/appengine/docs/java/overview.html 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-10
谢谢了,每次你分享你的经验,对大家来说都是一种提升,更是一种鼓舞。
|
|
返回顶楼 | |
发表时间:2010-01-10
以前对appengine只是有所耳闻,从来没有真正的用过,感谢楼主的分享,又多学了点东西,呵呵~
|
|
返回顶楼 | |
发表时间:2010-01-10
BarryWei 写道 谢谢了,每次你分享你的经验,对大家来说都是一种提升,更是一种鼓舞。
大家一起进步啊,gae java方面的资料太少了,另外就是gap近来大有墙的趋势,不过如果是面对国外用户的android应用的话,gae还是可以使用的! |
|
返回顶楼 | |
发表时间:2010-01-10
感谢楼主分享。问个问题:
步骤2.存取Bean(可以写在Servlet的doGet()或者doPost()里面): 这里bean的数据是从google服务器那边取得的吗? 多个用户取得的都是一样的值吗? |
|
返回顶楼 | |
发表时间:2010-01-10
ahao99 写道 感谢楼主分享。问个问题: 步骤2.存取Bean(可以写在Servlet的doGet()或者doPost()里面): 这里bean的数据是从google服务器那边取得的吗? 多个用户取得的都是一样的值吗? 是从服务器取到的,多个用户取到的是一样的,当然,你可以加权限,决定什么样的用户获取什么样的数据! |
|
返回顶楼 | |
发表时间:2010-01-10
Google App Engine的应用验证码怎么收不到
用的移动号码 +86135.... 楼主是什么时候注册的 |
|
返回顶楼 | |
发表时间:2010-01-11
wmcoo 写道 Google App Engine的应用验证码怎么收不到
用的移动号码 +86135.... 楼主是什么时候注册的 换个手机,或者是换别的运营商的手机,我刚刚用联通的手机是可以收到的. |
|
返回顶楼 | |
发表时间:2010-01-12
多谢分享, GAE确实是个好东西, 不过很有可能被墙, 真可惜
|
|
返回顶楼 | |
发表时间:2010-01-12
风中独火 写道 wmcoo 写道 Google App Engine的应用验证码怎么收不到
用的移动号码 +86135.... 楼主是什么时候注册的 换个手机,或者是换别的运营商的手机,我刚刚用联通的手机是可以收到的. 貌似可以填一个报告单,跟Google说收不到,对方回处理的 |
|
返回顶楼 | |