2015-02-04 31 views
10

Tôi đã đọc cuốn sách Head First JSP và Servlets. Tôi đã đi qua bản đồ của servlet. Và nghi ngờ của tôi ở đây làTại sao nên url-pattern trong bản đồ servlet bắt đầu bằng dấu gạch chéo (/)

<servlet> 
    <servlet-name>test</servlet-name> 
    <servlet-class>com.avinash.TestServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>test</servlet-name> 
    <url-pattern>/ServletBeer.do</url-pattern> 
</servlet-mapping> 
  1. Tại sao nên url-pattern bắt đầu với dấu gạch chéo (/)?
  2. Dấu gạch chéo (/) là gì? Nó có đại diện cho tên webapp của chúng tôi không?
  3. Điều gì sẽ xảy ra nếu url-pattern không bắt đầu bằng dấu gạch chéo (/)?
  4. Đây có phải là đặc điểm kỹ thuật để bắt đầu bằng dấu gạch chéo (/) không?

Và trong cuốn sách nó được đề cập rõ:

Đừng quên dấu gạch chéo (/) trong url-pattern.

Bạn có thể giải thích?

Trả lời

6

/ trong mẫu url có nghĩa là gốc của ứng dụng web sử dụng web.xml này. Vì vậy, khi bạn cung cấp cho /ServletBeer.do. Điều đó có nghĩa là http://<yourhost>:<port>/<your context Root>/ServletBeer.do. Khi bạn nhấn url này, servlet bạn đã ánh xạ với điều này tức là com.avinash.TestServlet sẽ được gọi.

Bạn không bắt buộc phải sử dụng / trong tất cả ánh xạ url của mình - điều đó hoàn toàn phụ thuộc vào cách bạn muốn định cấu hình nó. / chỉ là một biểu thức chính quy. Bạn cũng có thể sử dụng *.jsp trong mẫu url của mình - thực tế sẽ gọi servlet này mỗi khi bạn yêu cầu bất kỳ jsp nào trong ứng dụng web của bạn. Hãy xem xét phần 12,2 Đặc điểm kỹ thuật của Mappings ** từ ** JSR-000.315 Java Servlet 3,0 cuối cùng phát hành

12,2 Đặc điểm kỹ thuật ánh xạ theo các mô tả triển khai ứng dụng Web, các cú pháp sau đây được sử dụng để xác định ánh xạ:

■ Chuỗi bắt đầu bằng ký tự '/' và kết thúc bằng hậu tố '/ *' được sử dụng để ánh xạ đường dẫn.

■ Chuỗi bắt đầu bằng tiền tố ‘*.’ Được sử dụng làm phần mở rộng ánh xạ.

■ Các chuỗi rỗng ("") là một mẫu URL đặc biệt mà chính xác bản đồ để gốc bối cảnh của ứng dụng, ví dụ, các yêu cầu của mẫu http://host:port/<contextroot>/. Trong trường hợp này, thông tin đường dẫn là '/' và đường dẫn servlet và đường dẫn ngữ cảnh là chuỗi rỗng (““).

■ Chuỗi chỉ chứa ký tự '/' cho biết "servlet" mặc định là của ứng dụng. Trong trường hợp này đường dẫn servlet là yêu cầu URI trừ đi đường dẫn ngữ cảnh và thông tin đường dẫn là null.

■ Tất cả các dây khác được sử dụng để kết hợp chính xác chỉ

+0

/trong mẫu url có nghĩa là gốc của ứng dụng web sử dụng tệp web.xml này. Một nghi ngờ nhỏ. Bạn muốn nói nếu webapp của tôi được triển khai trong thư mục ứng dụng Beer. Vì vậy, bạn đang đề cập đến ứng dụng Bia như là gốc của ứng dụng web –

+0

cho phép nói ứng dụng Bia của bạn là thư mục được triển khai trong tomcat/webapps. thì ứng dụng Bia sẽ là gốc của ứng dụng. Vui lòng chấp nhận nếu câu trả lời ở trên là những gì bạn đang tìm kiếm – shikjohari

+0

Như bạn đã nói http: // /ServletBeer.do. Khi tôi nhấn url như http: // localhost: 8083/ServletBeer.do tôi nhận được trạng thái HTTP 404 - /ServletBeer.do. Ứng dụng của tôi nằm trong thư mục beerV1, Nếu url là http: // localhost: 8083/beerV1/ServletBeer.do. Và khi tôi truy cập vào url như sau http: // localhost: 8083/beerV1/ServletBeer.do tôi nhận được kết quả đầu ra. Tôi có nghĩa là để nói servlet dự kiến ​​là hit và tôi có thể thấy đầu ra –

0

Trên câu hỏi trên tôi có thể tìm thấy câu trả lời cho một trong những câu hỏi.

Điều gì sẽ xảy ra nếu mẫu url không bắt đầu bằng dấu gạch chéo (/). Tôi đã kiểm tra nó, nhưng tôi không nhớ

Khi tôi bắt đầu tomcat bằng cách loại bỏ/trong url-pattern tôi đã nhận được lỗi sau

Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> ServletBeer.do in servlet mapping 
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3267) 
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3242) 
    at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1324) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1348) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:880) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:378) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5343) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 

Điều này cho thấy rằng nếu chúng ta không sử dụng phần mở rộng bản đồ bắt buộc mẫu url phải bắt đầu bằng/

+0

Câu hỏi khác mà tôi đã tìm ra là 2. Dấu gạch chéo (/) đại diện cho cái gì. Nó có đại diện cho tên webapp của chúng tôi không. Dấu gạch chéo (/) đại diện cho gốc ngữ cảnh của ứng dụng web. –

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