2009-08-20 36 views
5

Tôi mới làm quen với Spring MVC. Nhưng tôi đã có kinh nghiệm nhất định khi làm việc với Struts 1.x. Tôi muốn biết nếu thực hành phổ biến là tùy chỉnh DispatcherServlet trong khi làm việc với Spring MVC, như mọi người đôi khi tùy chỉnh ActionServlet hoặc RequestProcessor trong Struts 1.x?Có phải tùy biến DispatcherServlet trong Spring MVC hay không?

Hoặc hãy mở rộng câu hỏi một chút. Đâu là điểm vào cho một lập trình viên kỳ cựu của Spring MVC để tùy chỉnh khung MVC?

Cảm ơn bạn.

+1

Bạn có thể làm rõ ý bạn muốn bằng cách tùy chỉnh - ý của bạn là chuyên (như tôi đã trả lời) hoặc định cấu hình (như adatapost được trả lời)? –

+0

Thực ra tôi có nghĩa là cả hai, vì tôi cần tất cả thông tin về việc mở rộng nó. Hơn nữa, tôi đồng ý với bạn. Mở rộng DispatcherServlet và được thay thế bằng cách sử dụng Bộ lọc hoặc Bộ điều khiển. Tuy nhiên, theo cách này, Spring MVC không thể cung cấp giao diện chuẩn cho các nhà phát triển trình cắm thêm. Trong thanh chống, một số trình cắm thêm được thực hiện bằng cách mở rộng "RequestProcessor". –

+0

Tôi không thực sự quen thuộc với kiến ​​trúc plug-in Struts nhưng tôi sẽ nói API Spring MVC là khá trần xương.Đó là một chút ảo tưởng tên, vì nó chỉ thực sự là một phần điều khiển của mô hình MVC để bạn xác định các khung nhìn và mô hình của bạn khi cần thiết (thường là các JSP và POJO). –

Trả lời

3

Chắc chắn đó là một thực hành tốt. Spring Framework - Web MVC framework

Tóm tắt: Bạn có thể tùy chỉnh Spring DispatcherServlet bằng cách thêm bối cảnh thông số .... đặc biệt tiện dụng khi bạn có rất nhiều các chức năng thông thường trong một bộ điều khiển.

+1

Cảm ơn, rất hữu ích. –

1

Tại sao bạn muốn chuyên org.springframework.web.servlet.DispatcherServlet?

Bất kỳ yêu cầu xử lý trước nào có thể/phải đạt được với một javax.servlet.Filter và phần còn lại là để triển khai org.springframework.web.servlet.mvc.Controller.

Hoặc xem câu hỏi adatapost, trong đó đề cập đến cấu hình của org.springframework.web.servlet.DispatcherServlet qua tệp web.xml.

+0

Tôi đặt câu hỏi này để tôi có thể hiểu rõ hơn về khuôn khổ này và để xem cách thức này có thể phục vụ. :) –

+0

Tại sao bạn muốn chuyên điều gì? Bởi vì bạn có thể có nhu cầu mà người khác chưa có. Vì vậy, tôi không thể hiểu làm thế nào câu trả lời như vậy có thể có một upvote anyway. Nếu một lớp có các phương thức "được bảo vệ", mà DispatcherServlet có, điều đó chắc chắn có nghĩa là nhà phát triển tin rằng có thể cần phải ghi đè lên nó. Các nhà phát triển Grails đã overriden DispatcherServlet và cho họ Các bộ lọc không đủ để tùy chỉnh một số chức năng. –

+0

Luôn có khả năng mà bạn có thể chuyên môn, nhưng câu hỏi được hỏi liệu nó có phổ biến không, và không có cách nào tốt hơn để đạt được những gì bạn cần, mặc dù được cấp, điều này có thể không phải lúc nào cũng đúng. –

4

DispatcherServlet, giống như hầu hết API Spring, được thiết kế rất nhiều để mở rộng. Thật vậy, nếu bạn tìm thấy một phần của nó không phải là ammenable để subclassing, nộp một vấn đề trên JIRA của họ và họ sẽ có khả năng sửa chữa nó cho bạn (tôi đã làm điều đó trên một số dịp).

Có nói rằng, phần lớn các chức năng có thể đạt được thông qua cấu hình của DispatcherServlet thay vì mở rộng của nó.

+0

Bạn nói đúng. Tôi thậm chí không thể đặt tên một thứ duy nhất không thể đạt được bằng cách thực hiện hiện tại. Cám ơn về việc khuyên của bạn. Tôi sẽ gửi một vấn đề nếu tôi thấy sự cần thiết. –

1

Tôi, vì một, chưa bao giờ tìm thấy lý do để mở rộng DispatcherServlet.

+1

Điều này là tốt để biết;) –

2

Đây là gợi ý của tôi khi tôi nghĩ rằng việc mở rộng servlet dispatcher sẽ là giải pháp 'a'.

  1. xác nhận riêng biệt, chuyển đổi từ điều khiển (vì nhiều lý do tốt)
  2. làm cho bộ điều khiển chỉ là một người ủy nhiệm để lớp dịch vụ.
  3. xây dựng/điền đầy đủ đối tượng miền/yêu cầu 'trước khi' đến trình điều khiển.
+0

Nếu bạn nghĩ đó là một cách hay, hãy tiếp tục và triển khai nó. Mặc dù tôi đã hỏi câu hỏi này ngay từ đầu, tôi đã không tìm thấy một trường hợp nào trong đó tôi phải mở rộng DispatcherServlet. –

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