说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请问<%与<%!有没有区别??

编辑:说三道四文库 发布时间:2018-05-23 05:33
HTML文档下载 WORD文档下载 PDF文档下载
再问一下BEAN文件具体放到哪里?
我的虚拟目录是:web
是不是这样放: web/WEB-INF/classes/*.class

还有:
<%与<%!有没有区别??

TANKS!~
<% is script segment
<%! is declaration
<%  代码 %>
<%!声明 %>
<%! 主要是用来声明变量的 在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,和方法!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