2010-03-24 33 views
15

Tôi muốn đặt một trong các tệp jsp trong thư mục jsps làm chế độ xem mặc định cho ứng dụng. Có cách nào chúng ta có thể nói trong <welcome-file-list> rằng abc.jsp cần phải được mặc định và nó có thể được tìm thấy trong đường dẫn như vậy và như vậy. Ngoài ra mẫu url là html nên có một cách nó có thể được ánh xạ trong Spring MVC.Đặt chế độ xem jsp mặc định bằng spring mvc

Ví dụ - Khi người sử dụng đánh www.example.com, tôi muốn ứng dụng trực tiếp để abc.jsp trang và cũng có khi có ai đó www.example.com/something, thậm chí sau đó ứng dụng sẽ chỉ đạo để abc.jsp, nhưng mẫu url should not bị tổn hại.

Trả lời

33

Thêm

<mvc:view-controller path="/" view-name="abc"/> 

vào file config. Sau đó ROOT sẽ chuyển sang chế độ xem abc. Sau đó, thêm

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/views/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

vào tệp cấu hình. Thao tác này sẽ giải quyết chế độ xem thành /WEB-INF/view/abc.jsp.

+0

Cảm ơn Rpond. Tôi đang cố gắng sử dụng giải pháp bạn đã đề cập. Tôi đoán đây là tập tin cấu hình bảo mật mùa xuân phải không? – Walker

+0

không, đó là cấu hình mới với mùa xuân 3.0. nên đi vào tập tin cấu hình mùa xuân của bạn. –

+0

Tôi muốn sử dụng phương pháp này nhưng tôi không biết đó là tệp cấu hình mùa xuân. Đó có phải là 'app-servlet.xml' không? – user2785929

16

Ví dụ - Khi một loại người dùng www.example.com, tôi muốn ứng dụng trực tiếp đến trang abc.jsp

Cấu hình nó như là một <welcome-file> trong web.xml thích sau:

<welcome-file-list> 
    <welcome-file>/abc.jsp</welcome-file> 
</welcome-file-list> 

và cũng khi có ai đó www.example.com/something, thậm chí sau đó ứng dụng nên dir ect đến abc.jsp, nhưng mẫu url không nên bị xâm phạm.

Nói cách khác, bạn muốn chuyển tiếp các tài nguyên không tồn tại (do đó sẽ dẫn đến lỗi HTTP 404 Page Not Found) vào cùng một tệp? Sau đó, xác định nó như một <error-page> trong web.xml cũng như:

<error-page> 
    <error-code>404</error-code> 
    <location>/abc.jsp</location> 
</error-page> 

Nhưng câu hỏi của bạn thực sự là một chút mơ hồ. Nếu bạn thực sự không có nghĩa là ở trên và thực sự muốn sử dụng /abc.jsp là "điều khiển trang", thì bạn cần phải xác định nó như là một <servlet> trong web.xml thay vì:

<servlet> 
    <servlet-name>controller</servlet-name> 
    <jsp-file>/abc.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>controller</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

(cả <welcome-file><error-page> là không cần thiết ở đây)

Đây là một lỗ hổng trong thiết kế MVC (sử dụng chế độ xem làm bộ điều khiển). Nhưng nếu bạn đang thực sự yêu cầu cho nó ..

+0

Cảm ơn bạn BalusC. Đó là là cơ chế tôi đang tìm kiếm. Cảm ơn một lần nữa. – Walker

+0

tôi đã cố gắng /abc.jsp nhưng doesnot này bắt đầu đậu liên quan trong servlet ngữ cảnh .xml và sử dụng /abc.html trong danh sách tệp chào mừng, doesnot trợ giúp – Walker

+0

'abc.html'? Bạn cần JSP ở đây. HTML không biết gì về ' 'và loại điều đó :) – BalusC

2

Giải quyết -

Một tệp trong danh sách tệp chào mừng phải là tệp thực, do đó abc.htm không hoạt động. Cách duy nhất để hoàn thành là tạo một index.jsp và chuyển hướng nó bằng cách sử dụng

cũng trong chế độ yourapplication-servlet.xml bạn cần chỉ định ánh xạ bean như

<bean name="/abc.html" class="package.mypack.someController"> 
    <property name="commandClass" value="package.mypack..something"/> 
    <property name="formView" value="abc"/> 
    <property name="successView" value="abc.htm"/> 
</bean> 

Tệp chào mừng phải là tệp REAL trên hệ thống tệp không hoạt động với các url được ánh xạ. Bạn có thể tạo một index.jsp chuyển hướng đến url được ánh xạ, nhưng nó phải là một tệp thực. Không có gì để làm với mùa xuân nó được nêu trong đặc tả servlet rằng nó phải theo cách này, mặc dù hành vi có thể khác nhau trên các máy chủ ứng dụng khác nhau nói chung nó phải là một tập tin thực sự.

Tôi hy vọng điều này giúp đỡ một ai đó

+2

Vâng, bạn nói đúng. Ít hơn hay nhiều hơn. Nó không nhất thiết phải trỏ đến tập tin đó. Chỉ cần tập tin « /abc.html' và ** empty ** 'abc.html' sẽ hoạt động tốt. – BalusC

+0

Điều này đã giúp tôi giải quyết vấn đề của mình. @Walker Chuyển hướng của bạn sẽ không bao giờ được gọi. Tôi chỉ sử dụng kỹ thuật tập tin rỗng mà BalusC đã đề cập, nó được chuyển hướng bởi Spring trước khi nó đến được tệp vật lý của bạn. –

0

này tất cả các hành vi có thể được giải quyết bằng cách thêm

<mvc:default-servlet-handler> 

để mùa xuân của bạn ../WEB-INF/dispatcher-servlet.xml
này sẽ sắp xếp tất cả cho bạn.

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