Câu trả lời thông thường cho "cách nào là đúng?" hoặc "đây có phải là cách đúng đắn?" là ..... nó phụ thuộc .
Tất cả những gì tôi có thể làm là cho bạn biết những ưu và nhược điểm đối với những ý tưởng cụ thể. Những gì tiếp theo là 100% ý kiến của tôi. Tôi không biết bất kỳ yêu cầu hoặc quy tắc cụ thể. Tôi chắc chắn ai đó sẽ không đồng ý với tôi.
JSP
Chúng ta hãy nghiên cứu xem có nên đưa JSP vào WEB-INF hay không.
Ưu điểm của việc đưa JSP vào WEB-INF:
- Bạn kiểm soát cách thức thực thi của JSP. Nếu bạn muốn một tệp JSP được tham số hóa và có thể sử dụng lại được (điều này thực sự khó khăn với một bản sao), bạn có thể đặt chúng vào WEB-INF và sử dụng một servlet hoặc bộ điều khiển hành động Struts hoặc một số bộ điều khiển phía trước khác để xử lý trước và sau đó chuyển điều khiển tới JSP, chuyển vào ngữ cảnh môi trường phù hợp (như thuộc tính yêu cầu, mọi kiểm tra bảo mật, vệ sinh tham số, v.v.)
- Bạn có thể lập trình hoặc thậm chí ở cấp độ tường lửa hoặc IDS chặn các yêu cầu HTTP thành * .jsp để giảm khả năng ai đó tải tệp tin lên root web và sau đó có thể thực thi mã dưới dạng máy chủ web. Họ sẽ phải ghi đè lên một bản JSP hiện có. Không phải là một lợi ích bảo mật lớn, nhưng nó làm cho sự thỏa hiệp hơi khó khăn hơn.
- Thực thi các thói quen tốt, như MVC, bộ điều khiển phía trước, bộ lọc servlet, nội xạ phụ thuộc, v.v. trái ngược với một bản sao khổng lồ khổng lồ làm tất cả công việc và rất khó đọc / duy trì.
Nhược điểm của việc đưa JSP vào WEB-INF:
- Bạn không thể truy cập trang trực tiếp, ngay cả khi đó là một trang độc lập đơn giản không cần xử lý trả trước. Điều này là do các tệp trong / WEB-INF không thể được phục vụ bởi một thùng chứa servlet.
Tệp tĩnh
Đối với các tệp hoàn toàn tĩnh như HTML, hình ảnh, biểu định kiểu, javascript, v.v. hãy đặt chúng dưới gốc web (my_app trong trường hợp của bạn), nhưng KHÔNG / WEB-INF (vì không thể truy cập được).
Bố cục tổng thể
Đối với bố cục thư mục tổng thể, nó phụ thuộc phần nào vào quá trình xây dựng của bạn. Tôi thích lưu trữ mọi thứ trong "src" hoặc "nguồn" bởi vì nó cho thấy rõ những tệp nào được tạo bằng cách xây dựng và đó là các tệp nguồn thuần. main
cho phép bạn tách mã kiểm tra như các lớp Junit khỏi mã nguồn chính của bạn, điều này cũng tốt. Nhưng nếu bạn không có bất kỳ bài kiểm tra đơn vị nào (ồ không!), Thì đó là một sự khác biệt vô nghĩa.
Mặt khác, nếu bạn hoàn toàn không thao túng root web trong quá trình xây dựng (như nếu đó là tất cả các tệp tin tĩnh và tệp tĩnh), thì có lẽ bạn giữ nó ở cấp cao nhất, thích /webroot
hoặc /deploy
sao chép các tệp khi cần, chẳng hạn như tập tin. Class hoặc .jar. Đó là thói quen của con người (đặc biệt là các nhà phát triển) tổ chức quá mức. Một dấu hiệu tốt của việc tổ chức quá mức là có rất nhiều thư mục chỉ có một thư mục con duy nhất.
Những gì bạn đã thể hiện
Bạn đã chỉ ra rằng bạn đang theo một quy ước được thiết lập bởi maven, vì vậy nếu bạn đã sử dụng maven, chỉ cần sử dụng bố cục đó. Hoàn toàn không có gì sai với bố cục bạn mô tả.