将 context-param 元素替换为 Servlet 3.0 注释

发布于 2024-12-13 12:18:00 字数 298 浏览 1 评论 0 原文

给定:一个 Java EE 5 Web 应用程序,它有一个 web.xml,其中有一个片段,例如“

<context-param>
    <description>c</description>
    <param-name>a</param-name>
    <param-value>b</param-value>
</context-param>

我需要做什么才能将该上下文参数规范移动到基于注释的策略”。

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

<context-param>
    <description>c</description>
    <param-name>a</param-name>
    <param-value>b</param-value>
</context-param>

What would I need to do to move that context-param specification into an annotation based strategy.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

一抹苦笑 2024-12-20 12:18:00

您可以在 javax.servlet 注释rel="nofollow noreferrer">javax.servlet.annotation 包摘要:

  • @HandlesTypes 该注解用于声明 ServletContainerInitializer 可以处理的类类型。
  • @HttpConstraint 此注解在 ServletSecurity 注解中使用,表示要应用于所有 HTTP 协议方法的安全约束,这些方法有相应的方法。 HttpMethodConstraint 元素不会出现在 ServletSecurity 注释中。
  • @HttpMethodConstraint 此注释在 ServletSecurity 注释中使用,表示对特定 HTTP 协议消息的安全约束。
  • @MultipartConfig 可以在 Servlet 类上指定的注释,指示 Servlet 的实例期望符合 multipart/form-data MIME 的请求类型。
  • @ServletSecurity 此注释用于 Servlet 实现类,以指定 Servlet 容器对 HTTP 协议消息强制执行的安全约束。
  • @WebFilter 用于声明 servlet Filter 的注释。
  • @WebInitParam 此注解用在 ServletFilter 实现类上,用于指定初始化参数。
  • @WebListener 该注解用于声明一个WebListener。
  • @WebServlet 用于声明 servlet 的注释。

您会看到,没有什么比 @WebContextParam 更好的了。这也或多或少有意义;你会/能设置什么样的类?

一些依赖于上下文参数的基于 Servlet 的框架(例如 JSF)也允许通过 JNDI 设置其中一些参数。您可能想研究一下。或者,如果它涉及自制代码,那么我会看看 @WebInitParam 对您来说是否不是一个更可行的选择。

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.

ぺ禁宫浮华殁 2024-12-20 12:18:00

如果您使用 Tomcat,则可以在 context.xml 中使用 Parameter 标记,它的工作方式与放入 web.xml 中的 context-param 相同。
因此,您可以使用 @WebInitParam 来捕获上下文变量。

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

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

浅忆流年 2024-12-20 12:18:00

好吧,我认为我们不能使用 “注释”context-param 进行硬编码,因为这背后有一个逻辑原因:我相信你们知道注释总是硬编码在Servlet 和 Servlet 永远不会被内存中的容器加载以服务客户端请求,直到客户端发出第一个请求(请阅读 Servlet 生命周期).

那么,如果我们想从 "context-param" 中获取值(在其他 Servlet 中使用 Annotation 进行硬编码),会发生什么情况呢?并且带有 context-param 注释的 Servlet wrapped 仍未加载到内存中,因此我们无法获取 context 对象 :)

I现在想,你们可以很容易地猜到为什么我们不能在 context-param 的情况下使用注释,因为我们需要使用任何特定的 servlet 来硬编码该注释,而我们不能这样做...... ..

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 .......

时光礼记 2024-12-20 12:18:00

可以使用 @WebServletContextListener 指定 servlet 内容侦听器遇到的数据。例如,

 @WebServletContextListener 

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

    } 

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

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) { 
        .... 
    } 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文