下拉列表动态关联更新

bywzy 发表于 程序设计 分类,
0

下拉列表动态关联更新
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GB2312">
</head>

<body>
<h2 align=center>動態下拉式選單:三框連動(三層樹狀選項)</h2>
<hr>

<script>
function category(name, itemList){
this.name=name;
this.itemList=itemList;
}

function dataHierarchy(){
//國語歌手
var mandarin=new Array();
var i=0;
mandarin[i++]=new category("張學友", ["我等到花而也謝了", "一千個傷心的理由", "咖啡"]);
mandarin[i++]=new category("張惠妹", ["聽海", "剪愛", "原來你什麼都不要", "三天三夜"]);
mandarin[i++]=new category("劉德華", ["謝謝你的愛", "來生緣", "忘情水"]);
mandarin[i++]=new category(  "伍佰", ["浪人情歌", "樹枝孤鳥"]);
mandarin[i++]=new category("周華健", ["花心", "心的方向"]);
//英語歌手
var english=new Array();
var i=0;
english[i++]=new category("Jackson", ["Beat It", "Billie Jean", "Heal The World"]);
english[i++]=new category("Celindion", ["My Heart Will Go On", "Hope"]);

//
var chinese=new Array();
var i=0;
chinese[i++]=new category("王珍亚", ["什么", "哦", "Heal The World"]);
chinese[i++]=new category("王译", ["可贵", "Hope"]);

var output=new Array();
i=0;
output[i++]=new category("國語", mandarin);
output[i++]=new category("英語", english);
output[i++]=new category("中語", chinese);

return(output);
}
dataTree=dataHierarchy();

function onChangeColumn3(){
updatePath();
}

function onChangeColumn2(){
form=document.theForm;
index1=form.column1.selectedIndex;
index2=form.column2.selectedIndex;
index3=form.column3.selectedIndex;
// Create options for column 3
for (i=0;i<dataTree[index1].itemList[index2].itemList.length;i++)
  form.column3.options=new Option(dataTree[index1].itemList[index2].itemList, dataTree[index1].itemList[index2].itemList);
form.column3.options.length=dataTree[index1].itemList[index2].itemList.length;
updatePath();
}

function onChangeColumn1() {
form=document.theForm;
index1=form.column1.selectedIndex;
index2=form.column2.selectedIndex;
index3=form.column3.selectedIndex;
// Create options for column 2
for (i=0;i<dataTree[index1].itemList.length;i++)
  form.column2.options=new Option(dataTree[index1].itemList.name, dataTree[index1].itemList.name);
form.column2.options.length=dataTree[index1].itemList.length;
// Clear column 3
form.column3.options.length=0;
updatePath();
}

function updatePath(){
form=document.theForm;
index1=form.column1.selectedIndex;
index2=form.column2.selectedIndex;
index3=form.column3.selectedIndex;
if ((index1>=0) && (index2>=0) && (index3>=0)) {
  text1=form.column1.options[index1].text;
  text2=form.column2.options[index2].text;
  text3=form.column3.options[index3].text;
  form.path.value=text1+" ==> "+text2+" ==> "+text3;
} else
  form.path.value="";
}
</script>

<form name="theForm">
<table align=center border=1>
<tr>
  <th>歌曲語言<th>歌星名字<th>歌曲清單
<tr>
  <td align=center>
   <select name="column1" size=1 onChange="onChangeColumn1();">
    <script>
    for (i=0; i<dataTree.length; i++)
     document.writeln("<option value=\""+dataTree.name+"\">"+dataTree.name);
    </script>
   </select>
  <td align=center>
   <select name="column2" size=1 onChange="onChangeColumn2();">
   </select>
  <td align=center>
   <select name="column3" size=1 onChange="onChangeColumn3();">
   </select>
<tr><td colspan=3 align=center>路徑:<input type=text name=path size=60></td></tr>
</table>
</form>

<hr>
</body>
</html>

CxGrid用法

bywzy 发表于 程序设计 分类,
0

CxGrid用法- -

使用cxGrid有一些时间了,在这里总结一下使用cxGrid的一些方法,希望给刚开始接触cxGrid的人一些帮助。

1.简单介绍:cxGrid右下方的cxGrid1Level1是表示Grid表的层,cxGrid可以有多层,这相当于集合了PageControl的

功能,而cxGrid1Level1右边的cxGrid1DBTableView1相当于DBGrid一样。右击cxGrid1可以添加cxGrid1Level2,右击

cxGrid1Level2,可以选择Create View , Add level 或者Delete Level。Add level可以增加子Level,Create View

里面可以选择很多不同总类的View。其中
  1)DB Table可以和数据库连接的View,更一般的DBGrid类似,它比DBGrid多了比如鼠标中键可以用,可以统计,

查询,等等功能;
  2)DB Banded Table 则可以实现比如:
                    ———————————
                    |     说明1     |     说明2     |
                    ———————————
                    | 字段1 | 字段2 | 字段3 | 字段4 |
