Google App Engine(4)Java Start and Datastore

本文介绍如何使用Google App Engine进行Java应用的开发与部署,重点讲解了数据存储的操作方法,包括通过Java Data Objects (JDO) 和 Java Persistence API (JPA) 对数据进行增删改查,并演示了具体的Servlet和JSP页面代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Google App Engine(4)Java Start and Datastore
One Tip: sometimes, if you want to kill a app engine development server, just use this command to grep the information.
>ps -ef | grep appengine

A scalable web application will face a user interacting with any of dozens of web servers at a given time, and the user's next request could go to a different web server than the previous request.

App Engine includes support for 2 different API standards for the Datastore: Java Data Objects(JDO) and the Java Persistence API(JPA).

Updating the Servlet to Store Data
String guestbookName = req.getParameter("guestbookName");


Key guestbookKey = KeyFactory.createKey("Guestbook", guestbookName); // database

log.info("Greeting posted by user " + user.getNickname() + ": "
+ guestbookName);

String content = req.getParameter("content");
Date date = new Date();
Entity greeting = new Entity("Greeting", guestbookKey); //table
greeting.setProperty("user", user);
greeting.setProperty("date", date);
greeting.setProperty("content", content);

DatastoreService datastore = DatastoreServiceFactory
.getDatastoreService();
datastore.put(greeting);

resp.sendRedirect("/guestbook.jsp?guestbookName=" + guestbookName);

Storing the Submitted Greetings
…snip…

Updating the JSP
<%
String guestbookName = request.getParameter("guestbookName");
if (guestbookName == null) {
guestbookName = "default";
}
pageContext.setAttribute("guestbookName", guestbookName);
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
pageContext.setAttribute("user", user);
%>
<p>
Hello, ${fn:escapeXml(user.nickname)}! (You can <a
href="<%=userService.createLogoutURL(request.getRequestURI())%>">sign
out</a>.)
</p>
<%
} else {
%>
<p>
Hello! <a
href="<%=userService.createLoginURL(request.getRequestURI())%>">Sign
in</a> to include your name with greetings you post.
</p>
<%
}
%>

<%
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key guestbookKey = KeyFactory.createKey("Guestbook", guestbookName); //database
Query query = new Query("Greeting", guestbookKey).addSort("date",
Query.SortDirection.DESCENDING); //table
List<Entity> greetings = datastore.prepare(query).asList(
FetchOptions.Builder.withLimit(5));
if (greetings.isEmpty()) {
%>
<p>Guestbook '${fn:escapeXml(guestbookName)}' has no messages.</p>
<%
} else {
%>
<p>Messages in Guestbook '${fn:escapeXml(guestbookName)}'.</p>
<%
for (Entity greeting : greetings) {
pageContext.setAttribute("greeting_content", greeting.getProperty("content"));
if (greeting.getProperty("user") == null) {
%>
<p>An anonymous person wrote:</p>
<%
} else {
pageContext.setAttribute("greeting_user",
greeting.getProperty("user"));
%>
<p>
<b>${fn:escapeXml(greeting_user.nickname)}</b> wrote:
</p>
<%
}
%>
<blockquote>${fn:escapeXml(greeting_content)}</blockquote>
<%
}
}
%>

<form action="/sign"method="post">
<div>
<textarea name="content"rows="3"cols="60"></textarea>
</div>
<div>
<input type="submit"value="Post Greeting"/>
</div>
<input type="hidden"name="guestbookName" value="${fn:escapeXml(guestbookName)}"/>
</form>

Retrieving the Stored Greetings
Read this in detail
https://developers.google.com/appengine/docs/java/datastore/

A Word About Datastore Indexes
https://developers.google.com/appengine/docs/java/datastore/indexes

Clearing the Datastore
delete the file WEB-INF/appengine-generated/local_db.bin

Use Static Files
By default, App Engine makes all files in the WAR available as static files except JSPs and files in WEB-INF/,

A Simple Stylesheet
create a directory named stylesheets/ under war/. File main.css.
body {
font-family: Verdana,Helvetica,sans-serif;
background-color: #FFFFCC;
}

Directly use that URL in JSP files:
<head>
<link type="text/css"rel="stylesheet"href="/stylesheets/main.css"/>
</head>

Uploading Your Application
Create Application from here: https://appengine.google.com/

Uploading From Eclipse
click 'Deploy to App Engine', and I already enter my google account and choose the project 4mymessage.

And I place the application Id in the configuration file

Verify the front page from URL http://4mymessage.appspot.com

When I have time, I will go on the sample in this URL http://googcloudlabs.appspot.com/.

References:
https://developers.google.com/appengine/docs/java/gettingstarted/usingdatastore
https://developers.google.com/appengine/docs/java/gettingstarted/staticfiles
https://developers.google.com/appengine/docs/java/gettingstarted/uploading

http://googcloudlabs.appspot.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值