2009-04-29 59 views
5

Về cơ bản tôi muốn một servlet xử lý tất cả các yêu cầu đến bất kể đường dẫn. Tôi đang ở trên môi trường lưu trữ được chia sẻ với quyền truy cập để định cấu hình tệp web.xml của riêng tôi.Định cấu hình web.xml (Tomcat 5) cho một servlet để xử lý tất cả các yêu cầu gửi đến?

Tôi đã sau đây cấu hình trong web.xml, nhưng nó không hoạt động trên Tomcat 5:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation= 
     "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>Redirect</display-name> 
    <servlet> 
     <display-name>Redirect</display-name> 
     <servlet-name>Redirect</servlet-name> 
     <servlet-class>com.Redirect</servlet-class> 
     <init-param> 
      <param-name>host</param-name> 
      <param-value>www.myredirectdomain.com</param-value> 
     </init-param> 
     <init-param> 
      <param-name>redirect-type</param-name> 
      <param-value>301</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Redirect</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

Trên đây làm việc cho bất cứ điều gì bắt đầu với một thư mục trong đường dẫn như:

www.mydomain.com/anypath1/anypath2... 
www.mydomain.com/anypath1 

Tuy nhiên, không làm việc cho:

www.mydomain.com/ or 
www.mydomain.com 

tôi cũng đã cố gắng lập bản đồ servlet sau đây:

<servlet-mapping> 
    <servlet-name>Redirect</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Với cùng một kết quả. Không làm việc ... Bất cứ ai có bất cứ đề nghị?

Trả lời

-1

Bạn có thử

<url-pattern>*</url-pattern> 

?

+1

Không, tôi sẽ thử, nhưng không chắc đó có phải là cú pháp hợp pháp hay không. –

0

Mẫu/* sẽ dứt khoát gọi servlet Chuyển hướng của bạn. Bạn đã gỡ lỗi servlet của bạn để xem nó có nhận được yêu cầu cho url đó không? Những gì bạn có nghĩa là không làm việc? Bạn đã nhận được bất kỳ lỗi hoặc những gì đã xảy ra?

+0

Servlet chuyển hướng chỉ nhận được yêu cầu bao gồm ít nhất một thư mục. Nếu tôi đi thẳng đến miền, tức là www.mydomain.com hoặc www.mydomain.com/ thì servlet Chuyển hướng không được gọi. Servlet chuyển hướng hoạt động như dự định. Lỗi tôi nhận được là 403 Cấm. Tuy nhiên, nếu tôi đặt một tệp index.jsp ở gốc, tôi sẽ không nhận được lỗi. –

+0

Sử dụng , nếu bạn không muốn sử dụng trang chỉ mục. –

+0

Tôi thấy bạn đã chỉnh sửa câu hỏi của mình ngay bây giờ. Bạn không có bất kỳ tên ngữ cảnh cho ứng dụng web của bạn, nơi bạn cấu hình web.xml hoặc web.xml là bối cảnh gốc của tomcat? Tôi nghi ngờ rằng nó sẽ hoạt động. Bạn có thể định nghĩa index.jsp trong danh sách file chào đón và trong jsp chuyển hướng yêu cầu tới servlet của bạn. –

1

<url-pattern>/*</url-pattern> sẽ hoạt động. Webapp của bạn cần được triển khai ở ngữ cảnh gốc. Theo mặc định, tomcat sử dụng webapp có tên ROOT; tuy nhiên, bạn có thể thay đổi nó để tìm một webapp khác trong tệp server.xml của bạn.

Một cách tiếp cận khác là tạo ServletFilter để thực hiện công việc và ánh xạ nó theo cùng một cách. Có ưu và khuyết điểm đối với mỗi phương pháp (bộ lọc servlet và servlet). Tuy nhiên, từ ví dụ của bạn, có vẻ như bạn chỉ muốn gửi mọi thứ đến một trang web khác, do đó, hoặc là hoạt động.

4

Tomcat 5 triển khai Đặc tả Servlet 2.4. Có thể tải xuống tại đây: JCP Servlet 2.4 Spec

Trên trang. 86 - SRV.11.2 nó mô tả cách xác định ánh xạ Servlet. Nếu tôi hiểu những gì bạn đang cố gắng làm một cách chính xác, bạn đang cố gắng ngăn chặn mọi yêu cầu (không có vấn đề gì đường dẫn) đến máy chủ của bạn với một Servlet đơn lẻ. Để làm việc đó, webapp của bạn cần được gắn kết ở ngữ cảnh mặc định ("ROOT") trong trường hợp của Tomcat và Servlet của bạn cần ánh xạ tới servlet mặc định trong tệp web.xml của bạn. Ánh xạ của bạn trong web.xml của bạn là chính xác.

<servlet-mapping> 
    <servlet-name>Redirect</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Tôi nghĩ rằng vấn đề bạn đang gặp phải là với ngữ cảnh ROOT. Truy cập www.mydomain.com/ và www.mydomain.com hiển thị thông tin gì? Bạn không đề cập đến nếu môi trường lưu trữ chia sẻ cung cấp cho bạn quyền truy cập đầy đủ vào cấu hình Tomcat của riêng bạn, nhưng nếu bạn có thể truy cập và sửa đổi thư mục $ TOMCAT5_HOME/conf của mình, có một số cách để thực hiện công việc này cho bạn.

Có lẽ cách sạch nhất là thêm những điều sau đây:

< Context path="" debug="0" docBase="your-app"> 

đến $ TOMCAT5_HOME/conf/server.xml. Điều này giả định các ứng dụng của bạn được gọi là "your-app.war".

Hy vọng điều này sẽ hữu ích.

+2

Có vấn đề gì nếu Context path = "" hoặc path = "/"? Tôi đã nhìn thấy nó được định nghĩa là "/" trong quá khứ. –

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