<url-pattern>/*</url-pattern>
/*
Na serwletu zastępuje wszystkie inne serwlety, w tym wszystkie serwlety świadczonych przez servletcontainer takich jak domyślnego apletu i serwletu JSP. Cokolwiek odpalisz, trafi do tego serwletu. Jest to zatem zły wzorzec adresu URL dla serwletów. Zwykle chcesz korzystać /*
na zasadzie Filter
tylko. Jest w stanie pozwolić, aby żądanie było kontynuowane do dowolnego z serwletów nasłuchujących na bardziej szczegółowym wzorcu adresu URL przez wywołanie FilterChain#doFilter()
.
<url-pattern>/</url-pattern>
/
Nie zastępuje żadnego innego serwletu. Zastępuje tylko wbudowany domyślny serwlet servletcontainer dla wszystkich żądań, które nie pasują do żadnego innego zarejestrowanego serwletu. Zwykle jest to wywoływane tylko w przypadku zasobów statycznych (CSS / JS / image / etc) i list katalogów. Wbudowany domyślny serwlet serwletu servletcontainer może również obsługiwać żądania pamięci podręcznej HTTP, strumieniowe przesyłanie multimediów (audio / wideo) i wznawianie pobierania plików. Zwykle nie chcesz, aby zastąpić domyślny aplet jak można inaczej trzeba dbać o wszystkich swoich zadań, co nie jest dokładnie trywialne (JSF biblioteki narzędzie OmniFaces ma open source przykład). Jest to zatem również zły wzorzec adresu URL dla serwletów. Jeśli chodzi o to, dlaczego strony JSP nie trafiają do tego serwletu, to dlatego, że zostanie wywołany wbudowany serwlet JSP serwletu kontenera serwletu, który jest już domyślnie odwzorowany na bardziej szczegółowy wzorzec adresu URL *.jsp
.
<url-pattern></url-pattern>
Jest też pusty wzorzec adresu URL ciągu
. Zostanie to wywołane, gdy zażąda się kontekstowego katalogu głównego. Różni się to od <welcome-file>
podejścia, w którym nie jest wywoływane, gdy żądany jest dowolny podfolder. Najprawdopodobniej jest to wzorzec adresu URL, którego faktycznie szukasz na wypadek, gdybyś potrzebował „ serwletu strony domowej ”. Muszę tylko przyznać, że intuicyjnie spodziewałbym się, że pusty wzorzec adresu URL w postaci ciągu
i wzorzec adresu URL z ukośnikiem /
zostaną zdefiniowane dokładnie na odwrót, więc rozumiem, że wielu początkujących było w tym zdezorientowanych. Ale tak właśnie jest.
Kontroler przedni
W przypadku, gdy rzeczywiście zamierzają mieć serwletu kontrolera z przodu, wtedy bym najlepiej map go na bardziej konkretnego adresu URL podobnego wzorca *.html
, *.do
, /pages/*
, /app/*
, itd. Można schować zasobów statycznych kontroler frontowy URL wzór i pokrywa na wspólny wzorzec URL like /resources/*
, /static/*
etc za pomocą filtru serwletów. Zobacz także Jak zapobiegać obsłudze statycznych zasobów przez serwlet kontrolera frontowego, który jest odwzorowany na / * . Należy zauważyć, że Spring MVC ma wbudowany serwlet zasobów statycznych, dlatego można zmapować jego kontroler frontowy, /
jeśli skonfigurujesz wspólny wzorzec adresu URL dla zasobów statycznych w Spring. Zobacz także Jak obsługiwać statyczną zawartość w Spring MVC?