<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);
scope说明这个对象的生存期只在本页有效一但出了本页对象就销毁了scope还有session/applicationscope="session"时相当于 session.setAttribute("myclassname",myclassname);
你定位一个已经存在的Bean的实例时,它内在的机制是直接指向那个实例,不会再调用其构造函数了的。它只要检测与本身对象是不是extends关系
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不就有错了,可是文件运行是正常的,没产生错误,这是为什么呢?
感激回复!!
你的数据连接对象保存的范围是session,老大。你要换个page试试看看,会不会运行正常。
正是因为:
<jsp:useBean> 它用来实例化JavaBean,或者定位一个已经存在的Bean实例因为已经存在了DBConn的实例了,所以就不调用构造函数了,那么也就不会执行 Class.forName("oracle.jdbc.driver.OracleDriver");这条语句了呀,那也就是在reg.jsp中没有注册连接数据库的驱动程序的语句了---------------
我都有DBConn的实例了,还管你执不执行Class.forName,
掌握知识要靠理解呀~~
你的scope="page",所以每次加载该页面都会调用Class1的构造函数进行初始化操作;
如果scope=“session”或者是“request”,那么如果已经存在myclassname,则不调用Class1的构造函数了,如果不存在myclassname,则调用Class1的构造函数;
所以<jsp:userBean scope="page">每次加载这个页面都要调用构造函数的。