0

最初の投稿。

私は、AndriodゲームのバックエンドにJavaバージョンのAppEngineを使用することを検討しているモバイルゲーム開発者です。ゲームはJavaで書かれているので、JavaバージョンのAppEngineを使用することにしました。PythonバージョンのAppEngineの使用経験がありますが、特にURLマッピングに関して、JavaバージョンのAppEngineへの移行に問題があります。

Pythonでは、これは私が慣れていたものです:

def main():
application = webapp.WSGIApplication(
[('/', Main),
    ('/admin', Admin),
    ('/setScore', SetScore), 
    ('/getScores', SetScores),
    ('/getUser', GetUser),
    ('/getCatelog', GetCatelog)
])

webapp.util.run_wsgi_app(application)

WSGIアプリケーションは、さまざまなURLをさまざまなリクエストハンドラーにマップします。私の質問は、Javaに同等の機能があるのか​​、それとも同様のアプローチがAppEngineのJavaの化身のベストプラクティスと見なされているのかということです。

Javaにはこの機能を実現するための代替方法がありますか、それともJavaサーブレットがこの種のことを処理する方法についての代替パラダイムがありますか?

web.xmlファイルを使用すると、URLをサーブレットにマップできることは承知していますが、それが適切な方法かどうかはわかりません。

JavaバージョンのAppEngineでURLをマッピングして、さまざまなURLによってトリガーされるさまざまな機能を持たせるための標準的な方法は何ですか?

ありがとう。

4

2 に答える 2

1

web.xmlのサーブレットへのURLのマッピングは非常に基本的ですが、作業が完了する可能性があります。ただし、実際の意図によっては、かなり面倒な場合があります。

「従来の」WebアプリケーションまたはRESTサービスを作成していますか?次に、選択できるフレームワークが無数にあります。appengineについては、Stripesなどの軽量フレームワークの使用方法を学びました。これはいくつかの良い経験を積んでいます。

RESTについては、Jerseyをお勧めしますが、他にもオプションがあります。

したがって、たとえばStripesでは、ActionBeansURLにマップされるを使用します。簡単な例を次に示します。

@UrlBinding( "/main/score/{$event}" )
public class ScoreActionBean extends AbstractActionBean {
    public Resolution getScores() {
        ...
    }

    public Resolution setScore() {
        ...
    }
}

編集:ゲームのバックエンドを作成しているので、RESTサービスにもっと興味があるかもしれませんか?そこにはいくつかの良いチュートリアルがありますが、印象を与えるために、それは上記の例と非常に似ています:

@Path("/hello")
public class Hello {

    // This method is called if TEXT_PLAIN is request
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayPlainTextHello() {
        return "Hello Jersey";
    }

    ...
}
于 2012-04-28T07:05:13.347 に答える
1

Spring3を使用することをお勧めします。GAEに準拠したクールなフレームワークです。これをGAEでURLマッピングに使用するには、次のことを行う必要があります。

1 Spring jarをダウンロードし、WEB-INF/libにコピーします

2web.xmlディスパッチャーサーブレットで定義します

<servlet>
    <servlet-name>spring-servlet&lt;/servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class>
    <load-on-startup>1&lt;/load-on-startup>
</servlet>

3 web.xmlで、Dispatcherサーブレットのマッピングを指定します。例では、2つのURLマッピングを定義します。/adminおよび/serviceで始まるすべてのリクエストはSpringで処理されます。

<servlet-mapping>
    &lt;servlet-name>myspring</servlet-name>
    &lt;url-pattern>/admin/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    &lt;servlet-name>myspring</servlet-name>
    &lt;url-pattern>/service/*</url-pattern>
</servlet-mapping>

4コントローラーを作成します

// This controller process /admin addreses:
@Controller
public class AdminController {

    @RequestMapping(value="/admin", method = RequestMethod.GET)
    public String getAdminPage(HttpServletRequest request) {
        return "/pages/admin/admin.jsp";
    }

}

// This controller process /service addreses. Method getServicePage implements some 
// RESTfull idea. You put in address id /service/123 and it return a page for this
// service
@Controller
public class ServiceController {

    @Autowired
    private ServiceDao serviceDao;

    @RequestMapping(value="/service", method = RequestMethod.GET)
    public String getServicesListPage(HttpServletRequest request) {
        return "/pages/servise/service-list.jsp";
    }

    @RequestMapping(value="/service/{serviceId}", method = RequestMethod.GET)
    public String getServicePage(HttpServletRequest request,
        @PathVariable(value = "serviceId") int serviceId) {
        Service service = serviceDao.get(serviceId);
        request.setAttribute("service", service);
        return "/pages/servise/service.jsp";
    }

}

5 Springコンテキストファイルを作成し、スキャンパスを指定してコントローラーのコンテキストを取得します

Dispatcherサーブレット名に従って名前を付け、コントローラーに合わせてスキャンパッケージを設定します。例なしで処理できると思います。

于 2012-04-28T08:33:03.657 に答える