JSP声明变量的方式
2017-12-27 19:19
218 查看
在JSP中用两种声明变量的方法,一种是在<%! %>内,一种是在<% %>内。具体区别看代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP中两种声明变量的方法</title>
</head>
<body>
<H1>JSP Declarations</H1>
<%!
int count = 0; //声明在<%!>内的变量
void method(){}
%>
<%
int i= 0; //声明在<% >内的变量
%>
<H1>count:<%= ++count %></H1>
<br/>
<H1>i:<%= ++i %></H1>
</body>
</html>启动tomcat运行这个jsp会发现当我们不断刷新页面时count的值会不断增加 而i的值始终不变,也就是说定义在<%!%>内的变量会累加,而定义在<%%>内的变量不会累加。
![](https://img-blog.csdn.net/20171227194440411)
我们再看下index.jsp文件自动转换成的类文件的代码
文件所在地
TOMCAT安装目录/work/Catalina/localhost/你的工程名称/org/apache/jsp下的index_jsp.java
代码如下:
我们学习JAVA的时候就知道成员变量会被多个对象共享,而局部变量单独对象访问。所以count会自动增加,i不对递增。
在这里还有个问题要告诉读者,如果在<% %>内添加一个method()方法那么该程序就会报错,其实原因不难想象,这样声明一个方法等于就是一个类里的方法里又声明了个方法
结果肯定是错误的。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP中两种声明变量的方法</title>
</head>
<body>
<H1>JSP Declarations</H1>
<%!
int count = 0; //声明在<%!>内的变量
void method(){}
%>
<%
int i= 0; //声明在<% >内的变量
%>
<H1>count:<%= ++count %></H1>
<br/>
<H1>i:<%= ++i %></H1>
</body>
</html>启动tomcat运行这个jsp会发现当我们不断刷新页面时count的值会不断增加 而i的值始终不变,也就是说定义在<%!%>内的变量会累加,而定义在<%%>内的变量不会累加。
我们再看下index.jsp文件自动转换成的类文件的代码
文件所在地
TOMCAT安装目录/work/Catalina/localhost/你的工程名称/org/apache/jsp下的index_jsp.java
代码如下:
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { int count = 0; //声明 在%!内的 变量 void method(){} //方法 private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object 4000 getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); } public void _jspDestroy() { } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { response.setContentType("text/html; charset=gb2312"); pageContext = _jspxFactory.getPageContext(this, request, response, "", true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("/r/n"); out.write("<!DOCTYPE html PUBLIC /"-//W3C//DTD XHTML 1.0 Transitional//EN/" /"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd/">/r/n"); out.write("<html xmlns=/"http://www.w3.org/1999/xhtml/">/r/n"); out.write("<head>/r/n"); out.write("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=gb2312/" />/r/n"); out.write("<HTML>/r/n"); out.write("<HEAD>/r/n"); out.write("<TITLE>JSP Declarations</TITLE>/r/n"); out.write("<BODY>/r/n"); out.write("<H1>JSP Declarations</H1>/r/n"); out.write("/r/n"); out.write("/r/n"); out.write("/r/n"); int i= 0; //声明在%内的变量 out.write("/r/n"); out.write("/r/n"); out.write("<H1>/r/n"); out.write("/r/n"); out.write("count:"); out.print( ++count ); out.write("</H1>/r/n"); out.write("<br/>/r/n"); out.write("/r/n"); out.write("<H1>i:"); out.print( ++i ); out.write("</H1> /r/n"); out.write("/r/n"); out.write("</BODY>/r/n"); out.write("</HTML>"); } catch (Throwable t) { if (!(t instanceof 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); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }通过观察代码后我们发现,原先声明在<%! %>内的变量和方法是一个类内的变量和方法也就是成员变量和成员方法。声明在<%%>内的变量是一个方法的变量也就是局部变量。
我们学习JAVA的时候就知道成员变量会被多个对象共享,而局部变量单独对象访问。所以count会自动增加,i不对递增。
在这里还有个问题要告诉读者,如果在<% %>内添加一个method()方法那么该程序就会报错,其实原因不难想象,这样声明一个方法等于就是一个类里的方法里又声明了个方法
结果肯定是错误的。
相关文章推荐
- iOS 在类实现定义中声明成员变量的怪异方式
- JSP声明定义网页范围的变量、函数或类
- H5基础知识第八课时(JS使用方式与变量的声明)
- jsp jstl函数 用标签声明页面变量,供jstl使用,时间格式问题
- 【面试】SP隐含变量(也叫做内置对象、内建对象等等)这些东西在JSP当中,不用声明直接使用。
- JSP两种声明变量的区别
- 基于JavaScript 声明全局变量的三种方式
- 网站开发进阶(六)JSP两种声明变量的区别
- IOS,objective_C中用@interface和 @property 方式声明变量的区别
- js中全局变量声明方式
- iOS 在类实现定义中声明成员变量的怪异方式
- JavaScript声明全局变量三种方式的异同
- JSP两种声明变量的区别
- JavaScript中声明全局变量的三种方式(包括显示和隐式)
- js和html的结合方式及js的变量声明和数据类型
- JSP页面的基本结构 及声明变量
- IOS,objective_C中用@interface和 @property 方式声明变量的区别
- Objective-C成员变量声明方式探究
- 关于Java变量、数组、对象的声明、初始化与访问方式-----《疯狂Java突破程序员基本功的16课》读书笔记----第一章
- 基于JavaScript 声明全局变量的三种方式详解