使用 Struts 2 提供静态文件 (JavaScript)

发布于 2024-09-29 10:02:50 字数 381 浏览 9 评论 0原文

我想将一些 JavaScript 文件放入我的一个包中,并让 Struts 为它们提供服务,就像 /struts/js/foo.js

Struts 对“template”包中的文件执行此操作(这就是 jQuery 插件的文件所在的位置)位于,由 struts.ui.templateDir 选项保护)。但是我想将这些文件放入另一个包中;如果我重新定义 struts.ui.templateDir 那么 struts 将停止工作,因为它找不到它的模板。

所以问题是:如何告诉 Struts 将 org.foo.some.package.js 中的文件作为 /struts/js/whatever.js 提供服务?

I want to put some JavaScript files in one of my packages and make Struts serve them like /struts/js/foo.js

Struts does that for files in 'template' package (that's where jQuery plugin's files are located, guarded by struts.ui.templateDir option). However I want to put those files into another package; If I redefine struts.ui.templateDir then struts ceases working because it can't find its templates.

So the question is: How to tell Struts to serve files in org.foo.some.package.js as /struts/js/whatever.js?

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

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

发布评论

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

评论(2

故事未完 2024-10-06 10:02:50

Struts2 可以开箱即用地提供静态内容。默认情况下,静态内容由 DefaultStaticContentLoaderStaticContentLoader 的实现)提供。它会自动搜索以下包:

  • org.apache.struts2.static
  • template
  • static
  • org.apache.struts2.interceptor.debugging

您可以在名为“packages”的过滤器初始化参数中添加要搜索的其他包。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
    <init-param>
        <param-name>packages</param-name>
        <param-value>some.package another.one</param-value>
    </init-param>
</filter>

您可以添加多个包,使用逗号或空格或制表符或换行符作为分隔符。

顺便说一句,您可以使用此常量控制浏览器是否缓存静态内容:

struts.serve.static.browserCache

Struts2 can serve static content out of the box. By default static content is being served by DefaultStaticContentLoader an implementation of StaticContentLoader. It automatically searches the following packages:

  • org.apache.struts2.static
  • template
  • static
  • org.apache.struts2.interceptor.debugging

You can add additional packages to be searched in filter init parameter named "packages".

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
    <init-param>
        <param-name>packages</param-name>
        <param-value>some.package another.one</param-value>
    </init-param>
</filter>

You can add more than one package, use comma or space or tab or new line as separator.

BTW you can control whether static content is being cached by a browser or not with this constant:

struts.serve.static.browserCache
东京女 2024-10-06 10:02:50

一种方法是扩展整个模板&按照您的建议更改 templateDir 。除非需要实现自定义模板,否则这是非常过分的。

但恕我直言,最好的方法是忘记 /struts/js/foo.js &使用任何其他 URL 加载 js。

一些示例:

JSP

WebPages
    |-->myjs.js         (a normal js file)
    |-->mydynamicjs.jsp (a .jsp file containing ONLY javascript code)
    |-->WEB-INF-->xyz.js (another .js file but accessed only through action)

Struts

<action name="myacctionjs">
    <result>/WEB-INF/xyz.js</result>
</action>

One way is to extend the entire template & change the templateDir as you already suggested. Unless one needs to implement a custom template, this is highly over-kill.

But the best way IMHO is to forget /struts/js/foo.js & use any other URL to load the js.

Few Samples :

JSP

WebPages
    |-->myjs.js         (a normal js file)
    |-->mydynamicjs.jsp (a .jsp file containing ONLY javascript code)
    |-->WEB-INF-->xyz.js (another .js file but accessed only through action)

Struts

<action name="myacctionjs">
    <result>/WEB-INF/xyz.js</result>
</action>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文