易居做网站/软文推广页面
背景:
tomcat的jspc编译需要引用ant,而且内部是自己扫描的jsp文件。本人做框架时已经有项目里所有的jsp文件路径,不想引用ant包,因此简化了jspc类。
框架传送门:
https://github.com/xiangjiangchuangyuan/struts
https://github.com/xiangjiangchuangyuan/util --此为工具包
调用:
// 判断线上环境,执行预编译if (jspList.size() > 0 && WebContextUtils.isLinuxOS()) {new JspC(sc, jspList, true).execute();}
具体代码:
package com.xjcy.struts.context;import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Vector;import javax.servlet.ServletContext;
import javax.servlet.jsp.tagext.TagLibraryInfo;import org.apache.jasper.JasperException;
import org.apache.jasper.JspCompilationContext;
import org.apache.jasper.Options;
import org.apache.jasper.compiler.JspConfig;
import org.apache.jasper.compiler.JspRuntimeContext;
import org.apache.jasper.compiler.TagPluginManager;
import org.apache.jasper.compiler.TldCache;
import org.apache.jasper.servlet.JspCServletContext;
import org.apache.jasper.servlet.TldScanner;
import org.apache.log4j.Logger;
import org.xml.sax.SAXException;import com.xjcy.util.FileUtils;/**** 预编译jsp文件,移除ant引用 2018-04-10* * @author YYDF**/
public class JspC implements Options {static final Logger logger = Logger.getLogger(JspC.class);private String uriRoot;private File scratchDir;private JspCServletContext context;private TldScanner scanner;private TldCache tldCache;private JspRuntimeContext rctxt;private JspConfig jspConfig;private TagPluginManager tagPluginManager;private final List<String> pages = new Vector<>();private static final String Encoding = "UTF-8";public JspC(ServletContext sc, boolean clear) {this(sc, null, clear);}public JspC(ServletContext sc, List<String> jspList, boolean clear) {this.uriRoot = sc.getRealPath("/");String outputDir = sc.getRealPath(StrutsContext.CLASS_PATH);this.scratchDir = new File(outputDir);try {if (jspList != null) {pages.addAll(jspList);logger.debug("Add pages with list " + jspList.size());}initServletContext(this.getClass().getClassLoader());if (clear) {File output = new File(outputDir + "/org");if (output.exists()) {FileUtils.deleteDir(output);logger.debug("Deleted dir " + output.getPath());}}} catch (JasperException | IOException e) {logger.error("Init context faild", e);}}public void setJspFiles(String jspFiles) {if (jspFiles == null) {return;}StringTokenizer tok = new StringTokenizer(jspFiles, ",");while (tok.hasMoreTokens()) {pages.add(tok.nextToken());}}public void execute() {long start = System.currentTimeMillis();Iterator<String> iter = pages.iterator();while (iter.hasNext()) {processFile(iter.next());}logger.debug("Jsp servlet build success in " + (System.currentTimeMillis() - start) + " ms");}protected void initServletContext(ClassLoader loader) throws IOException, JasperException {URL resourceBase = new File(uriRoot).getCanonicalFile().toURI().toURL();context = new JspCServletContext(new PrintWriter(System.out), resourceBase, loader, false, false);try {scanner = new TldScanner(context, false, false, false);scanner.scan();} catch (SAXException e) {throw new JasperException(e);}tldCache = new TldCache(context, scanner.getUriTldResourcePathMap(), scanner.getTldResourcePathTaglibXmlMap());rctxt = new JspRuntimeContext(context, this);jspConfig = new JspConfig(context);tagPluginManager = new TagPluginManager(context);}protected void processFile(String file) {try {String jspUri = file.replace('\\', '/');JspCompilationContext clctxt = new JspCompilationContext(jspUri, this, context, null, rctxt);logger.debug("Compiling file: " + file);clctxt.createCompiler().compile(true, true);} catch (Exception e) {logger.error("Compile '" + file + "' faild", e);}}@Overridepublic boolean getErrorOnUseBeanInvalidClassAttribute() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean getKeepGenerated() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean isPoolingEnabled() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean getMappedFile() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean getClassDebugInfo() {// TODO Auto-generated method stubreturn false;}@Overridepublic int getCheckInterval() {// TODO Auto-generated method stubreturn 0;}@Overridepublic boolean getDevelopment() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean getDisplaySourceFragment() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean isSmapSuppressed() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean isSmapDumped() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean getTrimSpaces() {return true;}@Overridepublic String getIeClassId() {return "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93";}@Overridepublic File getScratchDir() {return scratchDir;}@Overridepublic String getClassPath() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getCompiler() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getCompilerTargetVM() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getCompilerSourceVM() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getCompilerClassName() {return "org.apache.jasper.compiler.JDTCompiler";}@Overridepublic TldCache getTldCache() {return tldCache;}@Overridepublic String getJavaEncoding() {return Encoding;}@Overridepublic boolean getFork() {// TODO Auto-generated method stubreturn false;}@Overridepublic JspConfig getJspConfig() {return jspConfig;}@Overridepublic boolean isXpoweredBy() {// TODO Auto-generated method stubreturn false;}@Overridepublic TagPluginManager getTagPluginManager() {return tagPluginManager;}@Overridepublic boolean genStringAsCharArray() {return true;}@Overridepublic int getModificationTestInterval() {// TODO Auto-generated method stubreturn 0;}@Overridepublic boolean getRecompileOnFail() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean isCaching() {// TODO Auto-generated method stubreturn false;}@Overridepublic Map<String, TagLibraryInfo> getCache() {// TODO Auto-generated method stubreturn null;}@Overridepublic int getMaxLoadedJsps() {// TODO Auto-generated method stubreturn 0;}@Overridepublic int getJspIdleTimeout() {// TODO Auto-generated method stubreturn 0;}@Overridepublic boolean getStrictQuoteEscaping() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean getQuoteAttributeEL() {// TODO Auto-generated method stubreturn false;}
}