日期:2014-05-16 浏览次数:20585 次
    <%!
        int a = 1;
        private String sayHello(){return "hello";}
    %>
    <%
        int a = 1;
    %>
    <h1>Hello World</h1> 
第一步,先编译为一个xml文件,结果如下    <jsp:declare>
    int a = 1;
    private String sayHello(){return "hello";}
    </jsp:declare>
    <jsp:scriptlet>
    int a = 1;
    </jsp:scriptlet>
    <h1>Hello World</h1>第二步,再编译为一个java文件, 大致结果如下    public class _xxx_test{
        int a = 1;
        private String sayHello(){return "hello";}
        public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException{
            JspWriter out = xxxx.getWriter();
            // 创建其他的隐含对象
            int a = 1;
            out.write("<h1>Hello World</h1>");
            // 释放资源
        }
    }从中可以看出编译过程, 编译器依次读入文本, 遇到<%@就认为这是个jsp指令, 指令是对编译和执行这个jsp生效的.<%
    String s = "test%>"
%>编译出来的结果大致如下:    public class _xxx_test{
        public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException{
            JspWriter out = xxxx.getWriter();
            // 创建其他的隐含对象
            String s = "test
            out.write("\"\r\n%>");
            // 释放资源
            }
    }<%
    int a = 1;
%><jsp:scriptlet>int a = 1;</jsp:scriptlet>
    public class _xxx_test{
        public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException{
            JspWriter out = xxxx.getWriter();
            ExprEnv exprEnv = xxx.create();
            out.write("abc");
            org.xxx.xxx.Expr _expr_xxx = xxx.createExpr("${user.name}");
            _expr_xxx.write(out, exprEnv);
            out.write("123\r\n");
        }
    }