要完成這個工做,咱們須要實現三個類; java
第一個類是新建一個繼承自VaadinServlet的類,咱們給它命名JsWrapServlet(因咱們這裏只處理js文件),並把它代替VaadinServlet配置到web.xml中。 web
第二個類是繼承自VaadinServletService的類JSFileService,這個類主要用於把第三個類js文件請求處理器註冊到requestHandlers。第三個類JSFileHandler繼承自RequestHandler,主要是在第一時間攔截特定格式js文件請求並處理。 服務器
代碼片斷: session
public class JsWrapServlet extends VaadinServlet { … @Override protected VaadinServletService createServletService(DeploymentConfiguration deploymentConfiguration) throws ServiceException { VaadinServletService service = new JSFileService(this, deploymentConfiguration); service.init(); return service; } … }
public class JSFileService extends VaadinServletService { public JSFileService(VaadinServlet servlet, DeploymentConfiguration deploymentConfiguration) throws ServiceException { super(servlet, deploymentConfiguration); } /* (non-Javadoc) * @see com.vaadin.server.VaadinServletService#createRequestHandlers() */ @Override protected List<RequestHandler> createRequestHandlers() throws ServiceException { List<RequestHandler> handlers = super.createRequestHandlers(); handlers.add(new JSFileHandler()); return handlers; } }
public class JSFileHandler implements RequestHandler { /* (non-Javadoc) * @see com.vaadin.server.RequestHandler#handleRequest(com.vaadin.server.VaadinSession, com.vaadin.server.VaadinRequest, com.vaadin.server.VaadinResponse) */ @Override public boolean handleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException { //判斷是否特定的路徑標識,咱們把js文件放在了/VAADIN/static if ( !hasPathPrefix(request, ApplicationConstants.PUBLISHED_FILE_PATH + "/VAADIN/static/")){ return false; } String pathInfo = request.getPathInfo(); String fileName = pathInfo .substring(ApplicationConstants.PUBLISHED_FILE_PATH.length() + 2); // 找到服務端路徑 String basepath = VaadinService.getCurrent() .getBaseDirectory().getAbsolutePath(); FileResource resource = new FileResource(new File(basepath +"/"+ fileName)); writeResponse(response,resource.getStream()); //寫入響應 return true; } /** * 複製自 {@link com.vaadin.server.DownloadStream#writeResponse} * @param data * @throws IOException */ private void writeResponse(VaadinResponse response,DownloadStream ds) throws IOException { //略 } }