【问题标题】:Apply attributes to JSP pages将属性应用到 JSP 页面
【发布时间】:2012-08-01 06:55:50
【问题描述】:

我想做的是将项目中的每个 JSP 页面与一个属性相关联。可以说,我有三页:

helloWorld.jsp
helloUniverse.jsp

这里的属性是'Operation'。有没有办法可以将它应用于他们:

helloWorld.jsp -> Operation: "HelloWorld"
helloUniverse.jsp -> Operation: "HelloUniverse"

这样它们就可以从ServletContextListener 获得:

public void contextInitialized(final ServletContextEvent event) {   
    final ServletContext ctx = event.getServletContext();

    // Following is the code I wish for:
    List<Class<Servlet>> pages = ctx.getAllPages();
    for(Class<Servlet> page : pages) {
        operationMap.put(page.getName(), page.getAttribute("operation"));
    }
}

我知道这看起来非常牵强..但是这样的事情可能吗?

【问题讨论】:

  • 您可以在每个页面上添加一个隐藏参数,该参数的值可以填写此问题的答案:How to get page name in JSP or JSTL?
  • 问题是当JSP被加载时它仍然会被执行。我不想要那个。当 Web 应用程序启动时,我需要它存在。
  • 为什么要构建这样的地图?我认为无论你试图实现什么,你都在朝着错误的方向前进。

标签: java jsp tomcat servlets


【解决方案1】:

好的,首先是静态方式: 创建一个 operation.properties 并逐行添加所有操作值。

  HelloWorld=helloWorld.jsp
  HelloUniverse=helloUniverse.jsp

【讨论】:

  • 这不是一个好的解决方案,创建新页面、更改名称和删除时会非常难以维护。
【解决方案2】:

这只是一个理论,但是:

<servlet>
<servlet-name>helloWorldJsp</servlet-name>
<jsp-file>/helloWorld.jsp</jsp-file>
<init-param>
<param-name>operation</param-name>
<param-value>HelloWorld</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>helloUniverseJsp</servlet-name>
<jsp-file>/helloUniverse.jsp</jsp-file>
<init-param>
<param-name>operation</param-name>
<param-value>helloUniverse</param-value>
</init-param>
</servlet>

您实际上可以将您的 jsp 映射为 servlet(最终它们是 servlet,对吗?)在那里分配 init 参数,然后在引导程序中读取它们,我不知道这是否足够,但它可能是您需要的。 缺点是您必须在 web.xml 中重新声明所有 jsp,但它比静态的东西要好。

如果您不喜欢静态变量,您也可以拥有一个资源文件并在引导时读取它并维护该文件以及可能也可以工作的 jsp。

【讨论】:

  • 在创建、更改名称或删除页面时应该如何维护?这将是一项艰巨的工作。
猜你喜欢
  • 2019-02-20
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多