Author:zfive5(zhaozidong)
Email :zfive5@yahoo.com.cn
这几天等待总部的通知,现在有点时间就看看jsp,当初也写过一些简单不能在简单的jsp程序,昨天用反编译方法写了一篇跟string相关的文章,现在再一次用反编译工具blog一遍jsp变量定义的文章,为了理解jsp变量定义和调用方式,可以想像任何东西知道原理是多么幸福的事呢? 其实这样的反编译工具在.net平台下的FrameworkSDK/Bin 目录中可以找到,相应.net remoting下的服务器功能类的代理类生成工具也可以在这里找到。
感悟世界之大,好些东西或工具其实已存在,只是由于诸多原因没有让每一个人知道罢了,现在真有些相识恨晚的领悟!唯一的结论就是--"知识交流和资源共享!"
<%! 定义 %>与 <% 定义 %>区别如下,一切尽在代码中。
Jsp:
<%@ page contentType="text/html; charset=GBK" %>
<!--定义方式1 -->
<% int j=1;%>
<!--定义方式2 -->
<%! int j=0;%>
<html>
<head>
<title>
jsp1
</title>
</head>
<body bgcolor="#ffffff">
<h1>
<!--
调用定义方式1的变量
-->
<%=j%>
<br>
<!--
调用定义方式2的变量
-->
<%=this.j%>
</h1>
</body>
</html>
反编译的Java jsp1_0002ejsp_jsp.class:
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import org.apache.jasper.runtime.HttpJspBase;
import org.apache.jasper.runtime.JspException;
public class jsp1_0002ejsp_jsp extends HttpJspBase
{
public jsp1_0002ejsp_jsp()
{
j = 0;
}
public final void _jspx_init()
throws JspException
{
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
String _value = null;
try
{
if(!_jspx_inited)
synchronized(this)
{
if(!_jspx_inited)
{
_jspx_init();
_jspx_inited = true;
}
}
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html; charset=GBK");
pageContext = _jspxFactory.getPageContext(this, request, response, "", true, 8192, true);
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
out.write("/r/n<!--/u5B9A/u4E49/u65B9/u5F0F1 -->/r/n");
//定义方式1,这里定义的只能作用在_jspService成员函数的定义之后,如果想引用定
//义方式2的变量只能用this应用
int j = 1;
out.write("/r/n<!--/u5B9A/u4E49/u65B9/u5F0F2 -->/r/n");
out.write("/r/n<html>/r/n<head>/r/n<title>/r/njsp1/r/n</title>/r/n</head>/r/n<body bgcolor=/"#ffffff/">/r/n<h1>/r/n/r/n<!--/r/n/u8C03/u7528/u5B9A/u4E49/u65B9/u5F0F1/u7684/u53D8/u91CF/r/n-->/r/n");
out.print(j);
out.write("/r/n<br>/r/n<!--/r/n/u8C03/u7528/u5B9A/u4E49/u65B9/u5F0F2/u7684/u53D8/u91CF/r/n-->/r/n");
out.print(this.j);
out.write("/r/n</h1>/r/n</body>/r/n</html>/r/n");
}
catch(Throwable t)
{
if(out != null && out.getBufferSize() != 0)
out.clearBuffer();
if(pageContext != null)
pageContext.handlePageException(t);
}
finally
{
if(_jspxFactory != null)
_jspxFactory.releasePageContext(pageContext);
}
}
//定义方式2 ,<%! xxxx >就是声明一个类的成员变量,如果我们在这个jsp文件定义一个
//成员函数,那么只能调用此种方式的变量了
int j;
private static boolean _jspx_inited = false;
}
哈哈!