2011-09-16 37 views
36

Từ XmlWebApplicationContext javadoc:Spring-MVC: "không gian tên" và "không gian tên" là gì?

Theo mặc định, cấu hình sẽ được lấy từ "/WEB-INF/applicationContext.xml" cho bối cảnh gốc, và "/WEB-INF/test-servlet.xml" cho một ngữ cảnh với không gian tên "test-servlet" (giống như đối với một cá thể DispatcherServlet với tên servlet-name "test").

Ngữ cảnh mùa xuân có nghĩa là gì?

Ngữ cảnh gốc là gì? Có những loại ngữ cảnh mùa xuân nào khác?

Không gian tên là gì?

UPDATE:

Một số câu hỏi tiếp theo:

  1. một ApplicationContext mùa xuân là gì - là nó một số "điều" chứa đậu được định nghĩa trong một file XML cấu hình?

  2. Nhìn vào mã của ContextLoaderListener, có vẻ như nó tải dữ liệu được xác định trong (các) tệp cấu hình XML. Nhưng ứng dụng web mùa xuân của tôi hoạt động mà không xác định người nghe này hoặc bất kỳ người nghe nào khác. Lam thê nao điêu đo co thể?

  3. Trong trường hợp nào sẽ có ý nghĩa khi có nhiều bản sao của DispatcherServlet của Spring?

  4. Ngữ cảnh gốc (dữ liệu từ applicationContext.xml) có áp dụng cho mọi trường hợp của DispatcherServlet hay không, trong khi các ngữ cảnh khác (ví dụ: dữ liệu từ test-servlet.xml) chỉ áp dụng cho DispatcherServlet có liên quan (tức là thử nghiệm)?

Trả lời

22

"Ngữ cảnh mùa xuân" = a Spring ApplicationContext.

"ngữ cảnh gốc", về mặt ứng dụng web, có nghĩa là ngữ cảnh chính được ứng dụng web tải và sử dụng. Thông thường, bạn sẽ bắt đầu ngữ cảnh gốc với một số ContextLoaderListener.

Ngữ cảnh gốc không thực sự là "loại" ngữ cảnh. Nó chỉ là một vai trò mà một bối cảnh chơi. Bạn có một ngữ cảnh gốc trong một webapp. Các ngữ cảnh khác không phải là ngữ cảnh gốc. Chúng thường là con của ngữ cảnh gốc.

Không gian tên ở đây đề cập đến phạm vi của một phiên bản của DispatcherServlet của Spring. Tất cả những gì nó nói ngay ở đây là nếu bạn đặt tên servlet là "test" trong web.xml của mình, thì theo quy ước, Spring sẽ tìm kiếm một tệp có tên "test-servlet.xml" để sử dụng làm bối cảnh của điều phối viên đó. Ngẫu nhiên, mỗi bối cảnh như thế này được tạo ra cho một người điều phối trở thành một đứa trẻ của bối cảnh gốc.

Edit: Để trả lời những câu hỏi mới của bạn:

  1. Thực hiện theo các liên kết trong dòng đầu tiên của câu trả lời của tôi để tìm hiểu về các ApplicationContext. Nếu bạn có câu hỏi không được trả lời ở đó, tôi khuyên bạn nên đăng câu hỏi SO mới.
  2. Ngữ cảnh gốc là tùy chọn. Nếu bạn không định nghĩa ContextLoaderListener, thì bạn không có ngữ cảnh gốc.Khi bạn sử dụng DispatcherServlet, nó sẽ khởi chạy ApplicationContext của riêng nó và nó sẽ nhận được các hạt mà nó cần từ đó.
  3. Tôi không biết một cái nào trên đầu tôi. Tôi cho rằng nếu có nhu cầu cho các cấu hình khác nhau đáng kể giữa một số tài nguyên URL trong ứng dụng của bạn, điều đó có thể khiến bạn làm điều đó.
  4. Có. Để tuyên bố nó theo đúng ngữ cảnh, ngữ cảnh gốc là ngữ cảnh gốc của bất kỳ bối cảnh nào bắt đầu cho một DispatcherServlet. Đậu trong một bối cảnh cha mẹ có thể truy cập thông qua và bởi bối cảnh con, nhưng ngược lại là không đúng sự thật.
+0

@rapt: Điều đó không thực sự phù hợp với nhiều nhận xét. Tại sao bạn không thêm những câu hỏi này vào câu hỏi của mình ở trên hoặc bắt đầu một câu hỏi mới? –

+0

Cảm ơn, chỉ cần thêm câu hỏi của tôi vào bài đăng gốc. – rapt

+0

Cập nhật với câu trả lời –

8

Trong ứng dụng web, kiến ​​trúc thường được chia thành các lớp như cấu trúc MVC phổ biến. Vì vậy, một ứng dụng web bao gồm về cơ bản một lớp xử lý các yêu cầu của khách hàng, ví dụ: HTTPRequests và một lớp dịch vụ các yêu cầu đó.

Để tóm tắt: các lớp có nghĩa là để xử lý các yêu cầu Http tức là các bộ điều khiển được ánh xạ tới các url đến dưới tệp test-servlet.xml. Điều này được gọi là WebapplicationContext chỉ chứa các bean được yêu cầu chủ yếu để xử lý các yêu cầu của máy khách.

Bây giờ phần tiếp theo là lớp Dịch vụ/Dao bao gồm logic nghiệp vụ của bạn. Đậu thực hiện logic như vậy được nạp dưới đối tượng ApplicationContext.

Bây giờ bạn có thể hỏi tại sao họ tách những thứ này thành các tệp hoặc hai đối tượng khác nhau.

Bởi vì, ứng dụng có cùng logic nghiệp vụ có thể được nhiều khách hàng sử dụng trên giao thức khác nhau. Bạn có thể sử dụng cùng một lớp dịch vụ để xử lý RMI cũng như các cuộc gọi HTTP. Vì vậy, Spring tạo ra một bối cảnh cha mẹ mà bắt đầu chúng tôi như là một ApplicationContext. Và sau đó nếu các yêu cầu web của bạn yêu cầu, bạn có thể tạo một servlet dispathcher có một ngữ cảnh Webapplication riêng của nó và được khởi tạo như là một phần tử con của bối cảnh cha mẹ. Vì vậy, tất cả các hạt đậu mẹ có thể được tham chiếu trong đứa trẻ và có thể được bù trừ nhưng không ngược lại

+0

Được rồi, một số không liên quan gì đến câu hỏi của tôi. Nhưng đối với phần còn lại tôi không thể hiểu những gì bạn đang cố gắng để nói. – rapt

+0

tôi đã cố gắng giải thích tại sao có hai loại ngữ cảnh được khởi tạo. Một thứ mà bạn đang gọi là root.xml và một tệp khác với test-servlet.xml. IMHO, tôi trả lời câu hỏi 1,2 và 4. Xấu của tôi, nếu tôi có thể giải thích nó đúng :) – hellojava

+0

Tôi nghĩ rằng # 2 là một câu trả lời tốt và có liên quan – user3799365

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