rest - <url-pattern> in <servlet-mapping> -
case 1
<servlet-mapping> <servlet-name>myapp</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> case 2
<servlet-mapping> <servlet-name>myapp</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> if use case 1 dont of pages styled <link rel="stylesheet" type="text/css" href="${contextpath}/assets/styles.css" />, if use case 2 gets styled.
could me understand why?
also, tell me pattern should used don't have worry extensions? should using /*? thing if use /* when i've been using *.do while developing application, seems breaking, not styles don't pictures rendered, no jcaptcha , has links.
and if try send request rest client http://localhost:8080/myapp/user/1 doesn't work , need add .do @ end , send same request http://localhost:8080/myapp/user/1.do.
thanks.
browsers sends separate http requests on linked resources such css files, js files , images. urls of requests match url pattern of /. myapp servlet called on requests. however, myapp servlet doesn't seem process them properly, requests returns entirely different. try requesting resources separately learn servlet returning webbrowser:
in case, want let myapp servlet ignore requests on resources. best way create filter that. assuming of resources in folder called /assets, can achieve mapping servlet on more specific url pattern, such example /myapp/* , creating filter listening on /* transparently continues request/response chain requests on /assets , dispatches other requests /myapp.
so, configuration
<filter> <filter-name>filter</filter-name> <filter-class>com.example.filter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>controller</servlet-name> <servlet-class>com.example.controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>controller</servlet-name> <url-pattern>/myapp/*</url-pattern> </servlet-mapping> in combination following in filter's dofilter():
string uri = ((httpservletrequest) request).getrequesturi(); if (uri.startswith("/assets")) { chain.dofilter(request, response); // goes container's default servlet. } else { request.getrequestdispatcher("/myapp" + uri).forward(request, response); } should work you.
Comments
Post a Comment