2010-10-28 36 views
12

Tôi muốn đặt một số tập tin JavaScript trong một trong các gói của tôi và làm cho Struts phục vụ họ như /struts/js/foo.jsPhục vụ các tập tin tĩnh (JavaScript) với Struts 2

Struts nào đó cho tập tin trong gói 'mẫu' (đó là nơi jQuery plugin các tệp được đặt, được bảo vệ theo tùy chọn struts.ui.templateDir). Tuy nhiên tôi muốn đưa những tập tin đó vào một gói khác; Nếu tôi xác định lại struts.ui.templateDir thì thanh chống ngừng hoạt động vì không thể tìm thấy mẫu của nó.

Vì vậy, câu hỏi đặt ra là: Cách yêu cầu Struts phân phát tệp trong org.foo.some.package.js/struts/js/whatever.js?

+2

Bạn đã thấy liên kết này: http://struts.apache.org/development/2.x /docs/static-content.html? –

+0

@AleksandrM đẹp, không biết điều đó. Bạn là một ứng cử viên tốt cho tiền thưởng nếu bạn quan tâm để viết một câu trả lời đầy đủ. – alamar

+2

tại sao không sử dụng một số máy chủ web cho điều này? nói Apache hoặc nigix đó là cách tốt hơn và hiệu quả để phục vụ nội dung tĩnh –

Trả lời

7

struts2 có thể phục vụ nội dung tĩnh ra khỏi hộp. Theo nội dung tĩnh mặc định đang được phục vụ bởi DefaultStaticContentLoader việc triển khai StaticContentLoader. Nó tự động tìm kiếm các gói sau:

  • org.apache.struts2.static
  • mẫu
  • tĩnh
  • org.apache.struts2.interceptor.debugging

Bạn có thể bổ sung thêm gói được tìm kiếm trong tham số init bộ lọc có tên là "gói".

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

Bạn có thể thêm nhiều gói, sử dụng dấu phẩy hoặc dấu cách hoặc tab hoặc dòng mới làm dấu phân cách.

BTW bạn có thể kiểm soát xem nội dung tĩnh đang được lưu trữ bởi trình duyệt hay không với hằng số này:

struts.serve.static.browserCache 
+0

Câu trả lời hợp lý, +1 –

+0

Họ quản lý các gói có tên tĩnh như thế nào? Đó là một từ dành riêng: -/ – alamar

+0

@alamar: Vâng, nó là dành cho tài nguyên tĩnh sau khi tất cả. Vì vậy, không có tệp nguồn trong đó. –

3

Một cách là mở rộng toàn bộ mẫu & thay đổi templateDir như bạn đã đề xuất. Trừ khi một trong những nhu cầu để thực hiện một mẫu tùy chỉnh, điều này là rất cao giết.

Nhưng cách tốt nhất IMHO là quên /struts/js/foo.js & sử dụng bất kỳ URL nào khác để tải js.

vài mẫu:

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> 
+0

Vâng, có cách nào dễ dàng để làm cho Struts phục vụ js của tôi tại bất kỳ url nào khác không? – alamar

+0

@alamar Tôi đã chỉnh sửa câu trả lời của mình để thêm mã mẫu. –

Các vấn đề liên quan