请问<%与<%!有没有区别?? <% is script segment<%! is declaration 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <% 代码 %><%!声明 %> <%! 主要是用来声明变量的 在C中主要应用,在JSP中不用也可以《% 是原代码, 你放的路径是对的,不过如果你使用的是tomcat服务器,最好是把*.java也放在web/WEB-INF/classes/下面,而且写bean的时候要打包<%与<%!当然有区别了我记得在<% %>里声明的变量相当于全局变量在<%! %>里声明的变量相当于局部变量进一步怎么说我忘记了你可以多看一下以前的贴子《JSP程序设计》耿祥义编的这本书上好像有说明 <% %>中的是代码段,<%! %>用来声明函数或变量。 变量声明好像不要!也可以吧如<% String str;int i;%> <%! %>里面是 变量、方法和类的声明区,在里面声明的变量、方法、类都会被保留成为一的一份,直到此jsp停止执行为止;也就是所有的请求服务都是共用这一份,信息同时被分享。<% %>可放入任何标准的java程序代码。 区别很大:在<%!%>中定义的变量是类似于成员属性的而在<%%>中定义的变量类似于临时变量这个一定要注意,没弄好的话容易出问题 在tomcat编译后生成的.java里放的位置是不同的,给你看看下面的代码就知了:<BODY><%! String fruits; %><% String fruit; %></BODY>public class test_jsp extends HttpJspBase { String fruits; //<%! %>放在这儿 public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ........out.write("<BODY>\r\n"); out.write("\r\n"); String fruit; //<% %>放在了 _jspService()这个方法中,当然有区别了 out.write("\r\n"); }}当然,你可以在<%! %>中定义方法了:下面改一下页面:<BODY><%! String fruits; private int i; //定义了一个新的int %><%= i%><%! public void method() //声明了一个方法{ i = 1;}%><% String fruit; method(); //调用方法%><%= i%></BODY>发现这次页面上会print 0 1再看一下编译生成的.java文件:public class test_jsp extends HttpJspBase { String fruits; private int i; public void method() \\声明了方法{ i = 1;}public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {.... out.write("<BODY>\r\n"); out.write("\r\n"); out.print( i); out.write("\r\n"); out.write("\r\n"); String fruit; method(); out.write("\r\n"); out.print( i);.....}}现在你明白了吧 就像这段,没有!就会出错了。<%!public String getStr(String str){try{String temp_p=str;byte[] temp_t=temp_p.getBytes("ISO8859-1");String temp=new String(temp_t);return temp;}catch(Exception e){e.printStackTrace();}return "null";} <% %>是编写_jspService方法部分<%! %>是编写_jspService方法以外的部分 <%! %>中的变量是静态的。而<% %>中的变量是局部变量。 谢谢大家。还有就是useBean文件我放在了web/web-inf/classes/conn.class里面了,把conn.java也放进去了,可以调用时找不到包啊!~(虚拟目录为web,用的是tomcat5.0.14,jdk1.4)调用<jsp:useBean id="workM" scope="page" class="webconn.conn"/>conn.java源代码:package webconn;import java.sql.*;public class conn{Connection sqlConn=null;ResultSet rs=null;public conn(){try{Class.forName("org.gjt.mm.mysql.Driver");}catch(java.lang.ClassNotFoundException e){System.err.println("conn():"+e.getMessage());}}public ResultSet executeQuery(String sql){rs=null;try{sqlConn=DriverManager.getConnection("jdbc:mysql://localhost/bluecndb","admin","1346237");Statement sqlStmt=sqlConn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE);rs=sqlStmt.executeQuery(sql);}catch(SQLException ex){System.err.println("conn.executeQuery:"+ex.getMessage());}return rs;}} <%!%>全局变量.可以用于声明class,全局变量,方法。不管这个<%!%>在jsp中那个地方,她的作用域都是整个页面<%%>只是代码段,不能用来声明class,和方法! 求教JSP页面里删除按钮servlet的写法!!急求!!!! 急急急!!!jsp 的连接数据库问题 请问这个链接是什么意思 问一个Tomcat 的安全问题 请问JSP页面输入中文字体后,出现乱码~~ 过来帮帮忙,3q ^_^~~~~~~~~~~~~~~~~ 从零开始学JSP,如何配置阿? 为什么连不上?可能很简单,但我不会 中文函数类问题 实现微信扫描网页二维码,自动登录的问题 JSP简单的问题:Form中的提交的Propery Name的大小写问题?100分赠送!!! 我使用javabean,javabean如何编译
<%!声明 %>
《% 是原代码,
我记得在<% %>里声明的变量相当于全局变量
在<%! %>里声明的变量相当于局部变量
进一步怎么说我忘记了
你可以多看一下以前的贴子
《JSP程序设计》耿祥义编的这本书上好像有说明
如
<%
String str;
int i;
%>
<% %>可放入任何标准的java程序代码。
在
<%!
%>
中定义的变量是类似于成员属性的
而在
<%
%>
中定义的变量类似于临时变量这个一定要注意,没弄好的话容易出问题
给你看看下面的代码就知了:
<BODY>
<%! String fruits; %>
<% String fruit; %>
</BODY>
public class test_jsp extends HttpJspBase {
String fruits; //<%! %>放在这儿 public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
........
out.write("<BODY>\r\n");
out.write("\r\n");
String fruit; //<% %>放在了 _jspService()这个方法中,当然有区别了
out.write("\r\n");
}
}
当然,你可以在<%! %>中定义方法了:
下面改一下页面:
<BODY>
<%! String fruits;
private int i; //定义了一个新的int
%>
<%= i%>
<%! public void method() //声明了一个方法
{
i = 1;
}%>
<% String fruit;
method(); //调用方法
%>
<%= i%>
</BODY>
发现这次页面上会print
0 1再看一下编译生成的.java文件:
public class test_jsp extends HttpJspBase { String fruits;
private int i; public void method() \\声明了方法
{
i = 1;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
....
out.write("<BODY>\r\n");
out.write("\r\n");
out.print( i);
out.write("\r\n");
out.write("\r\n");
String fruit;
method();
out.write("\r\n");
out.print( i);
.....}
}
现在你明白了吧
<%!
public String getStr(String str){
try{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t);
return temp;
}
catch(Exception e){
e.printStackTrace();
}
return "null";
}
是编写_jspService方法部分
<%! %>
是编写_jspService方法以外的部分
把conn.java也放进去了,可以调用时找不到包啊!~(虚拟目录为web,用的是tomcat5.0.14,jdk1.4)
调用<jsp:useBean id="workM" scope="page" class="webconn.conn"/>
conn.java源代码:
package webconn;
import java.sql.*;
public class conn{
Connection sqlConn=null;
ResultSet rs=null;
public conn(){
try{
Class.forName("org.gjt.mm.mysql.Driver");
}
catch(java.lang.ClassNotFoundException e){
System.err.println("conn():"+e.getMessage());
}
}
public ResultSet executeQuery(String sql){
rs=null;
try{
sqlConn=DriverManager.getConnection("jdbc:mysql://localhost/bluecndb","admin","1346237");
Statement sqlStmt=sqlConn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE);
rs=sqlStmt.executeQuery(sql);
}
catch(SQLException ex){
System.err.println("conn.executeQuery:"+ex.getMessage());
}
return rs;
}
}
不管这个<%!%>在jsp中那个地方,她的作用域都是整个页面
<%%>只是代码段,不能用来声明class,和方法!