一般喜欢把页面里多处要用到的变量设置成全局变量,如:
当把该变量赋值后,再次访问该页面时,该变量的值依然保存。这使得想通过用全局变量接受提交的参数时会受到一些迷惑:
if(request.getParameter("operation")!=null)
ID = request.getParameter("operation").trim();
当ID在前一次赋过初值后,因为另一种原因而再次访问该页面但‘operation'参数为空时,本来希望ID也为空,但实际上ID的值为上次访问该页面时赋的值。当希望通过ID的值做不同的操作时可能引起操作类型的混乱。
原因:使用<%! %>定义的变量编译成servlet后成为servlet的私有成员变量,在servlet环境中,对于一个JSP页只允许有一个结果servlet的实例在运行和响应所有的页面请求。因此,在结果servlet中所有的成员变量可以被所有的请求所共享,所以只要成员变量没有重新赋值,下次访问该页面时仍然不变。而在<% %>中定义的变量编译成servlet后成为service()方法的一个本地变量,而service()方法中的本地变量只能每响应一次请求就重建一次。同时成员变量会自动初始化,所以只要声明后就可以使用;而本地变量在使用前一定要手动初始化,否则编译出错。
解决的办法是将ID用<% %>定义,或在判断ID的操作后重新对ID初始化。
分享到:
相关推荐
%>`之间声明的变量称为全局变量,它们在整个JSP生命周期内有效,可供所有用户共享。例如,可以创建一个简单的计数器: ```jsp <%@ page contentType="text/html;charset=GB2312" %> <HTML><BODY bgcolor=pink> < ...
- **全局变量声明**:`<%! int number = 1; %>`, 在整个JSP页面内都可见。 - **方法声明**:在`<%! %>`之间声明方法,如`<%! public int counter() { return number++; } %>`, 可在整个JSP页面内使用。 #### 四、...
4. **变量声明与生命周期**:在`<%…%>`中声明的变量仅限于当前_jspService()方法内使用,而`<%!…%>`中声明的成员变量和方法则可以在整个JSP页面中使用,甚至在多个请求之间共享,但需注意线程安全问题。 5. **...
%>`中声明,这些变量在整个JSP页面中都可见。 4. **Java程序片**:`<% ... %>`内包含的Java代码,用于执行更复杂的逻辑操作。 5. **Java表达式**:`<%= ... %>`用于输出表达式的计算结果到页面。 **JSP页面的运行...
声明的变量和方法只在其所在的JSP页面中有效,如果需要跨页面使用,可以考虑将它们放入单独的Java源文件并通过`<%@ include %>`或`<jsp:include>`引入。 ### 表达式 表达式元素 `<%= %>` 用于将Java表达式的值转换...
<title>我的第一个JSP页面</title> </head> <body> <%@ include file="header.jsp" %> <h1>Hello, <%= request.getParameter("name") %></h1> <%! public void init() { System.out.println("JSP页面初始化");...
%>`, 在这里声明了一个全局变量`i`。 2. **Scriptlet**: `<% ... %>`, 实现了每次访问时`i`自增1的功能。 3. **Expression**: `<%= i %>`, 输出当前的计数值。 ##### 示例3:同步计数器实现(Example2_2.jsp) ```...
...%>`用于声明变量或方法。 **EL(Expression Language)** 是一种简洁的表达式语法,用于获取和设置JSP页面中的JavaBeans属性。它简化了数据绑定,减少了脚本let的使用。 **JSTL(JavaServer Pages Standard Tag...
- 定义JSP页面的全局属性。 - 示例: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" %> ``` - `language`: 指定脚本语言,默认为Java。 - `contentType`: 设置内容类型及其字符集...
%>`声明了一个全局变量count,`<%! synchronized void setCount() {...} %>`定义了一个同步方法setCount,确保了在多线程环境下的安全性。 通过这些例子,我们可以了解到JSP的基本元素,如指令、脚本元素、声明...
%>`声明一个全局变量`i`。 - 使用`<% %>`进行计数器的递增操作。 **7. example2_3.jsp:计算圆的面积和周长** 这个示例演示了如何使用JSP计算给定半径的圆的面积和周长。 ```jsp <%@ page contentType="text/...
%>`,声明全局变量和方法,它们会被添加到Servlet类中但不包含在任何方法内。 3. **表达式(Expression)**:`<%= ... %>`,用于将Java表达式的值输出到HTML页面。 4. **程序段(Scriptlet)**:`<% ... %>`,包含...
%>`定义变量或方法,这些变量和方法在JSP页面的整个生命周期内有效。例如: ```jsp <%! int count = 0; %> ``` 5. **注释(Comments)**:有三种方式,HTML注释、JSP脚本注释和JSP指令注释。例如: ```jsp <!...
声明部分用于在JSP页面中定义变量、方法或类,这些会被转换为Servlet的成员变量和方法。声明必须以分号结尾,语法是`<%! declaration; [ declaration; ]+ ... %>`。如: ```jsp <%! int i = 0; %> <%! int a, b, c; ...
- `<%@ page %>`: 用于设置整个JSP页面的属性,如字符编码、导入的Java包等。 - `<%@ include %>`: 用于在编译时将另一个文件包含到当前JSP页面中。 - `<%@ taglib %>`: 引入自定义标签库,允许使用自定义的标签来...
声明允许开发者在JSP页面中定义全局变量、方法和类。这些定义在JSP页面的整个生命周期内都是有效的。 **示例代码**: ```jsp <html> <head> <title>This is Java Page</title> </head> <body> <!-- 显示解释解释...
...%>`声明变量或方法,可用于整个JSP页面。 - **动作(Actions)**: 如`<jsp:include>`包含其他页面,`<jsp:forward>`转发请求等。 **4. JSP内置对象** JSP提供了九个内置对象,无需手动创建即可直接使用: - **...
<title>我的第一个JSP页面</title> </head> <body> <% // 动态内容 %> <h1>Hello, JSP!</h1> </body> </html> ``` **2. JSP指令** JSP指令是用于配置整个JSP页面的元信息。主要有以下几种: - `@page`: 配置...
%>`,用于声明变量或方法,这些变量和方法在整个JSP页面中都可见。 - **Java程序段**:`<% %>`, 可以编写任意的Java代码,如循环、条件判断等。 - **表达式**:`<%=%>`,用于显示表达式的值,等效于调用`out.print...