2

私はサーブレット テクノロジの初心者であり、これは基本的な質問ですが、私にとっては複雑すぎるチュートリアルに戸惑っています。

新しいサーブレットがありますHelloWorldServlet。でweb.xml、私はこれを持っています

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
     "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
     <servlet>
         <servlet-name>HelloWorldServlet</servlet-name>
         <servlet-class>cz.hello.HelloWorldServlet</servlet-class>
     </servlet>

     <servlet-mapping>
         <servlet-name>HelloWorldServlet</servlet-name>
         <url-pattern>/HelloWorldServlet</url-pattern>
     </servlet-mapping>
</web-app>

HelloWorldServlet.scala(私はJavaよりもScalaを好みます)このように見えます

package cz.hello

import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse

 class HelloWorldServlet extends HttpServlet {
    override def doGet(req: HttpServletRequest, resp: HttpServletResponse) = {
        resp.setContentType("text/plain")
        resp.getWriter.println("Hello, world")
    }
}

これまでのところ、Jetty を使用してサーブレットが読み込まれています。満足しています。"hello world" が表示されhttp://localhost:8080/HelloWorldServletます。

ここで、サーブレットが GET リクエストに反応できるようにしたいと考えていhttp://localhost:8080/HelloWorldServlet/helloますhttp://localhost:8080/HelloWorldServlet/goodbye。たとえば、(疑似コード)のように

    override def doGet(req: HttpServletRequest, resp: HttpServletResponse) = {
        resp.setContentType("text/plain")
        if (req.isAddress("/hello") {
            resp.getWriter.println("Hello, world")
        } else {
            resp.getWriter.println("Goodbye, world")
        }
    }

どうすればそれを達成できますか?

4

1 に答える 1

5

まず、POSTリクエストに対応する場合はdoPost、の代わりにメソッドを実装する必要がありdoGetます。

次に、コードが提供した例のように単純でない限り、各URLを異なるサーブレットで処理することを検討することをお勧めします。

実際のアプリケーションを開発する場合、コードがより複雑になる可能性があります。そのため、責任を2つのサーブレットに分割すると、はるかにクリーンになります。このアプローチに同意する場合は、次のように、に<servlet>別の<servlet-mapping>オブジェクトを作成するだけです。web.xml

<web-app>
 <servlet>
     <servlet-name>HelloWorldServlet</servlet-name>
     <servlet-class>cz.hello.HelloWorldServlet</servlet-class>
 </servlet>
 <servlet>
     <servlet-name>GoodbyeWorldServlet</servlet-name>
     <servlet-class>cz.hello.GoodbyeWorldServlet</servlet-class>
 </servlet>

 <servlet-mapping>
     <servlet-name>HelloWorldServlet</servlet-name>
     <url-pattern>/hello</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
     <servlet-name>GoodbyeWorldServlet</servlet-name>
     <url-pattern>/goodbye</url-pattern>
 </servlet-mapping>
</web-app>

このように、へのリクエスト/helloはによって処理されHelloWorldServlet、へのリクエスト/goodbyeはによって処理されGoodbyeWorldServletます。これで、GETまたはPOSTのどちらがより意味があるかを定義し、対応するメソッド(doGetまたはdoPost、、あるいはその両方)をサーブレットに実装するだけで済みます。

あなたのアイデア(サーブレット内のURLの内容を比較する)も機能しますが、この場合は悪いアイデアのように聞こえる巨大なif / then / elseチェーンになってしまう可能性があるため、適切な設計ではありません。

于 2012-07-09T23:55:15.747 に答える