Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AppEngine中的URL映射(用于类似Python的功能)_Java_Google App Engine_Servlets_Url Mapping_Requesthandler - Fatal编程技术网

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), ('/

第一个帖子

我是一名手机游戏开发人员,正在研究将AppEngine的Java版本用于Andriod游戏的后端。由于游戏是用Java编写的,我想我应该使用AppEngine的Java版本。我对Python版本的AppEngine有一些经验,并且在迁移到Java版本的AppEngine时发现了一些困难,特别是在URL映射方面

在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 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&lt;/servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class>
    <load-on-startup>1&lt;/load-on-startup>
</servlet>
5创建Spring上下文文件并指定扫描路径以进入控制器的上下文


根据DispatcherServlet名称命名,并根据控制器设置扫描包A。我想你不用举例就可以应付。

非常感谢你的回复。我已经准备好使用web.xml来替代我正在搜索的功能,但这似乎正是我想要的。我的问题的答案似乎是,在App Engine for Java中进行URL映射的典型方法是通过使用web.xml功能,但是还有其他强大的方法来实现与我预期的功能更相似的功能。非常感谢您的回复。这似乎很有希望。我将调查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>
// 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";
    }

}