Lỗi Tomcat: Servlet mapping specifies an unknown servlet name

Tiếp tục với loạt bài “Tổng hợp lỗi Server Tomcat thường gặp và cách khắc phục“, hôm nay mình sẽ phân tích và hướng dẫn khắc phục một lỗi không hề mới “Servlet mapping specifies an unknown servlet name

Đây là cái lỗi quái gì thế?

Mình cũng chả biết gọi nó với cái tên là gì nhưng khi gặp lỗi, server Tomcat sẽ lập tức stop đồng thời mọc lên hộp thoại huyền thoại.

Lỗi Tomcat: Servlet mapping specifies an unknown servlet name

Hộp thoại thông báo lỗi huyền thoại

Chắc hẳn các bạn không xa lạ gì với hộp thoại này nhỉ 😀

Đối với những bạn mới vào nghề có vẻ còn hơi lúng túng, cuống cuồng hơn cả lần đầu làm chuyện ấy (lần đầu code java web ý nhá). Nhưng cứ yên tâm, trấn an con tim vài giây và bắt đầu click chuột vào tab console xem thử có gì không nhé (tab console là gì? Chưa biết thì comment bên dưới mình hướng dẫn nhé :v ).

Một mớ hỗn độn từ console. Chúng ta khoan hãy bàn tới đó là những thông báo gì. Cứ từ từ, đừng nôn nóng. Tới đây mình chỉ khuyên các bạn khi gặp lỗi server Tomcat có hiện lên hộp thoại như trên “Server Tomcat vx.x server at localhost failed to start” thì nhanh chóng đọc các thông báo lỗi từ console nhé.

Đọc thông báo lỗi từ console

Bên trên là những thông báo mà server trả về trên màn hình console khi có lỗi xảy ra, hỗn độn đến nỗi hoa cả mắt. Bạn hãy đọc từ trên cùng đến hết thông báo, tìm đoạn nào quen thuộc nhất với mình, chẳng hạn từ ADuController rất quen thuộc mà mình tìm thấy trong đống chữ đỏ loè ở console. Kèm theo nó là dòng thông báo “Servlet mapping specifies an unknown servlet name ADuController“.

Phân tích lỗi

Bạn đã tìm ra dòng thông báo lỗi “Servlet mapping specifies an unknown servlet name…“. Vậy nó là lỗi gì? Nguyên nhân do đâu gây ra.

Giải đáp: “Servlet mapping specifies an unknown servlet name ADuController” được server trả về khi nó không tìm thấy servlet name nào có tên ADuController. Khi config web.xml để mapping một url pattern cho một servlet nào đó, bạn sẽ dùng cặp thẻ <servlet-name>…</servlet-name> trong cả 2 cặp thẻ cha là <servlet>…</servlet> và <servlet-mapping>…</servlet-mapping>

Và đây là đoạn config mà mình cố tình làm sai trong web.xml:

Có thể thấy, mình muốn mapping url “/a-du” cho servlet “ADuController” nhưng phần servlet-name ở thẻ servletservlet-mapping đã khác nhau (“A Du Controller” và “ADuController” bạn nghĩ chúng khác nhau chứ?).

Khắc phục lỗi

Như đã phân tích, bạn chỉ cần config lại nội dung trong cặp thẻ servlet-name giống nhau ở cả 2 cặp thẻ serlvet và servlet-mapping là đã fix xong lỗi rồi đó.

Cuối cùng, mình có vài lời tâm tình nhỏ dành cho các bạn trước khi dứt điểm bài này:

  1. Đừng tỏ ra quá nguy hiểm khi mapping: Đặt nội dung thẻ servlet-name giống với tên class trong thẻ servlet-class cho khoẻ.
  2. Đừng tỏ vẻ bay bướm chim chuột: Nếu lỡ đặt nội dung servlet-name khác với servlet-class thì đừng có văn chương vẽ vời làm gì trong phần config. Ví dụ: <servlet-name>Mapping cho servlet ADuController Ahihi</servlet-name>

Dứt điểm bài này, mong được các bạn góp ý nhiệt tình để những bài sau trong loạt bài có ý nghĩa hơn 😀

Bình luận Facebook

Bình luận

Hãy là người đầu tiên bình luận bạn nhé :)

Thông báo khi có
avatar
wpDiscuz