【问题标题】:doPost(), doGet() and service() and URL patternsdoPost()、doGet() 和 service() 以及 URL 模式
【发布时间】:2014-01-28 19:24:13
【问题描述】:

我已经阅读了很多关于 doPost()、doGet() 和 service() 以及 REST 的内容,但我遇到了一个我无法找到答案的问题。这个问题可能更主观,因为它与 URL 美学而不是惯例有关。

问题是在组织项目结构时,有时如果它足够小,我宁愿拥有一个 servlet,其中包含由“GET”参数指定的网站的不同方法

http://localhost/Servlet?option=METHOD

但是,这会在尝试将“GET”与“POST”分开时引发冲突。现在我在这里要问的是,如果有一个“不错”(主观意见)的 URL 是否意味着它具有这种格式,那么实现 service() 方法是最好的使用方式吗?

我愿意接受建议,例如使用

http://localhost/Servlet/Option

但是我将如何去实现这样的格式也能够通过 get 参数作为

http://localhost/Servlet/Option?param=value 

【问题讨论】:

    标签: java rest servlets


    【解决方案1】:

    您可以只调用另一个来实现两者:

    public void doPost(HttpServletRequest request, HttpServletResponse  response) throws IOException, ServletException
    {
        doGet(request, response);
    }
    
    public void doGet(HttpServletRequest request, HttpServletResponse  response) throws IOException, ServletException
    {
      .......
    }
    

    至于 service() 我不知道为什么人们会覆盖它。文档 (http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServlet.html) 明确表示:

    几乎没有理由重写服务方法。服务处理标准 HTTP 通过将请求分派到每个 HTTP 请求类型的处理程序方法( 上面列出的 doXXX 方法)。

    编辑:我现在看到的问题实际上是在一个 servlet 中有许多方法,由一个参数来区分。是的,这是不好的做法。您应该将不同的操作分成不同的 servlet。并且在 UI 中,最好使用不同的表单进行不同的操作,而不是使用具有多个提交按钮的表单。在编辑时破坏由一堆 if 语句控制的意大利面条式代码 servlet 要容易得多。

    【讨论】:

    • 我目前这样做是为了解决这个问题,但我在 SO 中的另一个问题中读到它被认为是不好的做法。我正在寻找可以被视为良好做法的不同方式来看待它。
    • 他们无疑是在谈论一些虚构的和不切实际的规则,例如“POST 应该只用于更改数据的 servlet,而在检索数据时应该始终使用 GET。”但在现实生活中,我倾向于几乎只对两者都使用 POST,因为我不希望参数显示在地址栏中。当我确实希望能够与其中的参数建立链接时,我倾向于按上述方式实现。
    • 有充分的理由不为更改数据的 servlet 实施 GET。只为那些实施 POST 会淘汰一些只知道如何从地址栏破解的脚本小子。
    • 是的,我应用它的方式和你一样。我基本上用它来分配我网站的不同部分,并使用 post 来处理任何改变数据的事情。但是,您不认为实现您发布的行为的正确方法是覆盖 service() 方法吗?
    • 服务用于将不同的请求类型路由到它们的函数,GET 到 doGet,POST 到 doPost,DELETE 到 doDelete,PUT 到 doPut。 doHead、doOptions、doTrace。您希望您的 servlet 响应 DELETE 和 PUT 请求吗?头,选项,跟踪?我还认为您可能会有些混淆 URL 重写,即使用此概念将参数作为 URL 的一部分。
    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 2012-02-27
    • 2011-01-21
    • 2011-07-09
    • 2013-08-12
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多