2016-04-12 11 views
-1

Javaサーブレットが別のJavaサーブレットにある関数を呼び出すことは可能ですか?可能であれば、それを行う方法の簡単な例を私に見せてもらえますか?別のJavaサーブレットの機能を使用するJavaサーブレット?

ありがとうございました

+2

サーブレットはちょうど別の 'class'である - 同じロジックは、他のと同じように適用されます。 –

+0

別のサーブレットの機能を呼び出すとどういう意味ですか? –

+0

@BoristheSpider番号にアクセスするには、OPはサーブレットのインスタンスを作成しなければなりません(そうしてはいけません)。 –

答えて

0

にservlet1

import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class Servlet1 
*/ 
@WebServlet("/Servlet1") 
public class Servlet1 extends HttpServlet { 


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 

     Servlet2 s = new Servlet2(); 
     s.CreateUser(); 

     response.getWriter().append("Served at: ").append(request.getContextPath()); 
    } 
} 

Servlet2

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class Servlet1 
*/ 
@WebServlet("/Servlet2") 
public class Servlet2 extends HttpServlet { 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     response.getWriter().append("Served at: ").append(request.getContextPath()); 
    } 


    public void CreateUser() throws FileNotFoundException{ 

     System.out.println("Create Users..."); 

    } 
} 

出力:

enter image description here

+0

いいえ、あなたは手動でサーブレットのインスタンスを作成するべきではありません。あなたは 'init()'を呼び出すことさえしません。 - serlvetは依存関係のインスタンスを作成します。 –

+1

@ボリス・ザ・スパイダー私はあなたが正しいことを話していることに同意するが、質問はそれを要求しない。より多くの私は答えを表示するサーブレットクラスを書く時にすべてを削除しています。私は質問(4点目)に関するコメントを見て、サンプルを与えただけなので。バニエが正しく説明した...! –

+0

@Boris私はちょうどユーザーが本当に必要なものを与えています。私はすべての面を考慮して西に私の時間を望んでいません。 –

0

いくつかのオプションがあります。

静的にする(私は好きではない)。

クラスを作成し、必要なparamsを用意し、各サーブレットにインスタンスを作成します。

0

ややハック方法:

RequestDispatcher dispatcher = request.getRequestDispatcher("/someServletOfYours"); 
dispatcher.forward(request, response); 

、あなたの "someServletOfYours" クラスのdoPostメソッドにあなたの方法を実装します。パラメータを渡す必要がある場合は、ServletRequestのメソッドsetAttributeを呼び出し、次のサーブレットのリクエストからパラメータを取得します。 「someServletOfYourrs」から元のサーブレットにリダイレクトすることができます。これは、httpを使ってメソッド呼び出しを模倣します。

2

別のサーブレットから直接サーブレットを呼び出すことは推奨されず、サーブレットインスタンスはサーブレットコンテナによって管理されるため、不適切な方法と見なされます。 separation of concerns原則に従う必要があります。

サーブレットはクライアントへのインターフェイスのみを担当し、ビジネスロジックを含むべきではありません。ビジネスロジックを別のレイヤー(別のパッケージのクラスなど)に置き、サーブレットからのみ呼び出します。したがって、ビジネスクラスは実際の内部データと変換を担当し、サーブレットは外部へのさまざまなビューを担当します。

+0

私はそれも考えていますが、彼はサーブレットを別のものから呼び出す正当な理由があるかもしれません。 –

+0

JoãoRebelo:ご自分のアプリケーション内のソースコードにアクセスできない非常にまれな状況です。ほとんどの場合、それはコードのにおいにすぎず、リファクタリングする必要があります。実際に別のサーブレットを直接呼び出すことを考えた場合、これはリファクタリングのための非常に良いタイミングであり、コードを少し良くします。 – vanje

+0

True!私はあなたの答えに完全に同意します。私はちょうどあなたがすることができますので、あなたはそれをしたいかもしれないことにもかかわらず、コメントしていた!何人かの人が言うように、時には難しい方法を学ぶ必要があります:) –

関連する問題