2012-12-24 133 views
39

Tôi đã định cấu hình thủ công web.xml cho đơn đăng ký của mình. Bây giờ, tôi đang gặp vấn đề khi chạy ứng dụng của mình. Tôi đang cố gắng truy cập vào servlet của tôi từ trang jsp của tôi. Tuy nhiên, nó đang ném lỗi là page not found.Tầm quan trọng của url-pattern trong web.xml và cách cấu hình servlet là gì?

Các servlets được đặt dưới bên dưới vị trí thư mục

<application folder>/WEB-INF/classes/<package> 

Vì vậy, những gì nên là mục cho servlets trong url-patternservlet-mapping. Vì vậy, có thể truy cập servlet thông qua URL.

+0

đầu tiên đọc servlet đặc điểm kỹ thuật và ánh xạ. Tham khảo câu trả lời được đưa ra bởi @var_. Nếu bạn lại gặp phải sự cố hoặc ngoại lệ, hãy dán ngoại lệ được đề cập, Cộng đồng sẽ cố gắng gỡ lỗi sự cố. –

+1

Bạn nên chấp nhận câu trả lời để cho cộng đồng hưởng lợi từ nó. –

Trả lời

64

url-pattern được sử dụng trong web.xml để ánh xạ servlet của bạn tới URL cụ thể. Vui lòng xem mã xml bên dưới, mã tương tự bạn có thể tìm thấy trong tệp cấu hình web.xml của mình.

<servlet> 
    <servlet-name>AddPhotoServlet</servlet-name> //servlet name 
    <servlet-class>upload.AddPhotoServlet</servlet-class> //servlet class 
</servlet> 
<servlet-mapping> 
    <servlet-name>AddPhotoServlet</servlet-name> //servlet name 
    <url-pattern>/AddPhotoServlet</url-pattern> //how it should appear 
</servlet-mapping> 

Nếu bạn thay đổi url-pattern của AddPhotoServlet từ /AddPhotoServlet để /MyUrl. Sau đó, AddPhotoServlet servlet có thể truy cập được bằng cách sử dụng /MyUrl. Tốt vì lý do bảo mật, nơi bạn muốn ẩn URL trang thực của mình.

Java Servlet url-pattern Thông số kỹ thuật:

  1. Một chuỗi bắt đầu bằng một '/' nhân vật và kết thúc bằng một '/ *' suffix được sử dụng để lập bản đồ đường đi.
  2. Chuỗi bắt đầu bằng số '*.' Tiền tố được sử dụng làm ánh xạ mở rộng.
  3. Chuỗi chỉ chứa ký tự '/' cho biết servlet "mặc định" của ứng dụng. Trong trường hợp này đường dẫn servlet là URI yêu cầu trừ đường dẫn ngữ cảnh và thông tin đường dẫn là null.
  4. Tất cả các chuỗi khác chỉ được sử dụng để đối sánh chính xác.

tham khảo: Java Servlet Specification

Bạn cũng có thể đọc Basics of Java Servlet

+3

Chỉ cần thêm, nếu OP đang sử dụng một ứng dụng Web servlet hỗ trợ Servlet 3.0, thì không cần cấu hình servlet trong tệp tin web.xml. Có một lời giải thích tốt trong [Servlets Wiki] của chúng tôi (http://stackoverflow.com/tags/servlets/info) –

+0

+1 để cung cấp thông tin cập nhật về đặc tả mẫu url: –

+0

cho ví dụ '/ AddPhotoServlet' - sẽ là Servlet được truy cập bằng một liên kết như 'http: // AddPhotoServlet.company.com /'? Hoặc nó sẽ được truy cập bởi 'http: // company.com/AddPhotoServlet'? – mmcrae

27

Servlet-mapping này có hai thẻ con, url-pattern và servlet-name. url-pattern chỉ định loại url mà servlet được cung cấp trong tên servlet nên được gọi. Lưu ý rằng, vùng chứa sẽ sử dụng phân biệt chữ hoa chữ thường để so sánh chuỗi cho khớp nối servlet.

Đặc điểm kỹ thuật đầu tiên củaurl-pattern một tệp web.xml cho ngữ cảnh máy chủ trên thùng chứa servlet tại máy chủ.com phù hợp với mô hình trong <url-pattern>/status/*</url-pattern> như sau:

http://server.com/server/status/synopsis    = Matches 
http://server.com/server/status/complete?date=today = Matches 
http://server.com/server/status      = Matches 
http://server.com/server/server1/status    = Does not match 

đặc điểm kỹ thuật thứ hai củaurl-pattern Một bối cảnh nằm ở đường dẫn/ví dụ trên Agent tại example.com phù hợp với mô hình trong <url-pattern>*.map</url-pattern> như sau:

http://server.com/server/US/Oregon/Portland.map = Matches 
http://server.com/server/US/server/Seattle.map  = Matches 
http://server.com/server/Paris.France.map   = Matches 
http://server.com/server/US/Oregon/Portland.MAP = Does not match, the extension is uppercase 
http://example.com/examples/interface/description/mail.mapi =Does not match, the extension is mapi rather than map` 

Đặc tả thứ ba củaurl-mapping, Ánh xạ chứa mẫu <url-pattern>/</url-pattern> khớp với yêu cầu nếu không có mẫu nào khác khớp. Đây là ánh xạ mặc định. Servlet được ánh xạ tới mẫu này được gọi là servlet mặc định.

Ánh xạ mặc định thường được chuyển hướng đến trang đầu tiên của ứng dụng. Việc cung cấp ánh xạ mặc định cũng đảm bảo rằng các yêu cầu URL không đúng định dạng trong ứng dụng trả lại được ứng dụng xử lý thay vì trả về lỗi.

Phần tử bản đồ servlet bên dưới ánh xạ trường hợp servlet server vào bản đồ mặc định.

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

Đối với ngữ cảnh chứa phần tử này, mọi yêu cầu không được xử lý bởi ánh xạ khác được chuyển tiếp đến server servlet.

Và Quan trọng nhất là chúng ta nên biết về Rule cho đường dẫn URL mapping

  1. Các container sẽ cố gắng tìm một kết hợp chính xác của con đường của yêu cầu đến đường dẫn của servlet. Một trận đấu thành công sẽ chọn servlet.
  2. Vùng chứa sẽ đệ quy cố gắng khớp với tiền tố đường dẫn dài nhất. Điều này được thực hiện bằng cách đẩy cây thư mục xuống từng lần một, sử dụng ký tự '/' làm dấu tách đường dẫn. Trận đấu dài nhất xác định servlet được chọn.
  3. Nếu đoạn cuối cùng trong đường dẫn URL chứa phần mở rộng (ví dụ: .jsp), thùng chứa servlet sẽ cố gắng khớp với một servlet xử lý các yêu cầu cho phần mở rộng. Tiện ích mở rộng được định nghĩa là một phần của phân đoạn cuối cùng sau ký tự '. ’Cuối cùng.
  4. Nếu cả ba quy tắc trước đó đều không khớp với servlet, vùng chứa sẽ cố gắng phân phát nội dung phù hợp với tài nguyên được yêu cầu. Nếu một servlet “mặc định” được định nghĩa cho ứng dụng, nó sẽ được sử dụng.

Reference URL Pattern

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