2010-02-25 39 views
5

Tôi có một ứng dụng Spring 2.5 có chứa biểu ngữ Flash. Tôi không có nguồn cho thành phần Flash nhưng có liên kết được mã hóa cứng đến các trang nhất định kết thúc bằng .html Tôi muốn có thể chuyển hướng các trang .html đó đến các trang jsp hiện có. Làm cách nào để Spring có thể giải quyết một vài trang .html thành các trang .jsp?Mùa xuân - Viết lại một URL cho một URL khác

Dự án của tôi trông giống như:

WebContent 
| 
-sample.jsp 
-another.jsp 
    WEB-INF 
    | 
    -myapp-servlet.xml 
    -web.xml 

Tôi muốn localhost:8080/offers.html để chuyển hướng đến localhost:8080/sample.jsp

Tôi có thể làm điều này với mùa xuân? Tôi đã có một SimpleUrlHandlerMapping và UrlFilenameViewController được định nghĩa trong tệp myapp-servlet.xml mà phải tiếp tục phục vụ các trang mà nó đã có.

Trong web.xml của tôi, tôi có

<servlet-mapping> 
    <servlet-name>myapp</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

Cập nhật

Đây là mapper URL. Nếu tôi thêm một bộ điều khiển, làm thế nào để tôi trả về khung nhìn jsp trong thư mục WebContent khi trình phân giải khung nhìn bao gồm thư mục/WEB-INF/jsp.

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
    <props> 
     <prop key="/page1.htm">page1Controller</prop> 
     <prop key="/page2.htm">page2Controller</prop> 
    </props> 
    </property> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 
+0

UrlFilenameViewController sẽ chỉ phân giải mẫu URL thành tên tệp, bạn không thể "ánh xạ" url tới một tệp khác. Nếu bạn muốn ánh xạ /offers.html vào một khung nhìn sample.jsp, bạn sẽ cần một trình điều khiển xử lý mẫu /offers.html và trả về sample.jsp làm khung nhìn. Bạn có thể đăng SimpleUrlHandlerMapping từ myapp-servlet.xml không? –

+0

@Rob Beardow - Cập nhật với SimpleUrlHandlerMapping và InternalResourceViewResolver – George

Trả lời

16

Tôi nghĩ bạn có thể hưởng lợi từ thư viện Viết lại URL nguồn mở do tuckey.org thực hiện. Những kẻ ở SpringSource xác nhận thư viện này, vì nó được thiết lập cho bạn tự động nếu bạn sử dụng Spring Roo để tạo một dự án, vì vậy nó có chất lượng tốt. Tôi đã sử dụng nó thành công trong một số dự án.

Xem here cho trang chủ của trang. Và Skaffman là đúng, bạn muốn nó 'chuyển tiếp' thay vì chuyển hướng, đó là hành vi mặc định.

Configure nó trong web.xml như thế này:

<filter> 
     <filter-name>UrlRewriteFilter</filter-name> 
     <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
</filter> 

Sau đó, trong WEB-INF/urlrewrite.xml có một yếu tố như thế này:

<rule> 
    <from>offers.html</from> 
    <to>offers.jsp</to>  
</rule> 
+0

@ mirror303 - Cảm ơn. Điều này làm việc hoàn hảo và mất khoảng 10 giây để cấu hình. – George

1

Trước hết, tôi giả định rằng khi bạn nói "chuyển hướng", bạn thực sự muốn nói "chuyển tiếp". Chuyển hướng HTTP sẽ không thích hợp ở đây.

SO cho rằng, đây là một số điều để thử:

  • thể bạn không chỉ cần di chuyển các tập tin JSP từ WebContent vào /WEB-INF/jsp/? Bạn sẽ không phải thay đổi định nghĩa ViewResolver, sau đó.

  • Bạn có thể cố gắng để bộ điều khiển trả về tên chế độ xem giống như ../../another.jsp và hy vọng rằng thùng chứa servlet sẽ giải quyết thành /WEB-INF/jsp/../../another.jsp thành /another.jsp.

  • ViewResolver chỉ được tham khảo ý kiến ​​nếu bộ điều khiển trả về tên chế độ xem. Bộ điều khiển của bạn không để trả lại tên chế độ xem, chúng có thể trả lại trực tiếp đối tượng View, trong trường hợp này là JstlView. Điều này có thể trỏ đến bất kỳ JSP nào bạn thích. Bạn có thể một số bộ điều khiển trả về tên chế độ xem và một số đối tượng trả về View.

  • Xóa thuộc tính prefix khỏi trình giải quyết chế độ xem của bạn. Điều này có nghĩa là bạn cũng phải thay đổi mọi bộ điều khiển hiện có, để thêm tiền tố cho mỗi tên chế độ xem mà chúng quay trở lại với /WEB-INF/jsp/. Sau đó, bạn có thể tham khảo các JSP dưới WebContent theo tên.

5

Tôi sẽ sử dụng PrettyFaces OCPsoft hoặc OCPsoft Viết lại cho điều này:

Với PrettyFaces:

tạo WEB-INF/khá-config.xml

<url-mapping> 
    <pattern value="/offers.html" /> 
    <view-id value="/offers.jsp" /> 
</url-mapping> 

Với Rewrite:

ConfigurationBuilder.begin() 
    .addRule(Join.path("/offers.html").to("/offers.jsp")); 

Tôi hy vọng điều này sẽ giúp.

~ Lincoln

+0

Bạn cũng có thể sử dụng cấu hình Tuckey hiện có của mình với Rewrite thông qua mô đun rewrite-integration-tuckey. – Lincoln

+0

Lincoln là người sáng lập OCPsoft, tác giả của PrettyFaces và Rewrite. Bạn nên đề cập đến câu trả lời của bạn là thiên vị. – Janning

+4

Câu trả lời của tôi là thiên vị. – Lincoln

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