上一篇说明了jersey是怎么通过@path去初始化一些相关类的,那么继续看源码,看请求是如何去匹配并访问的。
那么开始从请求的入口DispatcherServlet的doService方法开始吧
protected void doService(HttpServletRequest request, HttpServletResponse response)
throws Exception
{
if(logger.isDebugEnabled())
{
String resumed = WebAsyncUtils.getAsyncManager(request).hasConcurrentResult() ? " resumed" : "";
logger.debug((new StringBuilder()).append("DispatcherServlet with name '").append(getServletName()).append("'").append(resumed).append(" processing ").append(request.getMethod()).append(" request for [").append(getRequestUri(request)).append("]").toString());
}
Map attributesSnapshot = null;
if(WebUtils.isIncludeRequest(request))
{
attributesSnapshot = new HashMap();
Enumeration attrNames = request.getAttributeNames();
do
{
if(!attrNames.hasMoreElements())
break;
String attrName = (String)attrNames.nextElement();
if(cleanupAfterInclude || attrName.startsWith("org.springframework.web.servlet"))
attributesSnapshot.put(attrName, request.getAttribute(attrName));
} while(true);
}
request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE, getWebApplicationContext());
request.setAttribute(LOCALE_RESOLVER_ATTRIBUTE, localeResolver);
request.setAttribute(THEME_RESOLVER_ATTRIBUTE, themeResolver);
request.setAttribute(THEME_SOURCE_ATTRIBUTE, getThemeSource());
FlashMap inputFlashMap = flashMapManager.retrieveAndUpdate(request, response);
if(inputFlashMap != null)
request.setAttribute(INPUT_FLASH_MAP_ATTRIBUTE, Collections.unmodifiableMap(inputFlashMap));
request.setAttribute(OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());
request.setAttribute(FLASH_MAP_MANAGER_ATTRIBUTE, flashMapManager);
try
{
doDispatch(request, response);
}
finally
{
if(WebAsyncUtils.getAsyncManager(request).isConcurrentHandlingStarted())
return;
if(attributesSnapshot != null)
restoreAttributesAfterInclude(request, attributesSnapshot);
}
}
没啥好说的,就是set一些值,点开doDispatch(request, response);
protected void doDispatch(HttpServletRequest request, HttpServletResponse response)
throws Exception
{
HttpServletRequest processedRequest;
HandlerExecutionChain mappedHandler;
boolean multipartRequestParsed;
WebAsyncManager asyncManager;
processedRequest = request;
mappedHandler = null;
multipartRequestParsed = false;
asyncManager = WebAsyncUtils.getAsyncManager(request);
ModelAndView mv;
Exception dispatchException;
mv = null;
dispatchException = null;
processedRequest = checkMultipart(request);
multipartRequestParsed = processedRequest != request;
mappedHandler = getHandler(processedRequest, false);
if(mappedHandler != null && mappedHandler.getHandler() != null)
break MISSING_BLOCK_LABEL_69;
noHandlerFound(processedRequest, response);
return;
HandlerAdapter ha;
boole