2017-01-03 5 views
0

ich verstehen will, Wenn Ihre Anfrage durch mehrere Funktionen- verarbeitet werden mussmehr Servlets vs mehr Objekte

  1. ist es gut, durch mehrere Servlets weiterleiten ODER
  2. implementieren als Objektmethoden

Beispiel

 req.getRequestDispatcher("LoadSession").forward(req, resp); 
     req.getRequestDispatcher("AuthoriseRoles").forward(req, resp); 
     req.getRequestDispatcher("Boot").forward(req, resp); 

OR

 sessionLoader.loadSession(req,res); 
    authoriseService.authoriseRoles(req,res); 
    bootService.boot(req, res); 
+0

Ich glaube nicht, dass diese Frage eine bestimmte und eine richtige Antwort hat. Ich denke, du wirst mit Zeit und Erfahrung für dich selbst entscheiden und auf deine Seite treten. –

+0

In 99,99% der Fälle, die zweite, aber modifiziert. Im Allgemeinen sollte sich das Servlet damit befassen, Dinge aus der Anfrage herauszuholen und Dinge in die Antwort zu schreiben. Der Rest sollte an Klassen und Methoden delegiert werden, die sich nicht mit Anfragen und Antworten befassen, sondern mit typisierten Objekten. –

Antwort

0

Ich nehme an, Sie sind in der Phase der Entwicklung einer API. Gemäß REST design principles sollte die URL die Ressource, die behandelt oder angefordert wird, widerspiegeln, und die HTTP-Methode sollte widerspiegeln, welche Aktion für die Ressource ausgeführt werden muss.

Also, statt/LoadSession und mit der Session-ID als Abfrage param in der Anfrage Http, sollte es GET /session/{id} zum Beispiel GET /session/e841092fa2194340bc40 (Ich gehe davon aus LoadSession eine Anforderung eine bestehende Sitzung zurückzukehren)

Das könnte dir Fragen Sie sich, was der Vorteil ist, diesem Design zu folgen. Es gibt mehrere Bibliotheken und Frameworks, die eingehende HTTP-Anforderungen parsen und das Routing für Sie übernehmen können (z. B. Jersey ist die Referenz-JAX-RS-Implementierung, JAX-RS ist der JavaEE-REST-Standard). Anstatt also wie beschrieben ein Servlet zu schreiben, schreiben Sie die Klasse, die die Ressource darstellt, und die Methoden, die gemäß der HTTP-Methode ausgelöst werden. Sie binden alles zusammen mit Anmerkungen:

@Path("/session") 
import javax.ws.rs.*; 
import javax.ws.rs.core.*; 

@Produces({MediaType.APPLICATION_JSON}) 
public class SessionHandler 
{ 
    @Context 
    private HttpServletRequest httpRequest; 
    @Context 
    private HttpServletResponse httpResponse; 

    @GET 
    @Path("{id}") 
    public Session load(@PathParam("id") String id) { 
    ... 
+0

Das beantwortet die Frage überhaupt nicht. –

+0

Da es sich um eine "meinungsbasierte" Frage handelt, sollte es einen gewissen Spielraum für die Brodigkeit der Antworten geben, IMO –

Verwandte Themen