2016-04-12 22 views
-1

Bir java sunucu uygulamasının başka bir java servletindeki işlevi çağırması mümkün mü? Ve eğer mümkünse, bana nasıl yapılacağını gösteren basit bir örnek gösterebilir misin?java servlet başka bir java servlet işlevini kullanarak?

Teşekkür ederiz Önceden

+2

bir sunucu uygulaması sadece bir 'class' olduğu - Aynı mantık diğer gibi uygulanır. –

+0

Başka bir sunucu uygulamasının işlevini çağırarak ne demek istiyorsunuz? –

+0

@BoristheSpider No. Erişmek için OP, yapamayacağı (yapmaması gereken) bir sunucu uygulaması oluşturmalıdır. Örneğin, –

cevap

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..."); 

    } 
} 

Çıkış:

enter image description here

+0

Hayır. Hiçbir zaman el ile uygulama örnekleri oluşturmamalısınız. Init() 'i bile çağırmazsınız - bir serlvet bağımlılık örneklerini yaratacaktır. –

+1

@Boris the Spider, doğru söylediğinize katılıyorum, ama soru bunlardan hiçbirini talep etmiyor. daha fazla cevap vermek için servlet sınıfını yazarken her şeyi kaldırdım. Çünkü söz konusu yorumu (4. nokta) gördüm ve sadece örneği verdim. vanje açıkladı ...! –

+0

@Boris Sadece kullanıcının ihtiyaç duyduğu şeyleri veriyorum. Her yönünü düşünerek zamanımı batırmak istemiyorum. –

0

Çeşitli seçenekler.

Statik bir yoldan yapılıyor ('u tercih etmiyorum).

Her bir sunucuda bir Sınıf oluşturun ve gerekli paramları verin ve örnek oluşturun.

0

Biraz hackish yol: Şimdi

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

, doPost senin "someServletOfYours" sınıfının içinde senin yöntemini uygulamak. Parametreleri geçmeniz gerekiyorsa, ServletRequest öğesinin setAttribute yöntemini çağırın ve parametreleri bir sonraki sunucu uygulamanızda isteğinize göre getirin. "SomeServletOfYourrs" dan, orijinal sunucu uygulamanıza yeniden yönlendirebilirsiniz. Http yöntemiyle bir yöntem çağrısını taklit edecektir.

2

Servlet örnekleri, başka bir servletten doğrudan çağrılması önerilmez ve kötü uygulama olarak kabul edilir çünkü servlet örnekleri sunucu kapsayıcısı tarafından yönetilir. separation of concerns ilkesini izlemelisiniz.

Servletler yalnızca istemcilerden sorumludur ve iş mantığı içermemelidir. İş mantığınızı ayrı bir katmana koyun (ör. Başka bir pakette sınıflar) ve sadece sunucudan çağırın. Bu nedenle, iş sınıfları gerçek dahili verilerden ve dönüştürmelerden sorumludur ve servletler dışarıdaki farklı görünümlerden sorumludur.

+0

Ayrıca bunu düşünüyorum, ama başka birinden bir sunucu uygulamasını çağırmak için iyi bir nedeni olabilir. –

+0

João Rebelo: Evet, çok nadir durumlarda kendi uygulamanızın içindeki kaynak koduna erişiminiz yok. Çoğu zaman sadece kod kokusu vardır ve tekrar gözden geçirilmelidir. Aslında başka bir servleti doğrudan aramayı düşünürseniz, bu, refactoring ve kodu biraz daha iyi hale getirmek için çok uygun bir zamandır. – vanje

+0

Doğru! Cevabınıza tamamen katılıyorum. Sadece bunun hakkında yorum yapıyordum, ancak bunu yapmak isteyebilirsiniz çünkü bunu yapabilirsiniz! Bazılarının söylediği gibi, bazen zor yoldan öğrenmeniz gerekir :) –

İlgili konular