<jsp:useBean id=”myclassname” scope=”page” class=”Class1” type="Object"/ >type="Object"我只这样用过Class1 myclassname=new Class1(); 
scope说明这个对象的生存期只在本页有效一但出了本页对象就销毁了scope还有session/applicationscope="session"时相当于  session.setAttribute("myclassname",myclassname);

解决方案 »

  1.   

    不好意思,我的问题没写完整<jsp:useBean> 它用来实例化JavaBean,或者定位一个已经存在的Bean实例,并且把它赋给一个变量名(或者id)。并给定一个具体的范围来确定对象的生命周期。 <jsp:useBean id=”myclassname” scope=”page” class=”Class1” type=”Class2”/ > 等价于:Class2 myclassname=new Class1(); 在这段话中,定位一个已经存在的Bean实例  是什么意思?  当实例化一个类的时候,会调用其构造函数,那么当   定位一个已经存在的Bean实例 的时候,它还会不会调用构造函数了呢??谢谢!!
      

  2.   

    你指向已经定义的一个Bean的实例时,这个Bean在实例化这个实例时,不是已经调用了它的构造函数了嘛。
    你定位一个已经存在的Bean的实例时,它内在的机制是直接指向那个实例,不会再调用其构造函数了的。它只要检测与本身对象是不是extends关系
      

  3.   

    那就是说 定位一个已经存在的Bean的实例时 不调用构造函数了,那下面的两个.jsp文件中,我有个问题:
    index.jsp:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ page import="java.sql.*"%><html>
      <head>
            
        <title>My JSP 'index.jsp' starting page</title>
        
          </head>
      
      <body>
      <jsp:useBean id="dbCon" class="com.hh.javabean.DBConn" scope="session"/>
      <%
      String username=request.getParameter("txtUserName");
      String password=request.getParameter("txtPassword");
      if(username!=null&&username.length()>0)
      {
       //Class.forName("oracle.jdbc.driver.OracleDriver");
      //Connection con=DriverManager.getConnection("jdbc:oracle:thin:@ccc231:1521:myoracle","system","ljb1225");
      Connection con=dbCon.getConnection();
      String sql="select * from login where username=? and password=?";
      PreparedStatement ps=con.prepareStatement(sql);
      ps.setString(1,username);
      ps.setString(2,password);
      ResultSet rs=ps.executeQuery();
      if(rs.next())
      {
        session.setAttribute("passok",username);
       response.sendRedirect("control.jsp");
     
      }
      else
      {
      %>
      <script>alert("闈炴硶鐢ㄦ埛锛?);history.back();</script>
      <%
      }
      }
      %>
       <form action="index.jsp" method="post">
       鐢ㄦ埛鍚嶏細<input type="text" name="txtUserName">瀵嗙爜锛?input type="password" name="txtPassword">
       <input type="submit" value="鐧诲綍">
       
       </form>
       <a href="reg.jsp">娉ㄥ唽</a>
      </body>
    </html>
    reg.jsp:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ page import="java.sql.*"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'reg.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
      
      <body>
      <jsp:useBean id="dbCon" class="com.hh.javabean.DBConn" scope="session"/>
      <%
      String username=request.getParameter("txtUserName");
      String password=request.getParameter("txtPassword");
      if(username!=null&&username.length()>0)
      {
     // Class.forName("oracle.jdbc.driver.OracleDriver");
      //Connection con=DriverManager.getConnection("jdbc:oracle:thin:@ccc231:1521:myoracle","system","ljb1225");
      Connection con=dbCon.getConnection();
      String sql="insert into login values(?,?)";
      PreparedStatement ps=con.prepareStatement(sql);
       ps.setString(1,username);
       ps.setString(2,password);
       int rows=ps.executeUpdate();
       ps.close();
       con.close();
       if(rows>0)
       {
       response.sendRedirect("index.jsp");
       }
       else
       {
       %>
       <script>alert("insert error!");history.back();</script>
       <%
       }
      }
      %>
    <form action="reg.jsp" method="post">
    <table align="center" border=1>
    <tr><td>鐢ㄦ埛鍚嶏細</td><td><input type="text" size="20" name="txtUserName"></td></tr>
    <tr><td>瀵嗙爜锛?/td><td><input type="password" name="txtPassword"></td></tr>
    <tr><td colspan="2" align="center"><input type="submit" value="娉ㄥ唽"></td></tr>
    </table>
    </form>
    </form>
      </body>
    </html>DBConn.java:
    package com.hh.javabean;
    import java.sql.*;
    public class DBConn 
    {
    public DBConn()
    {
    try
    {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    }
    catch(Exception e)
    {
    System.out.println(e.getMessage());
    }
    }
    public Connection getConnection()
    {
    Connection con=null;
    try
    {
    con=DriverManager.getConnection("jdbc:oracle:thin:@ccc231:1521:myoracle","system","ljb1225");
    }
    catch(Exception e)
    {
    System.out.println(e);
    }
    return con;

    }
    }当第一次运行index.jsp时,实例化了一个DBConn的对象,此时会调用DBConn中的构造函数,也就执行了 Class.forName("oracle.jdbc.driver.OracleDriver");这条语句,接着运行reg.jsp文件时,因为已经存在了DBConn的实例了,所以就不调用构造函数了,那么也就不会执行 Class.forName("oracle.jdbc.driver.OracleDriver");这条语句了呀,那也就是在reg.jsp中没有注册连接数据库的驱动程序的语句了,那reg.jsp不就有错了,可是文件运行是正常的,没产生错误,这是为什么呢?
     感激回复!!
      

  4.   

    <jsp:useBean id="dbCon" class="com.hh.javabean.DBConn" scope="session"/>
    你的数据连接对象保存的范围是session,老大。你要换个page试试看看,会不会运行正常。
      

  5.   

    不管换什么都运行正常。---------------
    正是因为:
    <jsp:useBean> 它用来实例化JavaBean,或者定位一个已经存在的Bean实例因为已经存在了DBConn的实例了,所以就不调用构造函数了,那么也就不会执行 Class.forName("oracle.jdbc.driver.OracleDriver");这条语句了呀,那也就是在reg.jsp中没有注册连接数据库的驱动程序的语句了---------------
    我都有DBConn的实例了,还管你执不执行Class.forName,
    掌握知识要靠理解呀~~
      

  6.   

    <jsp:useBean id=”myclassname” scope=”page” class=”Class1” type=”Class2”/ >
    你的scope="page",所以每次加载该页面都会调用Class1的构造函数进行初始化操作;
    如果scope=“session”或者是“request”,那么如果已经存在myclassname,则不调用Class1的构造函数了,如果不存在myclassname,则调用Class1的构造函数;
    所以<jsp:userBean scope="page">每次加载这个页面都要调用构造函数的。