2011-11-09 19 views
16

quanto la specifica Servlet 3.0 v'è la possibilità di dichiarare i metadati mappatura servlet come annotazioni sulla classe servlet:I casi d'uso per @WebInitParam

@WebServlet(name="appInfoServlet", urlPatterns ="/appInfo", initParams = @WebInitParam(name="ocwd.deployer.email", value="[email protected]")) 
public class AppInfoServlet extends HttpServlet { 

} 

Quello che non capisco se è il caso d'uso per mantenere i parametri di inizializzazione nella stessa classe del servlet. Per quanto ne so, questi parametri devono essere tenuti separati dalla classe e inseriti nel descrittore di deployment.

Quali casi d'uso ci sono per specificare i parametri di init all'interno dell'annotazione @WebServlet?

risposta

16

Le annotazioni vengono utilizzate per fornire i valori predefiniti.

In JavaEE le proprietà di implementazione possono anche essere fornite utilizzando le annotazioni. Dati i valori per le annotazioni, il descrittore di distribuzione i.e, web.xml può ancora essere utilizzato per sovrascrivere i valori predefiniti forniti dalle annotazioni.


Nell'esempio precedente, il init-param possono essere sovrascritte configurando un servlet con un nome corrispondente in web.xml:

<servlet> 
    <servlet-name>appInfoServlet</servlet-name> 
    <init-param> 
     <param-name>ocwd.deployer.email</param-name> 
     <param-value>[email protected]</param-value> 
    </init-param> 
    </servlet> 
+0

Grazie per la risposta. Ho aggiunto un esempio su come funziona l'override nella tua risposta. –

+0

Questo è corretto. –

3

Posso pensare a uno, dalla cima della mia testa: fornire il valore predefinito (ad esempio dal progettista classe).

Se l'utente di questa classe sta funzionando correttamente con il valore predefinito, non è necessario aggiungere nulla e solo utilizzarlo. Se non lo è, può modificarlo utilizzando il DD.

2

Penso che il caso d'uso sia come altri casi d'uso per altre annotazioni in vari framework in cui abbiamo usato l'XML separato prima delle annotazioni.

Si può dire lo stesso delle annotazioni JAXB. In realtà, puoi implementare una classe e utilizzare più strategie della sua mappatura in XML. Ma una volta passato alle annotazioni crei una sorta di stretto accoppiamento tra classe e metadati. Lo stesso è rilevante per le annotazioni Spring. Ecc.

In pratica raramente distribuiamo lo stesso servlet due volte utilizzando una configurazione diversa o usiamo lo stesso EJB due volte o la classe map in diversi schemi XML. Ma in questo caso è molto comodo memorizzare i metadati insieme al codice. Questo problema è risolto in java con annotazioni.

Bottom line: utilizzare questa definizione in un'applicazione concreta in cui ogni servlet ha determinate funzionalità e ruoli e per definizione non è riutilizzabile e strettamente accoppiato con la sua mappatura e configurazione URL. Non usare questo se si crea un ambiente come Struts o Spring controller. In questo caso il programmatore dell'applicazione dovrebbe essere in grado di configurare il servlet.

Problemi correlati