javajspgenerator.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 2,451 行 · 第 1/5 页

JAVA
2,451
字号
  }  /**   * Returns true if the JSP compilation has produced a static file.   */  public boolean isStatic()  {    return _isStatic;  }  /**   * Returns the page's XML view.   */  public PageData getPageData()    throws IOException  {    if (_pageData != null)      return _pageData;        TempStream ts = new TempStream();    ts.openWrite();    WriteStream ws = new WriteStream(ts);    ws.setEncoding("UTF-8");    _rootNode.printXml(ws);        ws.close();    if (log.isLoggable(Level.FINER)) {      StringBuilder sb = new StringBuilder();      ReadStream is = ts.openReadAndSaveBuffer();      int ch;      while ((ch = is.readChar()) >= 0) {	sb.append((char) ch);      }      is.close();      log.finer("JSP[" + _fullClassName + "] " + sb);    }        _pageData = new QPageData(ts);    return _pageData;  }  public ELContext getELContext()  {    return _elContext;  }    /**   * Validates the JSP page.   */  public void validate()    throws Exception  {    for (int i = 0; i < _tagLibraryList.size(); i++) {      Taglib taglib = _tagLibraryList.get(i);      TagLibraryValidator validator = taglib.getValidator();          if (validator != null) {	ValidationMessage []messages;	messages = validator.validate(taglib.getPrefixString(),				      taglib.getURI(),				      getPageData());	if (messages != null && messages.length > 0) {          StringBuilder message = new StringBuilder();          for (int j = 0; j < messages.length; j++) {            if (j != 0)              message.append("\n");            message.append(messages[j].getMessage());          }                    throw _rootNode.error(message.toString());	}      }    }  }  /**   * Generates the JSP page.   */  protected void generate(Path path, String className)    throws Exception  {    init(className);    if (_jspCompilerInstance == null ||	! _jspCompilerInstance.isGeneratedSource())      addDepend(path);    _cacheDepends = new ArrayList<Depend>();    _tagId = 1;    if (_ideHack)      _config.setStaticEncoding(false);    // disable static pages.  No longer needed and complicates    // precompilation    if (isGenerateStatic()        && ! _parseState.getJspPropertyGroup().getStaticPageGeneratesClass()) {      generateStatic();    }    else {      WriteStream os = openWriteStream();      JspJavaWriter out = new JspJavaWriter(os, this);      try {        generate(out);      } finally {        if (os != null)          os.close();      }    }    if (_lineMap != null) {      Path javaPath = getGeneratedPath();      String tail = javaPath.getTail();      tail = tail + ".smap";      WriteStream os = javaPath.getParent().lookup(tail).openWrite();      LineMapWriter writer = new LineMapWriter(os);      writer.write(_lineMap);      os.close();    }  }  public void addDepend(Path path)  {    addDepend(path.createDepend());  }  /**   * Adds a dependency based on a class.   */  public void addDepend(Class cl)  {    addDepend(new ClassDependency(cl));  }  public void addDepend(PersistentDependency depend)  {    if (! _depends.contains(depend))      _depends.add(depend);  }  public ArrayList<PersistentDependency> getDependList()  {    return _depends;  }  public boolean isStaticEncoding()  {    return _config.isStaticEncoding();  }  public boolean getRecycleTags()  {    return _parseState.isRecycleTags();  }  /**   * Adds a new Java declaration to the list.   */  public void addDeclaration(JspDeclaration decl)  {    _declarations.add(decl);  }  /**   * Sets the taglib manager.   */  public void setTagManager(ParseTagManager tagManager)  {    _tagManager = tagManager;  }  /**   * Returns the taglib manager.   */  public ParseTagManager getTagManager()  {    return _tagManager;  }  protected void init(String className)  {    _fullClassName = className;     _className = className;    String prefix = getPackagePrefix();    if (prefix.endsWith("."))      prefix = prefix.substring(0, prefix.length() - 1);    int p = className.lastIndexOf('.');    if (p > 0) {      _pkg = className.substring(0, p);      _className = className.substring(p + 1);    }    else      _pkg = "";    if (prefix.length() > 0 && _pkg.length() > 0)      _pkg = prefix + "." + _pkg;    else if (prefix.length() > 0)      _pkg = prefix;    _workPath = _pkg.replace('.', '/');    _lineMap = new LineMap(className.replace('.', '/') + ".java");  }  /**   * True if it's a declared variable.   */  public boolean isDeclared(String var)  {    return _declaredVariables.contains(var);  }  /**   * Adds a declared variable.   */  public void addDeclared(String var)  {    _declaredVariables.add(var);  }  /**   * Generates the Java code.   */  protected void generate(JspJavaWriter out)    throws Exception  {    out.setLineMap(_lineMap);        generateClassHeader(out);    generatePageHeader(out);    _rootNode.generate(out);          generatePageFooter(out);    // _rootNode.generateDeclaration(out);    generateClassFooter(out);  }  /**   * Generates a static file.   */  protected void generateStatic()    throws Exception  {    _isStatic = true;        Path javaPath = getGeneratedPath();    String tail = javaPath.getTail();    int p = tail.indexOf('.');    tail = tail.substring(0, p);    Path staticPath = javaPath.getParent().lookup(tail + ".static");    WriteStream os = staticPath.openWrite();    //os.setEncoding(_parseState.getCharEncoding());    os.setEncoding("UTF-8");    try {      JspJavaWriter out = new JspJavaWriter(os, this);      _rootNode.generateStatic(out);    } finally {      os.close();    }        Path dependPath = javaPath.getParent().lookup(tail + ".depend");    StaticPage.writeDepend(dependPath, getDependList());  }  /**   * Generates the class header.   *   * @param doc the XML document representing the JSP page.   */  protected void generateClassHeader(JspJavaWriter out)    throws IOException, JspParseException  {    out.println("/*");    out.println(" * JSP generated by " + com.caucho.Version.FULL_VERSION);    out.println(" */" );    out.println();    if (_pkg != null && ! _pkg.equals(""))      out.println("package " + _pkg + ";");    out.println("import javax.servlet.*;");    out.println("import javax.servlet.jsp.*;");    out.println("import javax.servlet.http.*;");    fillSingleTaglibImports();    ArrayList<String> imports = _parseState.getImportList();    for (int i = 0; i < imports.size(); i++) {      String name = imports.get(i);      out.print("import ");      out.print(name);      out.println(";");    }    _parseState.addImport("javax.servlet.*");    _parseState.addImport("javax.servlet.jsp.*");    _parseState.addImport("javax.servlet.http.*");    _parseState.addImport("java.lang.*");    out.println();    if (_parseState.getExtends() != null) {      //if (extendsLocation != null)      //setLocation(extendsLocation.srcFilename, extendsLocation.srcLine, 0);      out.print("public class ");      out.print(_className);      out.print(" extends ");      out.print(_parseState.getExtends().getName());      out.print(" implements com.caucho.jsp.CauchoPage");      if (! _parseState.isThreadSafe())        out.print(", javax.servlet.SingleThreadModel");    } else {      out.print("public class ");      out.print(_className);      out.print(" extends com.caucho.jsp.JavaPage");      if (! _parseState.isThreadSafe())        out.print(" implements javax.servlet.SingleThreadModel");    }    out.println();    out.println("{");    out.pushDepth();    out.println("private static final java.util.HashMap<String,java.lang.reflect.Method> _jsp_functionMap = new java.util.HashMap<String,java.lang.reflect.Method>();");    out.println("private boolean _caucho_isDead;");    out.println("private com.caucho.jsp.PageManager _jsp_pageManager;");    //out.println("private com.caucho.util.FreeList<TagState> _jsp_freeState = new com.caucho.util.FreeList<TagState>(8);");    String info = _parseState.getInfo();    if (info != null) {      out.println();      out.print("public String getServletInfo() { return \"");      for (int i = 0; i < info.length(); i++) {	char ch = info.charAt(i);	if (ch == '\\')	  out.print("\\\\");	else if (ch == '\n')	  out.print("\\n");	else if (ch == '\r')	  out.print("\\r");	else if (ch == '"')	  out.print("\\\"");	else	  out.print(ch);      }      out.println("\"; }");    }        for (int i = 0; i < _declarations.size(); i++) {      JspDeclaration decl = _declarations.get(i);      out.println();      decl.generateDeclaration(out);    }  }  /**   * As a convenience, when the Tag isn't in a package, import   * it automatically.   */  protected void fillSingleTaglibImports()    throws JspParseException  {    /*    Iterator<Taglib> iter = _taglibMap.values().iterator();        while (iter.hasNext()) {      Taglib taglib = iter.next();      if (taglib == null)        continue;            ArrayList<String> singleTags = taglib.getSingleTagClassNames();      for (int i = 0; i < singleTags.size(); i++) {        String className = singleTags.get(i);        _parseState.addImport(className);      }    }    */  }  /**   * Prints the _jspService header   */  protected void generatePageHeader(JspJavaWriter out) throws Exception  {    out.println("");    out.println("public void");    out.println("_jspService(javax.servlet.http.HttpServletRequest request,");    out.println("            javax.servlet.http.HttpServletResponse response)");    out.println("  throws java.io.IOException, javax.servlet.ServletException");    out.println("{");    out.pushDepth();    // static shouldn't start up a session    boolean isSession = _parseState.isSession() && ! _rootNode.isStatic();        if (isSession) {      out.println("javax.servlet.http.HttpSession session = request.getSession(true);");    }        out.println("com.caucho.server.webapp.WebApp _jsp_application = _caucho_getApplication();");    out.print("com.caucho.jsp.PageContextImpl pageContext = _jsp_pageManager.allocatePageContext(");        out.print("this, _jsp_application, request, response, ");    if (_parseState.getErrorPage() == null)       out.print("null");    else      out.print("\"" + _parseState.getErrorPage() + "\"");    out.print(", ");    if (isSession) {      out.print("session");    }    else      out.print("null");    out.print(", ");    out.print(_parseState.getBuffer());    out.print(", ");    out.print(_parseState.isAutoFlush());    out.print(", ");    out.print(_parseState.isPrintNullAsBlank());    out.println(");");    out.println();    out.println("TagState _jsp_state = new TagState();");    // out.println("TagState _jsp_state = _jsp_freeState.allocate();");    //out.println("if (_jsp_state == null)");    //out.println("  _jsp_state = new TagState();");        out.println();    out.println("try {");    out.pushDepth();    if (isSession)      out.println("_jspService(request, response, pageContext, _jsp_application, session, _jsp_state);");    else      out.println("_jspService(request, response, pageContext, _jsp_application, _jsp_state);");    out.popDepth();    out.println("} catch (java.lang.Throwable _jsp_e) {");    out.println("  pageContext.handlePageException(_jsp_e);");    out.println("} finally {");    out.pushDepth();    //out.println("if (! _jsp_freeState.free(_jsp_state))");    out.println("_jsp_state.release();");        out.println("_jsp_pageManager.freePageContext(pageContext);");        // close finally    out.popDepth();    out.println("}");    out.popDepth();    out.println("}");    // impl        out.println("");    out.println("private void");    out.println("_jspService(javax.servlet.http.HttpServletRequest request,");    out.println("            javax.servlet.http.HttpServletResponse response,");    out.println("            com.caucho.jsp.PageContextImpl pageContext,");    out.println("            javax.servlet.ServletContext application,");    if (isSession) {      out.println("            javax.servlet.http.HttpSession session,");    }    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?