【问题标题】:servlet route with GET, POST, PUT and DELETE带有 GET、POST、PUT 和 DELETE 的 servlet 路由
【发布时间】:2015-07-02 06:11:37
【问题描述】:

我是 Java 服务器端编程的新手,我的问题基本上是使用 Servlets(不使用 spring mvc 等的低级别)到达起点,然后从 node.js 开始构建我的方式背景,其中路由定义将以函数(app.get(request, response) {}app.post(request, response) {} 等)开头,并且函数将在 http 方法之一(GET、POST、PUT、DELETE)的参数中接收 requestresponse .

如果有人可以帮助我了解如何在 servlet 类中针对路由(比如说/users)定义方法,该路由将映射到 http 方法,同时在其参数中提供请求和响应。

p>

我的尝试

public class FirstServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException , IOException {

}

【问题讨论】:

  • 那么到目前为止你尝试过什么?您可以使用 servlet 容器配置 (web.xml) 来指定应该为哪个 URL 调用哪个 servlet,然后如果您只是扩展 HttpServlet,您可以覆盖任何您想要的方法。
  • 那么您是否查看了任何文档以找出答案? (删除并放置,是的 - 对于补丁,您需要覆盖 service,并在那里拦截补丁调用,如果不是补丁,则委派回正常实现。)
  • 我有点迷路了,谷歌搜索给了我各种各样的链接,希望能直接链接到文档
  • 搜索“httpservlet 文档”可以直接找到有用的链接...例如docs.oracle.com/javaee/6/api/javax/servlet/http/…,具体取决于您使用的版本...(如果您查看文档您正在使用的容器,它可能具有正确的版本。)
  • 我不认为你真的能够判断 Spring 现在有多大用处。我自己已经很长时间没有使用它了,也不是为了这种事情,但是您可能应该阅读文档以说明作者认为好处是什么。 REST 不仅仅是将请求发送到正确 servlet 的正确方法……

标签: java servlets


【解决方案1】:

我相信你想要的是Servlet mappings。也可以找a bit more info here

但基本上这是您告诉网络服务器(例如 Tomcat)使用哪个 servlet 来响应发送到给定 url 模式的请求的方式。因此,您可以将模式与要用于服务的 servlet 进行映射。

您还可以在inner workings here 上找到更多信息。

编辑:如果您想处理所有动词,您可以使用服务。从第一个链接:

您可能已经看到其他 servlet 示例实现了 doPost() 和/或 doGet() 方法。这些方法只回复 POST 或 GET 请求;如果您想从一个方法处理所有请求类型,您的 servlet 可以简单地实现 service() 方法。 (但是,如果选择实现 service() 方法,则不能实现 doPost() 或 doGet() 方法,除非在 service() 方法的开头调用 super.service()。) HTTP servlet 规范描述了用于处理其他请求类型的其他方法,但所有这些方法统称为服务方法。

所有服务方法都采用相同的参数参数。一个 HttpServletRequest 提供有关请求的信息,以及您的 servlet 使用 HttpServletResponse 来回复 HTTP 客户端。这 服务方法如下所示:

公共无效服务(HttpServletRequest req, HttpServletResponse res) 抛出 IOException { ... }

【讨论】:

  • 这似乎对于每种方法都有一个单独的 servlet,我想看到一个 servlet 处理所有方法的东西,我已经尝试编辑了我的问题
  • 谢谢,我越来越清楚了,最后一件事,如果你能指出一些阅读资源,我也在上面评论了这一点,因为 servlet 正在处理所有与其他相关的任务,为什么人们使用 Spring 框架,它使用自己的注释等来膨胀代码(除了 MVC 之外,我很清楚)
  • 当您要做简单的事情时,使用这样的 servlet 很有用。但是,如果您尝试构建,比如说,一个拍卖网站,您可能会从一个框架中受益。一旦你开始在数据库中需要几十个不同的模型、表示这些模型的不同方式(列表、网格、组合框),能够查询后端数据库以获取更多对象等,你就可以开始明白为什么可能需要框架。例如,如果您想从 servlet 访问数据库,则需要使用 JDBC 驱动程序。
  • 然后添加您自己的方法来构建查询(希望是准备好的语句)等。您还将负责正确关闭所有连接和流,因此您将开始使用 double try/ 填充代码catch 块以避免未处理的异常流氓和消耗资源。仅针对该特定部分就是您拥有 ORM 的原因,而且还有很多。 Spring 等已经集成了所有这些工具并可以使用。当然,这仍然意味着你会得到很多样板代码,是的。但是你需要权衡利弊才能做出正确的选择
  • 还有一件事,非常重要的是,运行时是否为每个请求实例化了一个新的 servlet 副本或新实例? (来自node.js)对象被实例化并加载到内存中一次,它使用同一个实例同时处理所有传入的请求,我希望servlet以类似的方式完成,如果不是我会问另一个关于创建的问题daemon servlet,如果您能指导如何以正确的方式提出问题,我将不胜感激,因为我对 Java 行话不太熟悉,我会向您发送新问题。
猜你喜欢
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
相关资源
最近更新 更多