Tôi phải thực thi hành động struts2 khi khởi động máy chủ thay vì theo yêu cầu đầu tiên.Làm cách nào để chạy một hành động khi khởi động máy chủ bằng Struts2?
Trả lời
Tải dữ liệu khi khởi động ứng dụng là một tác vụ phổ biến, bạn sẽ tìm thấy một số ví dụ trên web. Như đã nói trong các câu trả lời khác, bạn nên thực hiện một ServletContextListener (không phải là Struts2 cụ thể) ... bạn có thể read a great example here.
Điều quan trọng ở đây là sự hiểu biết khái niệm hành động:
Trong Struts2 MVC
(Model View Controller) Framework, một Action
là Controller
(và một phần của Model
).
Action
s được gọi bởi Request
s đến từ Client
s (và một Hành động được tạo trên mọi yêu cầu, vì vậy chúng an toàn chỉ).
Điều này có nghĩa là bạn cần một Khách hàng, thường là có nghĩa là một người đứng trước máy tính, nhấp vào trình duyệt ... sau đó, cuộc gọi của khách hàng không phải là trình kích hoạt phù hợp để thực hiện tự động trên các đối tượng dùng chung.
Tất nhiên bạn có thể triển khai một số hình thức lazy-initialitazion
(ví dụ:với sự trợ giúp của một Interceptor tùy chỉnh để người dùng đầu tiên thiết lập một thứ gì đó trong phạm vi Application và những người dùng khác sẽ truy xuất đối tượng đã được điền, nhưng đây không phải là cách tốt nhất để làm điều đó (bạn nên xử lý đồng thời về việc khởi tạo, và bạn sẽ có một người dùng, đầu tiên, chờ đợi các hoạt động mà máy chủ có thể thực hiện trong đêm khi khởi động ...).
Viết một ServletContextListener, điều này sẽ chỉ có sẵn cho mỗi ứng dụng web và sẽ được instatiated khi ứng dụng được triển khai.
Đây là post
tải khi khởi động trong servlet và jsp hiện diện như sau
Bạn có thể yêu cầu trang được nạp khi máy chủ khởi động. Việc này được thực hiện qua tệp web.xml
<servlet>
<servlet-name>login</servlet-name>
<jsp-file>/login.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
Tệp jsp thông thường được biên dịch khi lần truy cập đầu tiên. Bây giờ mã cho biết biên dịch trước một tệp jsp mà không cần đợi lần truy cập đầu tiên.
For struts2 you can change programatically in web.xml
<listener>
<listener-class>your listener class</listener-class>
</listener>
tham khảo liên kết này nó có thể hữu ích cho bạn
Bạn nên cung cấp giải thích VÀ liên kết (VÀ cuối cùng mã) :) Liên kết một mình không được khuyến khích bởi vì nếu trang web bên ngoài là xuống, độc giả sẽ không thể hiểu được câu trả lời –
Nếu bạn muốn một số mã để chạy khi ứng dụng web của bạn, aka Servlet Context, bắt đầu cho lần đầu tiên, sau đó bạn nên tận dụng các móc được cung cấp bởi công nghệ này. API Servlet cung cấp các vòng đời cho bạn sử dụng để kích hoạt mã tại các giai đoạn vòng đời khác nhau của một ứng dụng web. Vì tất cả các ứng dụng Struts 2 là Servlet API ứng dụng web, sau đó bạn có thể tận dụng điều này cho mình.
Giao diện ServletContextListener cung cấp phương pháp móc nối init. Bạn chỉ cần triển khai thực hiện giao diện này và đăng ký triển khai thực hiện của bạn trong web.xml.
Lưu ý, nếu những gì bạn cần làm là Struts 2 cụ thể hơn, thì bạn có thể cân nhắc sử dụng thứ gì đó từ bên trong chính API Struts 2.
Tại sao bạn muốn gọi một ACTION khi khởi động máy chủ? – DarkHorse
Tôi cần phải khởi tạo trước một số dữ liệu được lưu trữ trong phạm vi ứng dụng để các yêu cầu ajax truy cập dữ liệu đó phản hồi nhanh từ yêu cầu đầu tiên từ người dùng. – LNyarla