12
votes

Remplacer un élément contextuel-param avec un servlet 3.0 Annotation

donné: une application Web Java EE 5 qui a un web.xml qui a un extrait comme xxx

Que devrais-je faire pour déplacer cette spécification contextuelle dans une annotation basée sur une annotation stratégie.


1 commentaires

Je ne sais pas si vous pouvez le faire en utilisant des annotations. Les paramètres de contexte de servlet sont à l'échelle du conteneur. Par conséquent, je ne sais même pas où vous devriez les mettre (cela n'a pas beaucoup de sens de les mettre à côté d'un servlet particulier). Un servletContextinInitializer semblerait être le plus adéquat, mais je ne pense pas que ce soit possible.


4 Réponses :


9
votes

Vous pouvez trouver tous les javax.servlet annotations dans javax.servlet.annotation Résumé du paquet:

  • @handlestypes Cette annotation est utilisée pour déclarer les types de classe qu'un servletContainérisateur peut gérer.
  • @HTTPConstraint Cette annotation est utilisée dans l'annotation Servletsecurity pour représenter les contraintes de sécurité à appliquer à toutes les méthodes de protocole HTTP pour lesquelles un élément correspondant httpmethodconstraint ne se produit pas dans le Servletsecurity Annotation.
  • @httpmethodconstraint Cette annotation est utilisée dans l'annotation servletsecurity pour représenter les contraintes de sécurité sur des messages de protocole HTTP spécifiques.
  • @multiparconfig annotation qui peut être spécifiée sur une classe de servlet indiquant que les instances du servlet attendent des demandes conformes au type MIME multipart / formulaire-Data-Data.
  • @Servletsecurity Cette annotation est utilisée sur un Classe de mise en œuvre pour spécifier des contraintes de sécurité à appliquer par un conteneur de servlet sur des messages de protocole HTTP.
  • @webfilter annotation utilisée pour déclarer un servlet filtre .
  • @webinitparam Cette annotation est utilisée sur un servlet ou Filtre Classe de mise en œuvre pour spécifier un paramètre d'initialisation.
  • @weblistener Cette annotation est utilisée pour déclarer un weblistener.
  • @weServlet annotation utilisée pour déclarer un servlet.

    Vous voyez, rien de tel qu'un @webcontextExtParam . Ce qui fait aussi moins ou plus de sens; sur quel genre de classe serait / pourriez-vous la définir?

    Certains cadres de servlet qui s'appuient sur des paramètres de contexte, tels que JSF, permettent également de les définir par JNDI. Vous voudrez peut-être examiner cela à la place. Ou s'il s'agit de Code local, alors je regarderais si @webinitparam n'est pas une option plus réalisable pour vous.


2 commentaires

Je penserais quelque chose comme @webcontextParam serait utile sur un servlet comme moyen d'injecter un paramètre de contexte dans plusieurs artefacts (contrastés avec un @webinitparam pour un seul servlet / filtre).


Je vais accepter cette réponse. C'est une réponse à ce que j'ai demandé ... mais pas ce que je voulais vraiment demander. Je vais ouvrir une nouvelle question à demander 'ce que je voulais demander' ...



5
votes

Si vous utilisez tomcat, vous pouvez utiliser la balise de paramètre dans context.xml , et il fonctionnera identique comme un paramètre contextuel-paramé dans web.xml . Vous pouvez donc utiliser @webinitparam pour attraper une variable de contexte.

http://tomcat.apache.org/tomcat- 5.5-DOC / CONFIG / CONTEXTE.HTML # Context_Parameters


1 commentaires

Pas tout à fait sûr si cela répond à la question. Je pense que la question peut-être sur la manière de définir le paramètre dans une stratégie d'annotation, pas nécessairement l'accéder. (Mais je pourrais avoir tort, alors pas voter)



1
votes

Eh bien, je pense que nous ne pouvons pas simplement ne pas être codée context-param en utilisant "annotation" car il y a une raison logique derrière ceci: je suis sûr que vous connaissez les annotations est Toujours codé dans le servlet et servlet jamais chargé par le conteneur dans la mémoire pour servir la demande du client jusqu'à ce que sa première demande soit faite par Client (Lire le cycle de vie de servoulets ) .

Alors, que se passe-t-il si nous voulons obtenir les valeurs de "context-param" , ce qui est codé dur à l'aide d'une annotation dans un autre servlet? Et le servlet enveloppé avec context-param Annotation n'est toujours pas chargé dans la mémoire, nous ne pouvons donc pas obtenir l'objet pour le contexte :) < / p>

Je pense que maintenant vous pouvez facilement deviner pourquoi nous ne pouvons pas utiliser l'annotation en cas de context-param car nous devons avoir besoin de codes racontant cette annotation avec n'importe quel servlet spécifique et nous ne pouvons pas le faire. ......


0 commentaires

1
votes

On peut spécifier l'écouteur de contenu de servlet répondant aux données à l'aide de @webservletContextEnger. Par exemple,

 @WebServletContextListener 

public class TestServletContextListener implements javax.servlet.ServletContextListener { 
    public void contextInitialized(ServletContextEvent sce) { 

    } 

    public void contextDestroyed(ServletContextEvent sce) { 
        .... 
    } 
}


0 commentaires