等类似的功能;
  3)DB Card View 则提供了卡片方式的显示数据的功能,这个用在比如人事档案管理比较不错;
  4)其它不一一赘述。

2.一些使用方法:
  1)有图片和MEMO的例子:
    拖入一个cxGrid1,Table1,DataSource1。 Table1的DatabaseName设为DBDEMOS,TableName设为biolife.db,

   Active设为True;DataSource1的DataSet设为Table1;cxGrid1DBTableView1的DataController中的DataSource  

   设为DataSource1;右击cxGrid1DBTableView1选择Create All Columns;双击cxGrid1,在弹出的窗口中找到    

  cxGrid1DBTableView1Notes和cxGrid1DBTableView1Graphic,将它们的Properties属性设为BlobEdit;运行看看  

  结果。再将cxGrid1DBTableView1Graphic的Properties属性设为Image,再将Properties下的Stretch设为True,  

  将cxGrid1DBTableView1->optionsview->CellAutoHeight 设为True,看看结果。


  2)如何让“Drag a column here to group by that column”不显示
    解决:点击cxGrid1上的cxGrid1DBTableView1
    在cxGrid1DBTableView1->optionsview->groupbybox:=false即可  
    注:OptionsView里面有很多属性可能经常要用,比如:ColumnAutoWith,Navigator等等,慢慢琢磨吧:)
    
  3)GroupPanel上面的英文[Drag a column header to group by that column]怎么可以改成中文?
    解决:最简单的方法是 TcxGridTableView.OnCustomDrawPartBackground ,也可用 OnCustomDrawGroupCell:

    procedure TForm1.cxGrid1DBTableView1CustomDrawPartBackground(
               Sender: TcxGridTableView; ACanvas: TcxCanvas;
              AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean);
    begin
      AViewInfo.Text:='动态设置 GroupBox 的显示内容';
      ACanvas.FillRect(AViewInfo.Bounds);
    end;

  4)如何实现如下功能:
           +财务部
           +原材料仓库
           +成品库
           +冲压车间
           +软件开发部
    这个是部门的名称,点击加号就可以将本部门的人员情况显示出来。
    解决:其实这是一个主从表关系,1:填好主表的keyfieldnames
                                  2:填好从表的keyfieldnames
                                  3:填好从表的 detaikeyfieldNames与masterkeyfieldnames
                                  4: 从表的数据源一定要按与主表关联的字段排序
   注:其它地方设置了主从表结构那样就显示不出来,比如设置了从表的Table或者Query的mastersource和
   asterfield就会不能显示数据!如果是两个cxGrid的主从关系,这样设置就很OK了。

  
5)统计功能
   解决:cxGrid1DBTableView1->optionsview->Footer 设为True
         cxGrid1DBTableView1->DataController->Summary设置FooterSummaryItems即可  

6)类似PageControl显示
   解决:增加一个Level,将cxGrid1->RootLevelOptions->DetailTabsPosition设为dtpTop,然后相应的设置cxGrid1Level1,和cxGrid1Level2的Caption值。

  未完待续。。。。。。。。。  


7)如何设定左边几列,不能滚动?
   解决:使用DB Banded Table才可以实现,
         在cxGrid1DBBandedTableView里建立Band0,Band1
         Band0的Fixed=tfLeft
         Band1的Fixed=tfnone
         设置要锁定的字段的BandIndex=0,其它为1,就OK了。  

8)怎样实现如EXCEL一样的,当前格=G14+G15+G16 这样的功能
   解决:举一个简单的例子:label1.Caption := cxGrid1DBTableView1.DataController.values[2,

3]+cxGrid1DBTableView2.DataController.values[1, 1]+cxGrid1DBTableView3.DataController.values[1, 1];
所以不同cxGrid1DBTableView中的数据都可以给当前格,这样就做到了EXCEL中的当前格=G14+G15+G16 类似的功能。

9)鼠标右击cxGrid1DBBandedTableView1菜单里的Edit Layout什么用,怎么使用?
   解决:可以拖动字段,并列的可以拖成有层次感(一层层), 拖动时会显示箭头的,就是说可以拖一个字段放

到最上面,就可以使记录按此字段进行分组。点击其中一个字段,上面还会出现一个上升或者下降的小三角形,这个

小三角形的作用是在运行阶段,数据就会按照这个字段上升或者下降排序。
    还有一个Set as Default的作用是保持当前TableView的参数,下此产生新的TableView的时候就会可以和上次保持的参数一样。这个还没有做过试验。


10)怎样将cxGrid里的数据导入到EXCEL,HTML,XML和TEXT
  解决:这个问题在用了cxGrid

用ASP生成二维饼图

bywzy 发表于 程序设计 分类,
0

