Java AppEngine中的URL映射(用于类似Python的功能)
第一个帖子 我是一名手机游戏开发人员,正在研究将AppEngine的Java版本用于Andriod游戏的后端。由于游戏是用Java编写的,我想我应该使用AppEngine的Java版本。我对Python版本的AppEngine有一些经验,并且在迁移到Java版本的AppEngine时发现了一些困难,特别是在URL映射方面 在Python中,我习惯于这样:Java AppEngine中的URL映射(用于类似Python的功能),java,google-app-engine,servlets,url-mapping,requesthandler,Java,Google App Engine,Servlets,Url Mapping,Requesthandler,第一个帖子 我是一名手机游戏开发人员,正在研究将AppEngine的Java版本用于Andriod游戏的后端。由于游戏是用Java编写的,我想我应该使用AppEngine的Java版本。我对Python版本的AppEngine有一些经验,并且在迁移到Java版本的AppEngine时发现了一些困难,特别是在URL映射方面 在Python中,我习惯于这样: def main(): application = webapp.WSGIApplication( [('/', Main), ('/
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 servlet如何处理这类事情是否有其他范例
我知道web.xml文件为您提供了将URL映射到servlet的机会,但我不确定这是否正确
在AppEngine的Java版本中,映射URL以使其具有由不同URL触发的不同功能的标准方式是什么
谢谢。将URL映射到中的servlet非常基本,但可能会帮您完成这项工作。然而,根据您的实际意图,这可能会相当麻烦 您是在编写“传统”web应用程序还是REST服务?然后,有无数的框架可供选择。对于appengine,我学会了使用轻量级框架,例如,我已经有了一些很好的经验 对于其余的,我建议,但也有其他的选择 例如,在条带中,使用
ActionBeans
,然后映射到URL。下面是一个简单的例子:
@UrlBinding(“/main/score/{$event}”)
公共类ScoreActionBean扩展了AbstractActionBean{
公开决议{
...
}
公开决议{
...
}
}
编辑:既然您正在编写游戏后端,您可能对REST服务更感兴趣?有很多,但为了给你一个印象,它与上面的例子非常相似:
@Path(“/hello”)
公共课你好{
//如果请求文本,则调用此方法
@得到
@生成(MediaType.TEXT\u PLAIN)
公共字符串sayplantextHello(){
返回“Hello Jersey”;
}
...
}
我的建议是使用Spring3。这是一个很酷的框架,它与GAE兼容。要将其与GAE一起用于url映射,您必须:
1下载Spring JAR并将其复制到WEB-INF/lib
2在web.xml Dispatcher servlet中定义
<servlet>
<servlet-name>spring-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
5创建Spring上下文文件并指定扫描路径以进入控制器的上下文
根据DispatcherServlet名称命名,并根据控制器设置扫描包A。我想你不用举例就可以应付。非常感谢你的回复。我已经准备好使用web.xml来替代我正在搜索的功能,但这似乎正是我想要的。我的问题的答案似乎是,在App Engine for Java中进行URL映射的典型方法是通过使用web.xml功能,但是还有其他强大的方法来实现与我预期的功能更相似的功能。非常感谢您的回复。这似乎很有希望。我将调查spring框架。。。看起来很棒。非常感谢您的代码示例。
<servlet-mapping>
<servlet-name>myspring</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>myspring</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
// 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";
}
}