Replace a context-param element with a Servlet 3.0 annotation

后端 未结 4 685
粉色の甜心
粉色の甜心 2020-12-15 09:46

Given: a Java EE 5 web app that has a web.xml that has a snippet like


    c
    

        
相关标签:
4条回答
  • 2020-12-15 10:18

    You can find all javax.servlet annotations in the javax.servlet.annotation package summary:

    • @HandlesTypes This annotation is used to declare the class types that a ServletContainerInitializer can handle.
    • @HttpConstraint This annotation is used within the ServletSecurity annotation to represent the security constraints to be applied to all HTTP protocol methods for which a corresponding HttpMethodConstraint element does NOT occur within the ServletSecurity annotation.
    • @HttpMethodConstraint This annotation is used within the ServletSecurity annotation to represent security constraints on specific HTTP protocol messages.
    • @MultipartConfig Annotation that may be specified on a Servlet class, indicating that instances of the Servlet expect requests that conform to the multipart/form-data MIME type.
    • @ServletSecurity This annotation is used on a Servlet implementation class to specify security constraints to be enforced by a Servlet container on HTTP protocol messages.
    • @WebFilter Annotation used to declare a servlet Filter.
    • @WebInitParam This annotation is used on a Servlet or Filter implementation class to specify an initialization parameter.
    • @WebListener This annotation is used to declare a WebListener.
    • @WebServlet Annotation used to declare a servlet.

    You see, there's nothing like a @WebContextParam. Which makes also less or more sense; on what kind of class would/could you set it?

    Some Servlet based frameworks which rely on context parameters, such as JSF, also allows for setting some of them by JNDI. You might want to look into that instead. Or if it concerns homegrown code, then I'd look if @WebInitParam isn't a more feasible option for you.

    0 讨论(0)
  • 2020-12-15 10:24

    One can specify the servlet content listener met data by using @WebServletContextListener. For instance,

     @WebServletContextListener 
    
    public class TestServletContextListener implements javax.servlet.ServletContextListener { 
        public void contextInitialized(ServletContextEvent sce) { 
    
        } 
    
        public void contextDestroyed(ServletContextEvent sce) { 
            .... 
        } 
    }
    
    0 讨论(0)
  • 2020-12-15 10:31

    If you are using Tomcat, you can use the Parameter tag in context.xml, and it will work identical as a context-param put in web.xml. So you can use @WebInitParam to catch a context variable.

    http://tomcat.apache.org/tomcat-5.5-doc/config/context.html#Context_Parameters

    0 讨论(0)
  • 2020-12-15 10:32

    Well I think we just can't hardcode context-param using "Annotation" because there is a logical reason behind this : i am sure you guys knows annotations is always hardcoded in the Servlet and Servlet never loaded by the container in the memory for serving the client request until its first request is made by client (read Servlet Life Cycle ).

    So what happen if we want to get the values out of "context-param" , which is hard-coded using Annotation in some other Servlet ? And the Servlet wrapped with context-param annotation is still not loaded in the memory thus we can't get the object for context :)

    I think now you guys can easily guess why we can't use Annotation in case of context-param because we need to hardcode that Annotation with any specific servlet and we can't do that .......

    0 讨论(0)
提交回复
热议问题