<%@ Language=VBscript %>
  <HTML>
  <HEAD>
  <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
  </HEAD>
  <BODY>
  <OBJECT classid="clsid:3A2B370C-BA0A-11D1-B137-0000F8753F5D"
  id=MSChart1 style="LEFT: 0px; TOP: 0px" VIEWASTEXT height=300 width=300></OBJECT>
  <script LANGUAGE="VBscript">
  <%
  Set objConn = Server.CreateObject("ADODB.Connection")
  objconn.ConnectionString = "DSN=AdvWorks"
  objConn.Open
  Set objRS = Server.CreateObject("ADODB.Recordset")
  objRS.ActiveConnection = objConn
  objRS.CursorLocation = 3
  objRS.Open("select orderDetailID,UnitPrice from order_Details")
  i=1
  Response.Write "Const num = " & objrs.RecordCount & vbCr
  Response.Write "Dim ID(" & objrs.RecordCount & ")" & vbCr
  Response.Write "Dim Details(" & objrs.RecordCount & ")" & vbCr
  Do While Not objRS.EOF
      Response.Write("ID(" & i & ")=""" & objRS(0) & """" & Chr(13))
      Response.Write("Details(" & i & ")=""" & objRS(1) & """" & Chr(13))
      i=i+1
     objRS.MoveNext
  Loop
  %>
  MSChart1.TitleText  = "Example"
  MSChart1.RowCount = 1
  MSChart1.ColumnCount = num
  for i = 1 to num
      MSChart1.Column = i
      MSChart1.ColumnLabel = ID(i)
  next
  MSChart1.chartType = 14 '14是二维饼图,拟合曲线我还不知道怎么画
  MSChart1.ShowLegend = True
  MSChart1.ChartData = Details
  </script> 
  </BODY>
  </HTML>

ASP实例–6行代码实现无组件上传

bywzy 发表于 程序设计 分类,
0

   目前有很多无组件上传类,我大概看了一下,大多写的相当复杂,有的居然还只能传文本
  最关键的是没有10行代码以下的 :)
  我花了一个晚上时间研究了一下ADODB.Stream,并且用了6行代码实现了无组件上传:

  strFileName = Request.QueryString("file1")
  Set objstream = Server.CreateObject("ADODB.Stream")
  objstream.Type = 1 ' adTypeBinary
  objstream.Open
  objstream.LoadFromFile strFileName
  objstream.SaveToFile Server."123_onweb.gif",2

  使用方法:

  把上面的代码写成upload.asp
  在浏览器里面输入:
  http://XXX/upload.asp?file1=c:\上传文件\123.gif
  XXX为你的主机地址
  执行完后你会看到你的目录下面多了一个123_onweb.gif
  他就是你要文件拉!!!!

  根据原理我们可以扩展以下代码:
  upload.asp文件
  <%
  Function GetFileName(ByVal strFile)
  If strFile <> "" Then
   GetFileName = mid(strFile,InStrRev(strFile, "\")+1)
  Else
   GetFileName = ""
  End If
  End  function

  strFileName = Request.Form("file1")
  Set objstream = Server.CreateObject("ADODB.Stream")
  objstream.Type = 1 ' adTypeBinary
  objstream.Open
  objstream.LoadFromFile strFileName
  objstream.SaveToFile Server.MapPath(GetFileName(strFileName)),2
  objstream.Close
  %>

  upload.htm文件
  <form name="FORM" action="upload.asp" method="post">
  <input type="submit" name="submit" value="OK">
     <input type="file" name="file1" style="width:400"  value="">
  </form

JSP 连接各类数据库大全(Oracle,MSSQL,DB2,Informix,SyBASE,MYS

bywzy 发表于 程序设计 分类,
0

JSP 连接各类数据库大全(Oracle,MSSQL,DB2,Informix,SyBASE,MYS
jsP 连接各类数据库大全(Oracle,MSSQL,DB2,Informix,SyBASE,MYSQL,PostgreSQL)
现在有好多初学jsp的网友经常会问数据库怎么连接啊,怎么老出错啊?所以我集中的在这写篇文章供大家参考,其实这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学者学习,所以我就这样做了,当大家学到一定程度的时候,可以考虑用MVC的模式开发。在练习这些代码的时候,你一定将jdbc的驱动程序放到服务器的类路径里,然后要在数据库里建一个表test,有两个字段比如为test1,test2,可以用下面SQL建
  create table test(test1 varchar(20),test2 varchar(20)
然后向这个表写入一条测试纪录,那么现在开始我们的jsp和数据库之旅吧。

一、jsp连接Oracle8/8i/9i数据库(用thin模式)
  testoracle.jsp如下:
  <%@ page contentType="text/html;charset=gb2312"%>
  <%@ page import="java.sql.*"%>
  <html>
  <body>
  <%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
  String url="jdbc:oracle:thin:@localhost:1521:orcl";
  //orcl为你的数据库的SID
  String user="scott";
  String password="tiger";
  Connection conn= DriverManager.getConnection(url,user,password);
  Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  String sql="select * from test";
  ResultSet rs=stmt.executeQuery(sql);
  while(rs.next()) {%>
  您的第一个字段内容为:<%=rs.getString(1)%>
  您的第二个字段内容为:<%=rs.getString(2)%>
  <%}%>
  <%out.print("数据库操作成功,恭喜你");%>
  <%rs.close();
  stmt.close();
  conn.close();
  %>
  </body>
  </html>


二、jsp连接Sql Server7.0/2000数据库
  testsqlserver.jsp如下:
  <%@ page contentType="text/html;charset=gb2312"%>
  <%@ page import="java.sql.*"%>
  <html>
  <body>
  <%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
  String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
  //pubs为你的数据库的
  String user="sa";
  String password="";
  
  Connection conn= DriverManager.getConnection(url,user,password);
  Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  String sql="select * from test";
  ResultSet rs=stmt.executeQuery(sql);
  while(rs.next()) {%>
  您的第一个字段内容为:<%=rs.getString(1)%>
  您的第二个字段内容为:<%=rs.getString(2)%>
  <%}%>
  <%out.print("数据库操作成功,恭喜你");%>
  <%rs.close();
  stmt.close();
  conn.close();
  
  %>
  </body>
  </html>


三、jsp连接DB2数据库
  testdb2.jsp如下:
  <%@ page contentType="text/html;charset=gb2312"%>
  <%@ page import="java.sql.*"%>
  <html>
  <body>
  <%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
  String url="jdbc:db2://localhost:5000/sample";
  //sample为你的数据库名
  String user="admin";
  String password="";
  Connection conn= DriverManager.getConnection(url,user,password);
  Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  String sql="select * from test";
  ResultSet rs=stmt.executeQuery(sql);
  while(rs.next()) {%>
  您的第一个字段内容为:<%=rs.getString(1)%>
  您的第二个字段内容为:<%=rs.getString(2)%>
  <%}%>
  <%out.print("数据库操作成功,恭喜你");%>
  <%rs.close();
  stmt.close();
  conn.close();
  %>
  </body>
  </html>

四、jsp连接Informix数据库
  testinformix.jsp如下:
  <%@ page contentType="text/html;charset=gb2312"%>
  <%@ page import="java.sql.*"%>
  <html>
  <body>
  <%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
  String url =
  "jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
  user=testuser;password=testpassword";
  //testDB为你的数据库名
  Connection conn= DriverManager.getConnection(url);
  Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  String sql="select * from test";
  ResultSet rs=stmt.executeQuery(sql);
  while(rs.next()) {%>
  您的第一个字段内容为:<%=rs.getString(1)%>
  您的第二个字段内容为:<%=rs.getString(2)%>
  <%}%>
  <%out.print("数据库操作成功,恭喜你");%>
  <%rs.close();
  stmt.close();
  conn.close();
  %>
  </body>
  </html>

五、jsp连接Sybase数据库
  testmysql.jsp如下:
  <%@ page contentType="text/html;charset=gb2312"%>
  <%@ page import="java.sql.*"%>
  <html>
  <body>
  <%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
  String url =" jdbc:sybase:Tds:localhost:5007/tsdata";
  //tsdata为你的数据库名
  Properties sysProps = System.getProperties();
  SysProps.put("user","userid");
  SysProps.put("password","user_password");
  Connection conn= DriverManager.getConnection(url, SysProps);
  Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  String sql="select * from test";
  ResultSet rs=stmt.executeQuery(sql);
  while(rs.next()) {%>
  您的第一个字段内容为:<%=rs.getString(1)%>
  您的第二个字段内容为:<%=rs.getString(2)%>
  <%}%>
  <%out.print("数据库操作成功,恭喜你");%>
  <%rs.close();
  stmt.close();
  conn.close();
  %>
  </body>
  </html>
六、jsp连接MySQL数据库
  testmysql.jsp如下:
  <%@ page contentType="text/html;charset=gb2312"%>
  <%@ page import="java.sql.*"%>
  <html>
  <body>
  <%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
  String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
  //testDB为你的数据库名
  Connection conn= DriverManager.getConnection(url);
  Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  String sql="select * from test";
  ResultSet rs=stmt.executeQuery(sql);
  while(rs.next()) {%>
  您的第一个

jsp系列学习:jsp与javaBean的使用,用javaBean来封装数据逻辑操作

bywzy 发表于 程序设计 分类,
0

上篇我跟大家讲了如何配置学习jsp的环境,本篇我带大家一起来学习写jsp程序,
学习本篇的前提是你的j2sdk和tomcat5都安装成功,并且运行无误下.
首先可以跟大家讲讲jsp中需要注意的地方:
1. jsp是大小写敏感的,用过其他编程语言的人最容易犯这个错误,所以请多加小心。

2. java的调用过程都是要加括号的,一开始比较容易忽视,如Username=request.getParameter("Username").trim();我记得在delphi中就很自由,大小写无所谓。现在就惨了,经常出这小错误^-^
3.其它的地方请多看看专业书,每本书出版都有值得学习的地方的。

实际上本篇最好在读者能学过几天jsp知识,至少要求了解jsp的语法,
如:在jsp声名变量: String CName= new String("中国人");

要不的话你学过像asp,php这些也行。

在传统asp,php开发中,任何的操作一般都是直接写html写在一起,不仅混杂难看,也不易于后期的维护.自从javaBean出来以后,从此改变了这一命运,我们已经可以实现前后台分离,把复杂的,可共用的操作全部移交给javaBean来实现。

jsp作为一个很好的动态网站开发语言得到了越来越广泛的应用,在各类jsp应用程序中,jsp + JavaBean的组合成为了一种事实上最常见的jsp程序的标准,现在我们就来开始学习jsp如何调用javaBean.

首先你要理解什么是javaBean:
JavaBean是描述Java的软件组件模型,有点类似于Microsoft的COM组件概念。在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。

  JavaBean通过Java虚拟机(Java Virtual Machine)可以得到正确的执行,运行JavaBean最小的需求是JDK1.1或者以上的版本。

  JavaBean传统的应用在于可视化的领域,如AWT下的应用。自从jsp诞生后,JavaBean更多的应用在了非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。在这里我们主要讨论的是非可视化的JavaBean,可视化的JavaBean在市面上有很多Java书籍都有详细的阐述,在这里就不作为重点了。

在理解了上面的内容后,下面我们就来把jsp中与数据库的操作全部封装在javaBean中。

程序如下:(可用记事本)
/*注意: 我们在这里用的是与ms sqlserver 2000的连接方式,请选安装sqlserver 2000 for jdbc的驱动
下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=86212d54-8488-481d-b46b-af29bb18e1e5&DisplayLang=en
*/
package SqlConn;
import java.sql.*;
import java.lang.*;
import java.util.*;

public class Conn
{
   String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
   String sConnStr ="jdbc:microsoft:sqlserver://你的IP:1433;DatabaseName=MyData;user=sa;password=1234";
  /*上面记得改为:DatabaseName=你的数据库名,user=用户名,password=密码*/
   Connection conn=null;
   ResultSet rs=null;
   public Conn()
   {
      try {
       Class.forName(sDBDriver);
      }
      catch(ClassNotFoundException e)
      {
       System.out.println("无法建立数据库连接!:"+e.getMessage());
      }
    }
  
   public void executeUpdate(String sql) throws Exception
   {
     sql= new String(sql.getBytes("GBK"),"ISO8859_1");
     try
     {
      conn= DriverManager.getConnection(sConnStr);
      Statement stmt=conn.createStatement();
      stmt.executeUpdate(sql);
      conn.close();
      stmt.close();
     }
     catch(SQLException ex)
     {
      System.out.println("更新数据操作失败!"+ex.getMessage());
     }
   }
  
   public ResultSet executeQuery(String sql) throws Exception
   {
    rs = null;
    try
    {
     sql= new String(sql.getBytes("GBK"),"ISO8859_1");
     conn= DriverManager.getConnection(sConnStr);
     Statement stmt=conn.createStatement();
     rs=stmt.executeQuery(sql);
     conn.close();
     stmt.close();
    }
    catch(SQLException ex)
    {
       System.out.println("执行查询出错!"+ex.getMessage());
        
        }
        
        return rs;
   }
}
假设我们的虚拟目录是在tomcat的myapp目录下,
然后,再存为Conn.java.
在命令行下用javac编译: javac Conn.java.
然后,会生成一个目录SqlConn,下面有Conn.class;
***说明: 第一行package表示包,即Conn是属于SqlConn包的,Conn.java就是我们的Bean了。Conn.class
这个Bean以后我们在jsp页面中就可以这样调用了:
<jsp:useBean id="Conn" scope="page" class="SqlConn.Conn"/>

id:表示在jsp页面中使用的Bean对应的名称,scope表示权限是在本页内,class 表示是来自SqlConn包下面的Conn.class这个Bean.


上面我们把基本的操作写在了javaBean中,下面我们给出一个完整的调用页面,存为index.jsp.

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.sql.*" %>
<jsp:useBean id="Conn" scope="page" class="SqlConn.Conn"/>
<%
  String uname= request.getParameter("username");
  String pwd= request.getParameter("passwd");
  if (uname.length()!=0)   //表示点了登录来的
  {
    if (pwd.length()==0)
    {
out.println ("<script language=javascript>alert('密码不能为空');javascript:history.back();</script>");
    }
    else
    {
     ResultSet rt=Conn.executeQuery("select username from [sysuser] where username='"+uname+"' and pwd='"+pwd+"'" );   //我们这里连接的是Sqlserver数据库,sysuser是其中的一个表,
     if (!rt.next())
       {
         out.println("用户名密码错误");
         }
     &nb
sp;else
           {
            out.println("登录成功!");
           }
    }
   }

%>

<html>
<head></head>
<body>

<FORM action=index.jsp method=POST>
<table>
<tr>
<td>用户名:</td><td><input type="text" name="username" size="16"></td>
</tr>
<tr>
<td>密 码:</td><td><input type="text" name="passwd" size="16"></td>
</tr>
<tr>
<td></td><td><input type="submit" name="btn1" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>

好了,从现在开始,我们已经会使用javaBean了,也没有别人说的那么难吧,你说呢?
其实学习任何一门语言,都是没有技巧可言,有的也只是前人所留的心得,以及通过我们不断的学习,Coding…Coding..再Coding, 通过不断的写,写,写,几个月之后,你会发现原来自已早已成为jsp高手。

轮换广告代码加演示[JavaScript实现]

bywzy 发表于 程序设计 分类,
0


演示效果:http://www.webjx.com/htmldata/2005-11-26/test.html

<script LANGUAGE="javascript">
<!–
var cpAD=new Array();
var cpADlink=new Array();
var cpADmsg=new Array();
//定义了5个数组
var adNum=5;
var coll=0;

//ad/1.html 那时你链接的广告地址

cpAD[0]="banners/mba.gif";
cpADlink[0]="ad/1.html";
cpADmsg[0]="1";

cpAD[1]="banners/google.gif";
cpADlink[1]="ad/2.html"
cpADmsg[1]="2";

cpAD[2]="banners/2005.gif";
cpADlink[2]="ad/3.html";
cpADmsg[2]="3";

cpAD[3]="banners/cz8y.gif";
cpADlink[3]="ad/4.html";
cpADmsg[3]="4";

cpAD[4]="banners/JG_YUEDU.gif";
cpADlink[4]="ad/5.html";
cpADmsg[4]="5";

var preloadedimages=new Array();
for (i=1;i<cpAD.length;i++){
preloadedimages=new Image();
preloadedimages.src=cpAD;
}

//跳转的URL地址
function jump2url()
{
jumpUrl=cpADlink[adNum];
jumpTarget='_blank';
if (jumpUrl != '')
{
        if (jumpTarget != '')
                window.open(jumpUrl,jumpTarget);
        else location.href=jumpUrl;
        }
}

//图片变化的函数
function changeimg(n)
{
        adNum=n;
        switch(adNum)
        {
        case 0:
        {
                window.img1.src="banners/1-2.gif";
                window.img2.src="banners/2.gif";
                window.img3.src="banners/3.gif";
                window.img4.src="banners/4.gif";
                window.img5.src="banners/5.gif";
                break;
        }
        case 1:
        {
                window.img1.src="banners/1.gif";
                window.img2.src="banners/2-2.gif";
                window.img3.src="banners/3.gif";
                window.img4.src="banners/4.gif";
                window.img5.src="banners/5.gif";
                break;
        }
        case 2:
        {
                window.img1.src="banners/1.gif";
                window.img2.src="banners/2.gif";
                window.img3.src="banners/3-2.gif";
                window.img4.src="banners/4.gif";
                window.img5.src="banners/5.gif";
                break;
        }
                case 3:
        {
                window.img1.src="banners/1.gif";
                window.img2.src="banners/2.gif";
                window.img3.src="banners/3.gif";
                window.img4.src="banners/4-2.gif";
                window.img5.src="banners/5.gif";
                break;
        }
                case 4:
        {
                window.img1.src="banners/1.gif";
                window.img2.src="banners/2.gif";
                window.img3.src="banners/3.gif";
                window.img4.src="banners/4.gif";
                window.img5.src="banners/5-2.gif";
                break;
        }
        }
        window.clearInterval(theTimer);
        adNum=adNum-1;
        nextAd();
}
//当点击时直接跳转
function nextAd(){
coll++;
if(coll>1)
{
switch(adNum+1)
{
        case 5:
        {
                window.img1.src="banners/1-2.gif";
                window.img2.src="banners/2.gif";
                window.img3.src="banners/3.gif";
                window.img4.src="banners/4.gif";
                window.img5.src="banners/5.gif";
        &nb
sp;       break;
        }
        case 1:
        {
                window.img1.src="banners/1.gif";
                window.img2.src="banners/2-2.gif";
                window.img3.src="banners/3.gif";
                window.img4.src="banners/4.gif";
                window.img5.src="banners/5.gif";
                break;
        }
        case 2:
        {
                window.img1.src="banners/1.gif";
                window.img2.src="banners/2.gif";
                window.img3.src="banners/3-2.gif";
                window.img4.src="banners/4.gif";
                window.img5.src="banners/5.gif";
                break;
        }
        case 3:
        {
                window.img1.src="banners/1.gif";
                window.img2.src="banners/2.gif";
                window.img3.src="banners/3.gif";
                window.img4.src="banners/4-2.gif";
                window.img5.src="banners/5.gif";
                break;
        }
    case 4:
        {
                window.img1.src="banners/1.gif";
                window.img2.src="banners/2.gif";
                window.img3.src="banners/3.gif";
                window.img4.src="banners/4.gif";
                window.img5.src="banners/5-2.gif";
                break;
        }
}
}
if(adNum<cpAD.length-1)adNum++  
else adNum=0;
setTransition();
document.images.cpADrush.src=cpAD[adNum];
playTransition();
displayStatusMsg();
//定义了轮换时间 5s
theTimer=setTimeout("nextAd()", 5000);
}

function setTransition(){
if (document.all){
cpADrush.filters.revealTrans.Transition=23;
cpADrush.filters.revealTrans.apply();
}

}
function playTransition(){
if (document.all)
cpADrush.filters.revealTrans.play()
}
function displayStatusMsg() {
status=cpADmsg[adNum];
document.returnvalue = true;
}
//结束
// –>

</script>



<table height="148" cellspacing="0" cellpadding="0">
              <tr>
                <td> <a href="javascript:jump2url()"> <img style="FILTER: revealTrans(duration=2,transition=23)" height="150" src width="575" border="0" name="cpADrush"></a></td>
                <script language="Javascript">nextAd()</script>
              </tr>
              <tr>
                <td>
                  <table width="575"  name="T1" id="T1" border="0" cellspacing="1" cellpadding="0">
                    <tr>
                      <td align="right"><img src="banners/dh_bg.gif" width="178" height="16"></td>
                      <td width="20"><a href="#" onMouseOver="changeimg(0)"><img name="Image2"  id="img1" border="0" src="banners/1.gif" width="20" height="16" onClick="changeimg(0)"></a></td>
                      <td width="20"><a href="#" onMouseOver="changeimg(1)"><img name="Image3" id="img2" border="0" src="banners/2.gif" width="20" height="16" onClick="changeimg(1)"></a></td>
                      <td width="20"><a href="#" onMouseOver="changeimg(2)"><img name="Image4" id="img3" border="0" src="banners/3.gif" width="20" height="16" onClick="changeimg(2)"></a></td>
                      <td width="20"><a href="#" onMouseOver="changeimg(3)"><img name="Image5" id="img4" border="0" src="banners/4.gif" width="20" height="16" onClick="changeimg(3)"></a></td>
                 &nb
sp;    <td width="20"><a href="#" onMouseOver="changeimg(4)"><img name="Image6" id="img5" border="0" src="banners/5.gif" width="20" height="16" onClick="changeimg(4)"></a></td>
                    </tr>
                  </table>
                </td>
              </tr>
            </table>

windows环境CVS client使用入门

bywzy 发表于 程序设计 分类,
0

CVS client使用前必须明白的基本概念
1,CVS
CVS (Cuncurrent Versions System)是基于TCP/IP协议的版本控制工具,也是Open source界最重要的开发工具之一。
它原来主要工作在UNIX平台下,现在在windows平台上也出现了很多GUI工具。
关于其由来,发展,请参阅http://www.redsaga.com/CVS_newbie_win32/www.cvshome.org
CVS和其他大部分版本控制软件一样,是Client/Server结构的。你必须在本地为CVS repository准备好一个目录,来和服务器同步源代码。
和在Windows 开发平台中拥有很大用户群的Visual Source Safe(VSS)相比,CVS主要由两个不同之处。
一是VSS依靠服务器上的一个共享目录提供服务,每一个client必须能够访问这个共享目录。这也就决定了source safe在TCP/IP环境下使用很困难。对于分布跨越数个城市甚至国家的工作小组来说,只有通过VPN才能够安全的访问source safe数据库。(SourceGear公司(www.sourcegear.com)发售名为SourceOffSite的商业软件包,US$239 per user,也可以为远程用户提供通过TCP/IP访问source safe数据的能力。) 而CVS依靠TCP/IP连接提供服务,所以它天生就是为了在internet上协同工作而设计的。虽然基本的pserver连接安全性不是很高,但是通过使用SSH,可以获得很高的安全性。
二是CVS反对对文件上锁的机制。VSS以及其他很多传统版本控制工具要求一个文件只能有一个使用者,它必须先checkout声明编辑文件的独享权力,直到checkin为止。但是对于地理上不限制使用者位置的CVS来说,等待一个用户checkin是一件痛苦的事情,而互相沟通比一个紧密工作的团体更困难。CVS采取多个用户可以同时对一个文件进行编辑,然后commit的方式解决这个问题。假设由于沟通不足出现冲突,使用者必须手工解决冲突之后再进行commit。在这种情况下,冲突的开发者必须努力进行足够的沟通以避免再次冲突。
CVS服务器可以被配置为把commit记录自动张贴到新闻组或者开发者的email信箱中去。注意这些辅助记录将有助于开发者之间的合作。
2, repository,module
CVS服务器上,一个源代码仓库被称为一个repository,一个server上通常可以运行多个repository,每个repository都是完全独立的,可以有不同的用户列表和访问规则。在一个repository之下,文件按照module组织,每一个module就相当于一个工程,大致上相当于Source safe里面的project。
VSS在你连接上服务器之后,会列出所有的project。但并不是所有的CVS server都会提供module的列表。事实上,哪些module被公开是由管理员控制的。如果你知道一个被隐藏的module的名字,你仍然可以正常的访问这个module。
3,CVSROOT
CVS依靠运行在服务器上的一个服务程序提供TCP/IP的连接。为了访问一个CVS数据库,你必须知道你所使用的协议,服务器的地址,服务器提供的Repository的名称以及你的用户名和密码。
有数种协议可供选择。Unix/Linux机器上的CVS通常使用pserver协议,这是一种不非常安全的协议,但是如果你有额外的安全要求,可以通过SSH进行增强。除此之外,NT机器还支持ntserver协议,它通过主机的NT用户表进行访问控制(但是这是在internet上不可用的方法)。kserver和gserver协议用的比较少,他们依据Kerboses提供额外的安全保护。
你有必要知道CVSROOT这个参数。CVSROOT是一个用":"开始及分隔各个部分的字符串,它包含了协议、用户名、服务器地址和repository名称。对于用户来说,CVSROOT就像URL一样,是访问一个server的途径。
一个典型的CVSROOT=:perser:cao@61.155.107.187:/cvs。这里,pserver是协议名称,cao是用户id,61.155.107.187是主机ip,/cvs是repository的名字。NT主机的repository一般会采取d:/CVSROOT之类的格式。
另一个例子是:pserver:anonymous@jivesoftware.com:/cvs,这是jivesoftware公司提供的开放源代码java技术论坛的CVSROOT。
在windows下使用命令行方式,这个参数可以通过一个环境变量使用。在windows 2000/XP系统中,你可以通过在'My computer'的properties中选择advanced,然后选择'Enviroment Variables'来输入这个环境变量。
4,checkout,update
为了得到module下面的源代码,你只需要使用checkout指令。和Visual source safe不一样,checkout只是取得文件,而非锁文件。
如果你已经有了本地文件,为了和server保持同步,你需要进行update操作。update会自动把server上的新内容取到本机来,如果你本地文件进行过了改动,它会帮您做合并工作。
checkout 和 update既可以针对一个特定的文件,也可以针对一个目录或者整个module。
5, commit
如果你对本地代码做了任何修改,或者增加一个文件,删除一个文件,每当你需要把你的改变提交到server上的时候,你就需要做commit动作。假设两个人都在本地修改了同一个文件,那么他们就像在进行一个竞赛,如果你快,那么你赢了。后commit的人将被server拒绝,不得不合并你的修改再次提交。
commit既可以针对一个特定的文件,也可以针对一个目录或者整个module。
6, revision
Revision是指每一个文件的版本信息。当你第一次增加一个文件到repository的时候,它会有一个初始revision是1.1,以后每次提交,就会增加到1.2,1.3…
在一个branch中的文件,有相对于这个branch的版本号。如果你对文件作了tag,那么你会看到revision变成1.1.1.1的形式。具体的含义我们在branch和tag的时候描述。
7,branch
Branch是一棵正常生长的代码树中的枝杈。开始的时候,任何一个module都有一个主枝被称为'HEAD'。
一个branch最终要么被合并到主干中去,要么被结束。branch通常用来debug,如果这个bug被fix了,修改bug的代码应该被合并到主枝上去。一个branch也可能经历多次与主枝的合并。
8, tag
Tag用来进行标示必要的信息。当您进行一次公开发布之前,您有必要对主枝标示"release 1.0"。这样您以后就可以随时回到这个版本。
//to do: 请完善这里的描述

CVS命令行
在得到CVSROOT和你的口令之后,你就可以试着登陆了。
首先,由于其他所有的GUI工具都是基于CVS基本协议的,而且他们可能会提供CVS的命令行或者等价形式作为显示的一部分,所以你应该对命令行操作有所了解。如果你还没有一个cvs。exe的命令行程序,从http://www.redsaga.com/CVS_newbie_win32/www.cvsnt.org你可以得到一个cvsnt的下载连接,其中就包含了一个命令行的cvs.exe程序。我们先从它开始(为了作为一个client使用,你不需要安装cvsnt的server组件)。CVSNT的cvs.exe是专门为windows编写的,你需要把cvs.exe放在你的path里面。
1.进入命令行方式。
和VSS一样,你也需要在本地有一个工作目录对应于一个repository。假设这个目录是'd:\works\sandbox'。请切换到这个目录。
输入"cvs"。你会看到:



这些提示信息告诉您关于cvs的基本语法。cvs后面跟着的是全局参数,然后是命令,最后是命令的参数。
2.login
正确的login不会有任何输出,否则会告诉你错误原因。
cvs



3.下面我们看看这个CVS server中有哪些module。



4.假设现在我们工作的项目是projectX,下面我们需要得到它下