JSP page指令:
JSP文件:
<%@ page language="java"%> <%@ page import="java.util.*"%> <%@ page isThreadSafe="false"%> <%@ page contentType="text/html; charset=UTF-8"%> <%@ page isELIgnored="true"%> <%@ page isErrorPage="true"%> <%@ page errorPage="index0051.jsp"%> <!-- %@ page extends="org.apache.jsp"% --> <%@ page session="false"%> <%@ page buffer="none"%> <%@ page autoFlush="true"%> <%@ page info="infotext"%> <%@ page pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; pageContext.setAttribute("pca", "pageContextAttribute"); //session.setAttribute("s", "session"); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>005index</title> </head> <body> <p>Page指令</p> <p>Page指令可以在頁面內隨便放置,最好放在頁首;</p> <p>language屬性不寫可以,寫成別的會無法編譯,異常為:org.apache.jasper.JasperException: /index005.jsp (line: 1, column: 2) Page directive: invalid language attribute</p> <%@ page import="a.b.*"%> <p>import屬性,寫了之后會自動添加到servlet的import語句中,但不進行包存在性的檢查;反編譯生成的class中就沒有無效的包;</p> <p>isThreadSafe問你的應用是否是線程安全的,缺省為true,表示應用是線程安全的,可以同時響應多個請求;如果設置為false,生成的servlet會實現javax.servlet.SingleThreadModel線程,那么一次只能處理一個用戶請求;</p> <p>${pageScope.pca }</p> <p>isELIgnored忽略el表達式</p> <p>errorPage="relativeURL" 設置處理異常事件的JSP文件。 isErrorPage="true | false" 設置此頁是否為出錯頁,如果被設置為true,你就能使用exception對象.</p> <p>extends="package.class" 標明JSP編譯時需要加入的Java Class的全名,但是得慎重的使用它,它會限制JSP的編譯能力.寫成別的就無法轉換了。org.apache.jasper.JasperException: Unable to compile class for JSP:</p> <p>session="false"就沒有session對象了;</p> <p>contentType屬性設置發送到客戶端文檔的響應報頭的MIME類型和字符編碼。多個使用;號分開。 pageEncodeing屬性只用於更改字符編碼。</p> <p>buffer屬性指定out對象(JspWriter)使用的緩沖區大小,以kb為單位,默認8kb。 none表示不使用緩沖區。這樣要求設置報頭或狀態代碼的jsp元素要出現在文件的頂部,任何HTML內容之前。 autoFlush屬性控制當緩沖區滿了后,是自動清空輸出緩沖區(默認true),還是在緩沖區溢出后拋出異常(false)。 在buffer=none的時候,autoFlush=false是錯誤的。</p> <p>定義一個可以在servlet中通過getServletInfo方法獲取的字符串。 jsp容器做的是在servlet中生成getServletInfo方法返回info屬性指定的String。</p> </body> </html>
JSP轉換的java文件:
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/7.0.35 * Generated at: 2015-10-20 00:27:17 UTC * Note: The last modified time of this file was set to * the last modified time of the source file after * generation to assist with modification tracking. */ package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import java.util.*; import a.b.*; public final class index005_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, javax.servlet.SingleThreadModel { public java.lang.String getServletInfo() { return "infotext"; } private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory(); private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } public void _jspDestroy() { } public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext; java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request); if (exception != null) { response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html; charset=UTF-8"); pageContext = _jspxFactory.getPageContext(this, request, response, "index0051.jsp", false, 0, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); out = pageContext.getOut(); _jspx_out = out; out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("<!-- %@ page extends=\"org.apache.jsp\"% -->\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; pageContext.setAttribute("pca", "pageContextAttribute"); //session.setAttribute("s", "session"); out.write("\r\n"); out.write("<!DOCTYPE html>\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<meta charset=\"UTF-8\">\r\n"); out.write("<title>005index</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\t<p>Page指令</p>\r\n"); out.write("\t<p>Page指令可以在頁面內隨便放置,最好放在頁首;</p>\r\n"); out.write("\t<p>language屬性不寫可以,寫成別的會無法編譯,異常為:org.apache.jasper.JasperException: /index005.jsp (line: 1, column: 2) Page directive: invalid language attribute</p>\r\n"); out.write("\t\r\n"); out.write("\t<p>import屬性,寫了之后會自動添加到servlet的import語句中,但不進行包存在性的檢查;反編譯生成的class中就沒有無效的包;</p>\r\n"); out.write("\t<p>isThreadSafe問你的應用是否是線程安全的,缺省為true,表示應用是線程安全的,可以同時響應多個請求;如果設置為false,生成的servlet會實現javax.servlet.SingleThreadModel線程,那么一次只能處理一個用戶請求;</p>\r\n"); out.write("\t<p>${pageScope.pca }</p>\r\n"); out.write("\t<p>isELIgnored忽略el表達式</p>\r\n"); out.write("\t<p>errorPage=\"relativeURL\" 設置處理異常事件的JSP文件。 isErrorPage=\"true | false\" 設置此頁是否為出錯頁,如果被設置為true,你就能使用exception對象.</p>\r\n"); out.write("\t<p>extends=\"package.class\" 標明JSP編譯時需要加入的Java Class的全名,但是得慎重的使用它,它會限制JSP的編譯能力.寫成別的就無法轉換了。org.apache.jasper.JasperException: Unable to compile class for JSP:</p>\r\n"); out.write("\t<p>session=\"false\"就沒有session對象了;</p>\r\n"); out.write("\t<p>contentType屬性設置發送到客戶端文檔的響應報頭的MIME類型和字符編碼。多個使用;號分開。 pageEncodeing屬性只用於更改字符編碼。</p>\r\n"); out.write("\t<p>buffer屬性指定out對象(JspWriter)使用的緩沖區大小,以kb為單位,默認8kb。 none表示不使用緩沖區。這樣要求設置報頭或狀態代碼的jsp元素要出現在文件的頂部,任何HTML內容之前。 autoFlush屬性控制當緩沖區滿了后,是自動清空輸出緩沖區(默認true),還是在緩沖區溢出后拋出異常(false)。\r\n"); out.write("\t\t在buffer=none的時候,autoFlush=false是錯誤的。</p>\r\n"); out.write("\t<p>定義一個可以在servlet中通過getServletInfo方法獲取的字符串。 jsp容器做的是在servlet中生成getServletInfo方法返回info屬性指定的String。</p>\r\n"); out.write("</body>\r\n"); out.write("</html>\r\n"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }
反編譯class文件:
package org.apache.jsp; import java.io.IOException; import java.util.Map; import javax.el.ExpressionFactory; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.SingleThreadModel; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspApplicationContext; import javax.servlet.jsp.JspFactory; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.SkipPageException; import org.apache.jasper.runtime.HttpJspBase; import org.apache.jasper.runtime.InstanceManagerFactory; import org.apache.jasper.runtime.JspRuntimeLibrary; import org.apache.jasper.runtime.JspSourceDependent; import org.apache.tomcat.InstanceManager; public final class index005_jsp extends HttpJspBase implements JspSourceDependent, SingleThreadModel { private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static Map<String, Long> _jspx_dependants; private ExpressionFactory _el_expressionfactory; private InstanceManager _jsp_instancemanager; public String getServletInfo() { return "infotext"; } public Map<String, Long> getDependants() { return _jspx_dependants; } public void _jspInit() { this._el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); this._jsp_instancemanager = InstanceManagerFactory.getInstanceManager(getServletConfig()); } public void _jspDestroy() { } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Throwable exception = JspRuntimeLibrary.getThrowable(request); if (exception != null) { response.setStatus(500); } JspWriter out = null; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { response.setContentType("text/html; charset=UTF-8"); PageContext pageContext = _jspxFactory.getPageContext(this, request, response, "index0051.jsp", false, 0, true); _jspx_page_context = pageContext; pageContext.getServletContext(); pageContext.getServletConfig(); out = pageContext.getOut(); _jspx_out = out; out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("<!-- %@ page extends=\"org.apache.jsp\"% -->\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); String path = request.getContextPath(); new StringBuilder(String.valueOf(request.getScheme())).append("://").append(request.getServerName()).append(":").append(request.getServerPort()).append(path).append("/").toString(); pageContext.setAttribute("pca", "pageContextAttribute"); out.write("\r\n"); out.write("<!DOCTYPE html>\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<meta charset=\"UTF-8\">\r\n"); out.write("<title>005index</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\t<p>Page指令</p>\r\n"); out.write("\t<p>Page指令可以在頁面內隨便放置,最好放在頁首;</p>\r\n"); out.write("\t<p>language屬性不寫可以,寫成別的會無法編譯,異常為:org.apache.jasper.JasperException: /index005.jsp (line: 1, column: 2) Page directive: invalid language attribute</p>\r\n"); out.write("\t\r\n"); out.write("\t<p>import屬性,寫了之后會自動添加到servlet的import語句中,但不進行包存在性的檢查;反編譯生成的class中就沒有無效的包;</p>\r\n"); out.write("\t<p>isThreadSafe問你的應用是否是線程安全的,缺省為true,表示應用是線程安全的,可以同時響應多個請求;如果設置為false,生成的servlet會實現javax.servlet.SingleThreadModel線程,那么一次只能處理一個用戶請求;</p>\r\n"); out.write("\t<p>${pageScope.pca }</p>\r\n"); out.write("\t<p>isELIgnored忽略el表達式</p>\r\n"); out.write("\t<p>errorPage=\"relativeURL\" 設置處理異常事件的JSP文件。 isErrorPage=\"true | false\" 設置此頁是否為出錯頁,如果被設置為true,你就能使用exception對象.</p>\r\n"); out.write("\t<p>extends=\"package.class\" 標明JSP編譯時需要加入的Java Class的全名,但是得慎重的使用它,它會限制JSP的編譯能力.寫成別的就無法轉換了。org.apache.jasper.JasperException: Unable to compile class for JSP:</p>\r\n"); out.write("\t<p>session=\"false\"就沒有session對象了;</p>\r\n"); out.write("\t<p>contentType屬性設置發送到客戶端文檔的響應報頭的MIME類型和字符編碼。多個使用;號分開。 pageEncodeing屬性只用於更改字符編碼。</p>\r\n"); out.write("\t<p>buffer屬性指定out對象(JspWriter)使用的緩沖區大小,以kb為單位,默認8kb。 none表示不使用緩沖區。這樣要求設置報頭或狀態代碼的jsp元素要出現在文件的頂部,任何HTML內容之前。 autoFlush屬性控制當緩沖區滿了后,是自動清空輸出緩沖區(默認true),還是在緩沖區溢出后拋出異常(false)。\r\n"); out.write("\t\t在buffer=none的時候,autoFlush=false是錯誤的。</p>\r\n"); out.write("\t<p>定義一個可以在servlet中通過getServletInfo方法獲取的字符串。 jsp容器做的是在servlet中生成getServletInfo方法返回info屬性指定的String。</p>\r\n"); out.write("</body>\r\n"); out.write("</html>\r\n"); } catch (Throwable t) { if (!(t instanceof SkipPageException)) { out = _jspx_out; if ((out != null) && (out.getBufferSize() != 0)) try { out.clearBuffer(); } catch (IOException localIOException) { } if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } _jspxFactory.releasePageContext(_jspx_page_context); } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }
