Tôi đang viết lại một số ứng dụng web cũ. Có hai đặc biệt là rất, rất giống nhau, nhưng không chia sẻ mã ngày hôm nay và tôi cố gắng sửa chữa điều đó.Các phương pháp hay nhất để chia sẻ mã cấp web (Bộ điều khiển và JSP) giữa các ứng dụng web tương tự
Các dự án đang được viết lại với Maven, Spring MVC và Sitemesh.
Mã lớp mô hình đủ dễ dàng để chia sẻ bằng cách sử dụng các JAR. Nhưng tôi không biết cách nào tốt để chia sẻ mã cấp web phổ biến (JSP và Bộ điều khiển) giữa các ứng dụng tương tự.
Dưới đây là một số thông tin cơ bản. Các ứng dụng này là webstores. Một là một cửa hàng bình thường (nghĩ amazon.com) mà người dùng có thể đăng nhập, tìm kiếm sản phẩm, thêm vào giỏ hàng và kiểm tra. Cách khác về cơ bản là giống nhau, chỉ là một trang web đột kích. Phần trình duyệt sản phẩm và giỏ mua hàng giống hệt nhau. Tuy nhiên, đăng nhập và thanh toán hoàn toàn khác.
Tôi đang đơn giản hóa, nhưng đủ để minh họa sự cố. Có một phần đáng kể của mã cấp web trong phần duyệt qua sản phẩm và giỏ hàng sẽ có thể được chia sẻ giữa hai phần.
Tôi không nghĩ rằng có thể chỉ có cùng một tệp WAR đang chạy dưới dạng "chế độ" dựa trên biến môi trường hoặc cài đặt từ cơ sở dữ liệu khác. Một trong những khác biệt đó là cấu hình Spring Security hoàn toàn khác. Nó cũng sẽ là thích hợp hơn để rời khỏi bộ kiểm soát đăng nhập và kiểm xuất của trang web khác trong quá trình quét thành phần để không ai bằng cách nào đó có thể vượt qua được sai với thao tác URL.
Ban đầu tôi bắt đầu sử dụng Maven Profiles và lọc để giữ hai tập cấu hình khác nhau (web.xml, spring configs, vv) trong cùng một dự án WAR. Dựa trên đó Maven hồ sơ được chọn, kết quả WAR được xây dựng với một tập cấu hình khác nhau (và một tên khác nhau cho rõ ràng). Điều này vi phạm hiệu trưởng Maven rằng một pom tạo ra một tạo phẩm.
Có cách nào tốt hơn để thực hiện việc này không? Điều gì về Maven WAR Overlays? Tôi thấy mọi người nói về việc sử dụng lớp phủ để chia sẻ các tài nguyên phổ biến như CSS, JS, hình ảnh và thậm chí một số JSP phổ biến. Nhưng tôi không thấy ai đề cập đến việc chia sẻ các lớp như Controllers theo cách này.
Tôi có thể đẩy các lớp Controller xuống JAR, nhưng về mặt logic thì có vẻ như chúng nên ở lại với các JSP tương ứng của chúng. Và các JSP cũng không thể bị đẩy xuống các JAR (phải không?).
Tôi cũng nghĩ đến việc biến nó thành một tệp EAR chứa nhiều tệp WAR - một WAR cho trải nghiệm mua sắm chung và WAR khác để đăng nhập và thanh toán thích hợp. Tôi tin rằng phiên có thể được chia sẻ giữa hai WAR trong cùng một EAR, nhưng tôi không chắc chắn rằng nó có thể chơi tốt với các bean phiên phạm vi của Spring hay không. Tôi nghe chúng không thực sự được lưu trữ trong phiên. Tôi cũng phải tìm ra những điều cần làm về các trang trí Sitemesh được sử dụng cho đầu trang/chân trang. Cùng một cấu hình Sitemesh và tài nguyên của nó sẽ cần phải được sao chép vào cả hai WAR, phải không? Vì vậy, cuối cùng, vật phẩm WAR mua sắm sẽ vẫn khác nhau trong từng trường hợp.
Tôi phải tin rằng những người khác đã xử lý vấn đề này trước đây. Tôi đang nghĩ về nó một cách sai lầm? Có một giải pháp chung cho loại điều này?
Đây là một mẹo nhỏ gọn và tôi có thể kết thúc bằng nó e Tôi không thấy chúng tôi từ bỏ Maven. Một trong những bên xuống mà ngay lập tức trở nên rõ ràng là các nhà phát triển không còn có thể cập nhật một JSP trên bay nếu nó được sao chép ra khỏi một JAR. Phải mất một xây dựng lại và triển khai lại từ IDE để xem một chỉnh sửa đơn giản. Tôi nghi ngờ có bất cứ điều gì có thể được thực hiện về điều đó, nhưng tôi là tất cả các tai nếu bạn có một ý tưởng. – KevinF
Vâng ... bạn có thể làm điều gì đó bẩn thỉu với các liên kết tượng trưng, tùy thuộc vào cách bạn chuẩn bị khác nhau để tạo môi trường phát triển của bạn từ tạo tác cuối cùng. Hoặc, nếu bạn đang sử dụng một WAR đã phát nổ, nó sẽ không mất nhiều thời gian để chạy một mục tiêu 'unpack' maven đơn lẻ sau mỗi lần thay đổi JSP. – artbristol