struts 2如何在struts.jar中包含jsp中的javascript文件?

Jua*_*des 3 javascript jsp struts2

我注意到struts 2框架的javascript客户端验证功能使用了struts2 JAR文件中的javascript文件.javascript文件显然只是通过使用框架中的标记以某种方式包含在JSP页面中.

如果我设法做到这一点,对于我在每个新的Web项目中总是复制的许多javascript库文件将非常有帮助,因为我将它们全部放在JAR文件中,然后每个项目都没有不同文件的副本(如你所知,这会造成很多麻烦).

谁知道他们是怎么做到的?

Jua*_*des 9

好吧,我从工作中抽出一些时间来研究框架是如何做到这一点的.事实证明,Struts 2有一个实现来提供静态内容.这是在配置文件struts.properties中由属性:struts.serve.static配置的.

如果该属性设置为true,则JSP页面中以路径/ struts // static /开头的任何静态内容(javascript,css,images等)将由struts FilterDispatcher和其他名为DefaultStaticContentLoader的类提供.

例如:

<script language="JavaScript" type="text/javascript" src="struts/someScript.js"></script>
<script language="JavaScript" type="text/javascript" src="static/otherScript.js"></script>
Run Code Online (Sandbox Code Playgroud)

这两个javascript文件都将由Filter和ContentLoader提供.

默认情况下,ContentLoader类将仅在Struts 2核心JAR内的两个文件夹中查找所请求的文件:org.apache.struts2.statictemplate.

现在有一种方法可以使ContentLoader在其他地方进行查找,并在过滤器参数中的web.xml文件中进行配置,如下所示:

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
    <param-name>packages</param-name>
    <param-value>insert.your.package.with.static.content.here</param-value>
</init-param>
</filter>
Run Code Online (Sandbox Code Playgroud)

我花了很长时间才发现这个,关于这个功能的信息不多.如果你想读这个文档是Struts2的API在FilterDispacher类在这里正确的地方说:"提供静态内容".

希望你会觉得它很有用,对我来说这是一个很棒的功能,而且它实现得非常好.