技术开发 频道

Google App Engine Java构建电子书网站

  示例演示:上传电子书的用例

  下面针对用户上传一个文档这个用例,讲述如何实现这个功能。

  构建上传文件页面

  在工程的 war 目录下,添加一个新的文件 upload.html,在该文件中包含如下的代码。

<form method="post" action="upload" enctype="multipart/form-data">
    
<table>
        
<tbody>
            
<tr><td><strong>*Please select a file</strong></td></tr>
            
<tr><td><input name="efile" type="file" id="fileNode"></td></tr>
            
<tr><td><strong>*Please set the file's title</strong></td></tr>
            <tr><td><input name="filename" type="text" size=60></td></tr>
            
<tr><td><strong>File tags</strong></td></tr>
            
<tr><td><input name="tags" type="text" size=60>
                
<label>seperate by whitespace, like
                    
<i><b>Google appengine</b></i>
                
</label></td>
            
</tr>
            
<tr><td><strong>File description</strong></td></tr>
            
<tr><td>
                
<textarea name="description" rows="5" cols="50"></textarea>
            
</td></tr>
            
<tr><td><strong>your name</strong></td></tr>
            
<tr><td><input name="username" type="text" size=60></td></tr>
            
<tr><td><strong>your email</strong></td></tr>
            
<tr><td><input name="useremail" type="text" size=60></td></tr>
        
</tbody>
    
</table>
    
<input type="submit" value="upload">
</form>

   构建文件上传处理的 servlet

        利用 apache 的 commons 的文件上传的库,该 servlet 将上传的内容解析成 File 对象。

  图 9. Servlet 模型

  持久化改文件

  应为 File 类已经添加了 JDO 需要的注释,如下。

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class File {
    @PrimaryKey
    @Persistent(valueStrategy
= IdGeneratorStrategy.IDENTITY)
    
private Key key;

    @Persistent
    
private String username;

    @Persistent
    
private String useremail;

    @Persistent
    
private Date uploadDate;

    @Persistent
    
private String filename;        //could be a filename or a url...

    @Persistent
    
private String description;    //could be a filename or a url...

    @Persistent
    
private String mimeType;    //pdf,ppt, chm etc.

    @Persistent
    
private com.google.appengine.api.datastore.Blob file;

    @Persistent
    
private Set<Key> tags = new HashSet<Key>();        // associated tags

   利用 JDO 的规范提供的 API,可以持久化该对象到 Google 的 App Engine 的存储设施上。

PersistenceManager pm = PMF.get().getPersistenceManager();
try {
    pm.makePersistent(file);
}
finally {
    pm.close();
}

        注意,这里需要首先在在项目的 classpath 的 META-INF 目录下有 jdoconfig.xml,其内容如下。

<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation
="http://java.sun.com/xml/ns/jdo/jdoconfig">

    
<persistence-manager-factory name="transactions-optional">
        
<property name="javax.jdo.PersistenceManagerFactoryClass"
            value
="org.datanucleus.store.appengine.jdo.
                DatastoreJDOPersistenceManagerFactory"/>
        <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
        
<property name="javax.jdo.option.NontransactionalRead" value="true"/>
        
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
        
<property name="javax.jdo.option.RetainValues" value="true"/>
        
<property name="datanucleus.appengine.autoCreateDatastoreTxns"
            value
="true"/>
    
</persistence-manager-factory>
</jdoconfig>

  小结

  本文介绍了云计算领域的一个重要厂商 Google 的 Appengine for Java 的开发平台。通过一个实际的例子讲述了如何使用该平台开发 Web 应用。

0
相关文章