1

まず、Spring MVC を使用していません。:) :) 最初にそれを取り出したいだけです。今私が持っているのは、さまざまなサーブレットを呼び出すさまざまな JSP ページです。すべてのピースは個別にうまく機能しますが、それらをリンクする必要があります。すべてのjspページがGETリクエストを行う場合、Webアドレスを介して渡すだけなので簡単です。typeサーブレット側では、すべてのパラメーターを列挙し、どれtypeがそれであるかを判断し、適切なサーブレットに委任します. ただし、すべての jsp ページがGETリクエストを行うわけではありません。一部のページはPOSTフォーム経由でリクエストを行います。例を見てみましょう

 A.jsp
 $.getJSON('GenericServlet?type=A', ...

 GenericServlet.java
 String type = request.getParameter("type");    
 if(type.equals("A")){
     //Somehow delegate to Servlet A (Not sure how to do that yet :))
 }

しかし、B.jsp私はこのようなものを持っているでしょう

 B.jsp
 <form action="GenericServlet" method="post">
    <table border=0 cellspacing=10 cellpadding=0>
        <tr>
            <td>User Name:</td>
            <td><input type="text" name="username" size=22/></td>
        </tr>
        <tr>
            <td>Password:</td>
            <td><input type="password" name="password" size=22/></td>
        </tr>
    </table>
    <input type="submit" value="Create User" />
</form>

GenericServlet.javaこれを行う必要があるという点で、私が判断するのはちょっと難しいですservletB

4

3 に答える 3

2

通常のMVCアプローチは、HttpServlet#service()メソッドをオーバーライドし、によって取得されるように、ビジネスロジックが要求メソッドにも依存するようにすることHttpServletRequest#getMethod()です。この回答も参照してください。

別のアプローチは、実際に両方を同じロジックに任せdoGet()doPost()実行することですが、一方を他方に委任するのではなく、両方を同じ独立したメソッドに委任したいと思います。例(半疑似):

protected void doGet(request, response) {
    process(request, response);
}

protected void doPost(request, response) {
    process(request, response);
}

private void process(request, response) {
    // Do your thing here.
}

メソッドとは対照的に、これHttpServlet#service()はHTTP、、、およびリクエストメソッドを考慮しません。つまり、それらを無視して、servletcontainerに「デフォルト」の方法で処理させる(つまり、HTTP 405メソッドを許可しない)ようにすることができます。HEADTRACEPUTOPTIONSDELETE

于 2010-04-16T20:46:28.370 に答える
0

jsp 内にあるサーブレットの「委任」ロジックを実行することもできます。JSP 式言語 (EL) および JSTL タグを使用すると、これをはるかに簡単に行うことができます。

例:

<c:if test="${param.type == 'A'}>
   call servlet 1
</c:if>
<c:if test="${param.type == 'B'}>
   call servlet 2
</c:if>

サーブレット 1 または 2 は、必要に応じて doGet() または doPost() を実装できます。または、doPost() デリゲートを doGet() にするという Heavy Bytes の提案に従うこともできます。

このようにして、GenericServlet を廃止できるかもしれません。

于 2010-04-16T20:21:36.297 に答える
0

GenericServlet で次のようにします。

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

したがって、doPost() は doGet() に委任されます。

doGet() のコードは以前と同じです。

于 2010-04-16T19:52:04.790 に答える