要完成这个工做,咱们须要实现三个类; 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 { //略 } }