jsp 中声明方法的使用

1、在”<%!”和”%>”之间声明方法,该方法在整个JSP页面有效,但是该方法内定义的变量只在该方法内有效。这些方法将在Java程序片中被调用,当方法被调用时,方法内定义的变量被分配内存,调用完毕即可释放内存。当多个客户同时请求一个JSP页面时,他们可能使用方法操作成员变量,对这种情况应给予重视。

解决办法:通过synchronized方法操作一个成员变量来实现一个计数器

<%@ page contentType="text/html;charset=GB2312"%>
<HTML>
<BODY BGCOLOR=cyan>
<FONT Size=4>
<%!
 int number=0;
 synchronized void countPeople()
 {
      number++;
 }
 %>
 <%
 countPeople();
 %>
<p>您是第
           <%=number%>
		   个访问本站的客户。
<p>
</FONT>
</BODY>
</HTML>

运行效果:

上面这个例子,如果Tomcat服务器重新启动就会刷新计数器,因此计数又重0开始,在下面这个例子,我们使用Java的输入输出流技术,将计数保存到文件,当客户访问该JSP页面时,就去读取这个文件,将服务器重新启动之前的计数读入,并在次基础上增加1,然后将新的计数写入到文件。

<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="java.io.*"%>

<HTML>
<BODY BGCOLOR=cyan>
<FONT Size=4>
<%!
 int number=0;
 File file=new File("count.txt");
 synchronized void countPeople()
 {
     if(!file.exists()){
	     number++;
		 try{
		 file.createNewFile();
		 FileOutputStream out=new FileOutputStream("count.txt");
		 DataOutputStream dataOut=new DataOutputStream(out);
		 dataOut.writeInt(number);
		 out.close();
		 dataOut.close();
		 }catch(IOException ee){}

	  }
	  else{
	      try{
		       FileInputStream in=new FileInputStream("count.txt");
			   DataInputStream dataIn=new DataInputStream(in);
			   number=dataIn.readInt();
			   number++;
			   in.close();
			   dataIn.close();
			   FileOutputStream out=new FileOutputStream("count.txt");
		       DataOutputStream dataOut=new DataOutputStream(out);
		       dataOut.writeInt(number);
		       out.close();
		       dataOut.close();
		  }catch(IOException ee){}
	  }
 }
 %>
 <%
 countPeople();
 %>
<p>您是第
           <%=number%>
		   个访问本站的客户。
<p>
</FONT>
</BODY>
</HTML>

运行效果:

jsp 中声明方法的使用,布布扣,bubuko.com

时间: 2024-10-10 21:44:32

jsp 中声明方法的使用的相关文章

jsp中:jsp声明与jsp脚本&lt;%! int count=0;%&gt; 与&lt;% int count=0;%&gt;

<body> <%!int count; %> <%int count2=0; %> 输出声明时候的count:<%=count++ %> <br> 输出脚本的count2:<%=count2++ %> <br> </body>每次刷新该jsp页面时对应的输出结果count每刷新一次增加1 count2每刷新一次 不变 分析: 因为count是jsp中声明的变量,当jsp编译成servlet时,cout是该se

JSP传递参数到JS中的方法和问题

在做校工会系统时,遇到一个问题,登陆成功后,spring security会存放用户信息到session中,用户执行某个功能的时候,需要用到用户的信息,所以此时需要从session里取,但客户端的js无法直接取服务器的session的值,所以只好通过jsp来间接获取.那么问题来了,如何将jsp的变量,传递给js?网上的方法多得是....但我这里统一编码utf-8,所以他们说的方法都没用...... 举个栗子,jsp: <script type="text/javascript"

JSP页面的基本结构 及声明方法

一.JSP页面的基本结构 在传统的HTML页面文件中加入Java程序片和JSP标签就构成了一个JSP页面文件.一个JSP页面可由5种元素组合而成: 1.普通的HTML标记符 2.Jsp标签,如指令标签,动作标签 3.变量和方法的声明 4.Java程序片 5.Java表达式 我们称后三部分为JSP的脚本部分 当服务器上的一个JSP页面被第一个请求执行时,服务器上的JSP引擎首先将JSP页面文件转译成一个Java文件,再将这个Java文件编译成生成字节码文件,然后通过执行字节码文件响应客户的请求.这

JSP中的声明语句块和表达式块

一.JSP中的声明语句块 在JSP页面中使用<%!%>括起来的部分,称为声明语句块.声明语句块中的内容,将被JSP引擎翻译到Servlet的类体中,是不会被包含到某个方法中的. 这样的话,在JSP的声明语句块中就可以声明实例变量.实例方法.静态方法.静态代码块等内容.并且,这些内容均可被JSP的的Java代码块中的代码访问.因为可以访问类属性的.不过,还是不建议在JSP的声明语句块中声明实例变量.因为JSP是运行在单例多线程环境下的,实例变量将会引起线程安全问题. 需要注意的是,在JSP的声明

jsp中遇到Integer的方法valueOf()和parseInt()的区别.前者要求是对象类型,后者是数字型字符串

他们有本质区别,Integer.valueof(String s)是将一个包装类是将一个实际值为数字的变量先转成string型再将它转成Integer型的包装类对象(相当于转成了int的对象)这样转完的对象就具有方法和属性了. 而Integer.parseInt(String s)只是将是数字的字符串转成数字,注意他返回的是int型变量不具备方法和属性 Integer.parseInt()把String 型转换为Int型, Integer.valueOf()把String 型转换为Integer

jsp中怎么调用java类中的方法

在jsp页面中先要,引入java类 例如: <%@page import="javabean.DbConn"%><!-- 引入包中的"类" --> <!--在用到的地方,直接对类实例化--> <% DbConn  DB=new  DbConn(); %> <!--然后就可以直接调用类中的方法--> <% Connection con=DB.conn(); %> jsp中怎么调用java类中的方法

JSP中四种传递参数的方法

jsp中四种传递参数的方法,我觉得总结一下,挺好的,以备后用! 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="index.jsp"?a=a&b=b&c=c>name</a> 1.form表单 form.jsp: <%@page contentType="text/html; charset=GB2312"%> &l

jsp中写java代码的方法

区别 jsp和html相比,最显著的优势就在于,jsp里面可以写Java代码,但是html中不能. --------------------------- 写法 <%! %>,这里面可以申明变量或方法,注意:这里面申明的变量是全局的 <% %>,与上面的方法相比,这个方法的局部的 <%= %>,用于输出表达式到浏览器,注意:这里面的表达式不能跟分号 --------------------------------------------------- 在jsp2.0中定

jsp页面中创建方法

在JSP页面中是用 <%! void function(){ } %> 这种方式可以定义函数. 如果只使用 <% //todo %> 代码块中的代码在编译时将会都被加到 sevlet 中的 excute()  方法中. jsp页面中创建方法