WEB开发网
开发学院软件开发Java 设计 REST 风格的 MVC 框架 阅读

设计 REST 风格的 MVC 框架

 2010-01-08 00:00:00 来源:WEB开发网   
核心提示: 最后需要考虑的是,由于我们将 DispatcherServlet 映射为“/”,设计 REST 风格的 MVC 框架(8),即默认的 Servlet,则所有的未匹配成功的 URL 都将由 DispatcherServlet 处理,DispatcherServlet 将试图

最后需要考虑的是,由于我们将 DispatcherServlet 映射为“/”,即默认的 Servlet,则所有的未匹配成功的 URL 都将由 DispatcherServlet 处理,包括所有静态文件,因此,当未匹配到任何 Controller 的 @Mapping 方法后,DispatcherServlet 将试图按 URL 查找对应的静态文件,我们用 StaticFileHandler 封装,主要代码见清单 10。


清单 10. 处理静态文件
class StaticFileHandler { 
  ... 
  public void handle(HttpServletRequest request, HttpServletResponse response) 
  throws ServletException, IOException { 
    String url = request.getRequestURI(); 
    String path = request.getServletPath(); 
    url = url.substring(path.length()); 
    if (url.toUpperCase().startsWith("/WEB-INF/")) { 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); 
      return; 
    } 
    int n = url.indexOf('?'); 
    if (n!=(-1)) 
      url = url.substring(0, n); 
    n = url.indexOf('#'); 
    if (n!=(-1)) 
      url = url.substring(0, n); 
    File f = new File(servletContext.getRealPath(url)); 
    if (! f.isFile()) { 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); 
      return; 
    } 
    long ifModifiedSince = request.getDateHeader("If-Modified-Since"); 
    long lastModified = f.lastModified(); 
    if (ifModifiedSince!=(-1) && ifModifiedSince>=lastModified) { 
      response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); 
      return; 
    } 
    response.setDateHeader("Last-Modified", lastModified); 
    response.setContentLength((int)f.length()); 
    response.setContentType(getMimeType(f)); 
    sendFile(f, response.getOutputStream()); 
  } 
} 

上一页  3 4 5 6 7 8 9 10  下一页

Tags:设计 REST 风格

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接