随笔-26  评论-13  文章-46  trackbacks-0
  2005年6月7日

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
</head>

<body>
 <SCRIPT language="javascript">
 function next()
   {
   if(event.keyCode==13)event.keyCode=9;
  }
 </SCRIPT>
<form name="form1" method="post" action="">
<input onkeydown="next()" name="text1">
<input onkeydown="next()" name="text2">
<input onkeydown="next()" name="text3">
<input onkeydown="next()" name="text5">
<input onkeydown="if(event.keyCode==13)event.keyCode=9" name="text4">
  <input type="submit" name="Submit" value="Submit">
  <input type="reset" name="Submit2" value="Reset">
</form>
</body>
</html>

posted @ 2006-04-04 13:24 似水流年 阅读(3296) | 评论 (1)编辑 收藏
     摘要: 以下是摘自http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html的内容 @hibernate Tag Reference Tags for declaration of Hibernate descriptor file Applies to: All classes, at class level and on get...  阅读全文
posted @ 2005-11-15 14:03 似水流年 阅读(1123) | 评论 (0)编辑 收藏

一.安装
   1.安装jdk1.5,E:\server\jdk1.5
   2.安装mysql 4.0,E:\server\mysql
   3.安装Ant 1.6,E:\apache-ant-1.6.2
   4.安装tomcat5.5,E:\tomcat5

二.系统路径的设置:

   1、JAVA_HOME = E:\server\jdk1.5
   2、MYSQL_HOME = E:\server\mysql
   3、ANT_HOME = E:\apache-ant-1.6.2
   4、CATALINA_HOME = E:\tomcat5
   5、path,%JAVA_HOME%\bin;%ANT_HOME%\bin;%CATALINA_HOME%\bin;%MYSQL_HOME%\bin

三.安装appfuse-1.8.2,E:\jbproject\appfuse
   1.将..\appfuse\lib\junit3.8.1\junit.jar拷贝到%ANT_HOME%/lib目录下
   2.根据需要修改build.properties以下部分
     #database.jar=${postgresql.jar}
     #database.type=postgresql
     #database.host=localhost
     #database URL for creating other databases (doesn't work with pgsql)
     #database.admin.url=jdbc:${database.type}://${database.host}/template1
     #database.admin.username=postgres
     #database.admin.password=postgres

     #hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
     #database.driver_class=org.postgresql.Driver
     #database.url=jdbc:${database.type}://${database.host}/${database.name}

   我只修改了database.admin.password=我的mysql密码
   3.安装的可选项,
     如果你希望使用 iBATIS 作为持久化framework, 查看extras/ibatis目录下的 README.txt 文件或者运行 ant install-ibatis。
     如果你希望使用 Spring 作为web framework, 查看 extras/spring 目录下的 README.txt 文件或者运行 ant install-springmvc。
     如果你希望使用 WebWork 作为web framework, 查看extras/webwork 目录下的 README.txt 文件或者运行 ant install-webwork。
     如果你希望使用 JSF 作为web framework, 查看 extras/jsf 目录下的 README.txt 文件或者运行 ant install-jsf。
     如果你希望使用 Tapestry 作为web framework, 查看 extras/tapestry 目录下的 README.txt 文件或者运行 ant install-tapestry。

  
四.新建项目
   1. 在控制台,E:\jbproject\appfuse>ant new 按照提示输入application名称(myapp),database名称(mydb),package名称(com.jinn).
   2. 如果package名称不是org.appfuse,拷贝appfuse下的ApplicationResources_zh_CN.properties和ApplicationResources_zh.properties到对应的路径下myapp下。(注意如果你的package名称不是org.appfuse(或不是以org开头?没有做过测试),会提示你输入the first part of your new package,先别忙着
输入,看看myapp,跟appfuse一样,我要你着重看看myapp\web\WEB-INF\classes下的ApplicationResources_zh_CN.properties或ApplicationResources_zh.properties
      跟appfuse下是一样的。输入the first part of your new package,例如com,再看看myapp\web\WEB-INF\classes下的ApplicationResources_zh_CN.properties或ApplicationResources_zh.properties
      它的内容变了。原来appfuse在执行rename package的过程中把相关的properties内容做了处理。这会造成页面显示乱码。
   3. 运行E:\jbproject\myapp>ant setup ,BUILD SUCCESSFUL,在浏览器输入http://localhost:8080/myapp。一切正常,此时打开查看${CATALINA_HOME}\webapps\myapp\WEB-INF\classes\ApplicationResources_zh_CN.properties,已被编码转换。
   4. 关闭tomcat,运行E:\jbproject\myapp>ant test-all,出错," failed with message "Wrong document title found! Expected "AppFuse
      ~ ???è?????" but got "AppFuse ~ ???è?????",显然还是资源文件编码的问题,注意控制台有段提示"test with locale 'zh'",将myapp\web\WEB-INF\classes>ApplicationResources_zh.properties更名为ApplicationResources_zh.properties.bak
      运行E:\jbproject\myapp\web\WEB-INF\classes>native2ascii -encoding gbk ApplicationResources_zh.properties ApplicationResources_zh.properties
      再次运行E:\jbproject\myapp>ant test-all BUILD SUCCESSFUL

参考文章:http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuseQuickStart_zh
 

posted @ 2005-11-15 11:20 似水流年 阅读(633) | 评论 (0)编辑 收藏
 

AppFuseAnt任务

This page contains a listing of the most common Ant targets in AppFuse that I use in my daily development. For a complete list of tasks, type "ant -projecthelp" at the command line.
任务
描述

setup

建立database, 配置tomcatdeploys expanded war

clean

Removes build artifacts

compile

编译所有的文件

deploy

编译、然后部署到Tomcat

deploy-web

部署JSP和静态Web内容到Tomcat

install

使用TomcatManager程序安装Web程序.
对于向远程服务器上部署程序很适合

list

列出Tomcat已经安装、部署好的应用

refresh

Undeploys, cleans, 然后重新部署.

reload

使Tomcat重新装载所有程序

remove

删除Tomcat部署好的程序

setup-db

创建数据库,并插入范例需要的数据

setup-tomcat

复制JDBC驱动和context.xmlTomcat相应目录下

test-all

运行所有用于测试dao, serviceweb的测试用例

test-dao

测试dao模块

test-service

测试service模块

test-web

使用Mocks测试Action/Controller (不需要容器)

test-jsp

Tomcat中运行Canoo WebTest (启动/停止Tomcat, 执行前Tomcat应该被停止)

test-canoo

Tomcat已经运行时,执行Canoo WebTest

test-reports

产生测试报告

undeploy

$CATALINA_HOME/webapps中删除war文件和相应的目录

posted @ 2005-11-11 14:14 似水流年 阅读(423) | 评论 (0)编辑 收藏

三个需要的程序包:

commons-dbcp-1.2.1.jar

http://apache.linuxforum.net/dist/jakarta/commons/dbcp/binaries/

struts-legacy.jar

http://apache.linuxforum.net/dist/jakarta/struts/struts-legacy/

commons-pool-1.2.jar

http://apache.linuxforum.net/dist/jakarta/commons/pool/binaries/

strut-config.xml


  <data-sources>
    <data-source key="mysqlWebDB" type="org.apache.commons.dbcp.BasicDataSource">
      <set-property property="description" value="Mysql DataSource For zyweb" />
      <set-property property="driverClassName" value="org.gjt.mm.mysql.Driver" />
      <set-property property="url" value="jdbc:mysql://localhost:3306/zyweb?useUnicode=true&amp;characterEncoding=GBK" />
      <set-property property="username" value="root" />
      <set-property property="password" value="zyadmin" />
      <set-property property="maxActive" value="10" />
      <set-property property="maxWait" value="5000"/>
      <set-property property="defaultAutoCommit" value="false" />
      <set-property property="defaultReadOnly" value="false"/>
    </data-source>
  </data-sources>

posted @ 2005-10-13 16:24 似水流年 阅读(652) | 评论 (0)编辑 收藏
Java 中对文件的读写操作之比较
一.在 JDK 1.0 中,通常是用 InputStream & OutputStream 这两个基类来进行读写操作的。
InputStream 中的 FileInputStream 类似一个文件句柄,通过它来对文件进行操作,类似的,在
OutputStream 中我们有 FileOutputStream 这个对象。

用FileInputStream 来读取数据的常用方法是:
FileInputStream fstream = new FileInputStream(args[0]);
DataInputStream in = new DataInputStream(fstream);
用 in.readLine() 来得到数据,然后用 in.close() 关闭输入流。
完整代码见 Example 1。

用FileOutputStream 来写入数据的常用方法是:
FileOutputStream out out = new FileOutputStream("myfile.txt");    
PrintStream p = new PrintStream( out );
用 p.println() 来写入数据,然后用 p.close() 关闭输入。
完整代码见 Example 2。


二.在 JDK 1.1中,支持两个新的对象 Reader & Writer, 它们只能用来对文本文件进行操作,而
JDK1.1中的 InputStream & OutputStream 可以对文本文件或二进制文件进行操作。

用FileReader 来读取文件的常用方法是:
FileReader fr = new FileReader("mydata.txt");
BufferedReader br = new BufferedReader(fr);
用 br.readLing() 来读出数据,然后用br.close() 关闭缓存,用fr.close() 关闭文件。
完整代码见 Example 3。

用 FileWriter 来写入文件的常用方法是:
FileWriter fw = new FileWriter("mydata.txt");
PrintWriter out = new PrintWriter(fw);  
在用out.print 或 out.println 来往文件中写入数据,out.print 和 out.println的唯一区别是后者写
入数据或会自动开一新行。写完后要记得 用out.close() 关闭输出,用fw.close() 关闭文件。   
完整代码见 Example 4。

-------------------------------------------------------------- following is the source code of examples------------------------------------------------------

Example 1:
// FileInputDemo
// Demonstrates FileInputStream and DataInputStream
import java.io.*;

class FileInputDemo {
  
public static void main(String args[]) {
    
// args.length is equivalent to argc in C
    if (args.length == 1{
      
try {
        
// Open the file that is the first command line parameter
        FileInputStream fstream = new FileInputStream(args[0]);
        
// Convert our input stream to a DataInputStream
        DataInputStream in = new DataInputStream(fstream);
        
// Continue to read lines while there are still some left to read
        while (in.available() !=0{
          
// Print file line to screen
          System.out.println (in.readLine());
        }

        
in.close();
      }
 catch (Exception e) {
        System.err.println(
"File input error");
      }

    }

    
else
      System.
out.println("Invalid parameters");
  }

}


Example 2:
// FileOutputDemo
// Demonstration of FileOutputStream and PrintStream classes
import java.io.*;

class FileOutputDemo 
{    
  
public static void main(String args[])  {              
  FileOutputStream 
out// declare a file output object
    PrintStream p; // declare a print stream object

try {
  
// connected to "myfile.txt"
      out = new FileOutputStream("myfile.txt");
      
// Connect print stream to the output stream
      p = new PrintStream( out );
      p.println (
"This is written to a file");
      p.close();
    }
 catch (Exception e) {
      System.err.println (
"Error writing to file");
    }

  }

}


Example 3:
// FileReadTest.java
// User FileReader in JDK1.1 to read a file 
import java.io.*;

class FileReadTest {      
  
public static void main (String[] args) {
    FileReadTest t 
= new FileReadTest();
    t.readMyFile();
}
 
    
  
void readMyFile() 
    String record 
= null;
    
int recCount = 0
    
try 
FileReader fr 
= new FileReader("mydata.txt");
       BufferedReader br 
= new BufferedReader(fr);
       record 
= new String();
       
while ((record = br.readLine()) != null{
         recCount
++;
         System.
out.println(recCount + "" + record); 
}

br.close();
fr.close(); 
     }
 catch (IOException e) 
         System.
out.println("Uh oh, got an IOException error!");
         e.printStackTrace();
     }

}
 
  
}
    

Example 4:
// FileWriteTest.java
// User FileWriter in JDK1.1 to writer a file 
import java.io.*;

class FileWriteTest {      
  
public static void main (String[] args) {
    FileWriteTest t 
= new FileWriteTest();
    t.WriteMyFile();
}
 
    
  
void WriteMyFile() 
    
try 
FileWriter fw 
= new FileWriter("mydata.txt");
PrintWriter 
out = new PrintWriter(fw);    
out.print(“hi,this will be wirte into the file!”);   
out.close();
fw.close();
     }
 catch (IOException e) 
         System.
out.println("Uh oh, got an IOException error!");
         e.printStackTrace();
     }

}
 
  
}
    
posted @ 2005-06-23 17:46 似水流年 阅读(898) | 评论 (2)编辑 收藏

<embed src="http://wmt2.aboutmedia.com.tw/Aboutmedia/warner/mtv/naying-021011_01v_120k.wmv";;
autostart="true" loop="true" width="200" height="150" >
把这个网址http://wmt2.aboutmedia.com.tw/Aboutmedia/warner/mtv/naying-021011_01v_120k.wmv换成你要看的电影就行了


有图像的rm格式:
<OBJECT classid='clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA' height=288 id=video1 width=305 VIEWASTEXT>
<param name='_ExtentX' value='5503'>
<param name='_ExtentY' value='1588'>
<param name='AUTOSTART' value='-1'>
<param name='SHUFFLE' value='0'>
<param name='PREFETCH' value='0'>
<param name='NOLABELS' value='0'>
<param name='SRC' value='http://media.cdut.edu.cn/ram/new/xiaoxin1.ram'>
<param name='CONTROLS' value='Imagewindow,StatusBar,ControlPanel'>
<param name='CONSOLE' value='RAPLAYER'>
<param name='LOOP' value='0'>
<param name='NUMLOOP' value='0'>
<param name='CENTER' value='0'>
<param name='MAINTAINASPECT' value='0'>
<param name='BACKGROUNDCOLOR' value='#000000'>
</OBJECT>

无图像的rm格式:如相声,歌曲。。。
<object ID='video2' WIDTH='300' HEIGHT='62' CLASSID='CLSID:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA'>
<param name='_ExtentX' value='9657'>
<param name='_ExtentY' value='847'>
<param name='AUTOSTART' value='-1'>
<param name='SHUFFLE' value='0'>
<param name='PREFETCH' value='0'>
<param name='NOLABELS' value='0'>
<param name='SRC' value='http://210.242.69.206/ramgen/broadcast/BCC/encoder/hipop.rm'>
<param name='CONTROLS' value='StatusBar,controlpanel'>
<param name='CONSOLE' value='Clip1'>
<param name='LOOP' value='0'>
<param name='NUMLOOP' value='0'>
<param name='CENTER' value='0'>
<param name='MAINTAINASPECT' value='0'>
<param name='BACKGROUNDCOLOR' value='#000000'>
</object>

最简单的media格式的播放器。。自动识别有无图像,但是版本是你机器的!
<embed src='mms://61.175.132.221/tv/mtv/f4/makeawish.wmv' width=200 height=200 autostart=true loop=true></embed>

有图像的media播放器,自动调用网上的插件。
<object id=nstv classid='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6' width=280 height=265 codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701standby=Loading Microsoft? Windows Media? Player components... type=application/x-oleobject>
<param name='URL' value='http://202.99.11.42/xiangsheng/ymjr.wma'>
<PARAM NAME='UIMode' value='full'><PARAM NAME='AutoStart' value='true'>
<PARAM NAME='Enabled' value='true'>
<PARAM NAME='enableContextMenu' value='false'>
<param name='WindowlessVideo' value='true'></object>

无图像的media播放器。。。同上。
<object id=nstv classid='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6' width=280 height=60 codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701standby=Loading Microsoft? Windows Media? Player components... type=application/x-oleobject>
<param name='URL' value='http://202.99.11.42/xiangsheng/ymjr.wma'>
<PARAM NAME='UIMode' value='full'><PARAM NAME='AutoStart' value='true'>
<PARAM NAME='Enabled' value='true'>
<PARAM NAME='enableContextMenu' value='false'>
</object>

只是界面不同的media的调插件播放器。。建议不用这个,,你可以看!
<embed src='http://av.wanwa.com/fileroot/AV/Ramfiles/23809.ram' type='audio/x-pn-realaudio-plugin' console='Clip1' controls='ControlPanel,StatusBar' height='60' width='275' autostart='true'></embed>

rm文件在线播放
<embed height=25 src=www.xiakedao.com/biyun/ren/a.rm type=audio/x-pn-realaudio-plugin width=50 autostart="false" controls="PlayButton">


autostart="false" 打开页面时处于候命状态,autostart="true" 打开页面时马上听声音 height=25 width=50 有不同数值,播放器面板有些不同
midi、au、avi文件在线播放

<EMBED SRC="http://www.shunde.net.cn/~biyun/wlsd/wy/yinyue/H/1.mid"; width="47" height="24" AUTOSTART=TRUE>

autostart="false" 打开页面时处于候命状态,autostart="true" 打开页面时马上听声音 height=25 width=50 有不同数值,播放器面板有些不同

asf文件在线播放
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
</head>
<body topmargin="0" leftmargin="0">
<object classid=clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95 codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=7.0 height=53 id=NSPlay0 name=NSPlay type=application/x-oleobject width=87 VIEWASTEXT standby="Loading Microsoft Windows Media Player components..." border="0"><param name="AudioStream" value="-1">
<param name="AutoSize" value="0">
<param name="AutoStart" value="1">
<param name="AnimationAtStart" value="-1">
<param name="AllowScan" value="-1">
<param name="AllowChangeDisplaySize" value="-1">
<param name="AutoRewind" value="0">
<param name="Balance" value="0">
<param name="BaseURL" value>
<param name="BufferingTime" value="10">
<param name="CaptioningID" value>
<param name="ClickToPlay" value="-1">
<param name="CursorType" value="0">
<param name="CurrentPosition" value="-1">
<param name="CurrentMarker" value="0">
<param name="DefaultFrame" value>
<param name="DisplayBackColor" value="0">
<param name="DisplayForeColor" value="65280">
<param name="DisplayMode" value="0">
<param name="DisplaySize" value="1">
<param name="Enabled" value="-1">
<param name="EnableContextMenu" value="-1">
<param name="EnablePositionControls" value="-1">
<param name="EnableFullScreenControls" value="-1">
<param name="EnableTracker" value="-1">
<param name="Filename" value="http://music.sdcatv.net/biyun/wlsd/down/yin/gequ/asf/5.asf";>
<param name="InvokeURLs" value="-1">
<param name="Language" value="-1">
<param name="Mute" value="0">
<param name="PlayCount" value="1">
<param name="PreviewMode" value="0">
<param name="Rate" value="1">
<param name="SAMILang" value>
<param name="SAMIstyle" value>
<param name="SAMIFileName" value>
<param name="selectionStart" value="-1">
<param name="selectionEnd" value="-1">
<param name="SendOpenStateChangeEvents" value="-1">
<param name="SendWarningEvents" value="-1">
<param name="SendErrorEvents" value="-1">
<param name="SendKeyboardEvents" value="0">
<param name="SendMouseClickEvents" value="0">
<param name="SendMouseMoveEvents" value="0">
<param name="SendPlayStateChangeEvents" value="-1">
<param name="ShowCaptioning" value="0">
<param name="ShowControls" value="-1">
<param name="ShowAudioControls" value="0">
<param name="ShowDisplay" value="0">
<param name="ShowGotoBar" value="0">
<param name="ShowPositionControls" value="-1">
<param name="ShowStatusBar" value="-1">
<param name="ShowTracker" value="-1">
<param name="TransparentAtStart" value="-1">
<param name="VideoBorderWidth" value="0">
<param name="VideoBorderColor" value="0">
<param name="VideoBorder3D" value="-1">
<param name="Volume" value="0">
<param name="WindowlessVideo" value="0">
</object>
其中<param name="AutoStart" value="0"> 0为打开页面处于待命状态,为1时打开页面直接播放 </body>
</html>

流式收听mp3方法:
http://*.mp3http://*.mp3,http://...琱ttp://*.mp3,
把上面的的文件另存为*.m3u,就可实现在线播放*.mp3(支持连续播放)

mpeg影象在线播放:
等等,让它下载
<img border="0" dynsrc="http://music.cnvnet.com/video/0321.mpeg ;
" start="fileopen">


rm影像在线播放 代码:
<object id="vid" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width=114 height=100>
<param name="_ExtentX" value="3016">
<param name="_ExtentY" value="2646">
<param name="AUTOSTART" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="-1">
<param name="SRC" value="http://music.cnvnet.com/mtv/20010618/002.ram";>
<param name="CONTROLS" value="Imagewindow">
<param name="CONSOLE" value="clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000">
</object>

加几个控制器
<object id="vid" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width=427 height=300>
<param name="_ExtentX" value="11298">
<param name="_ExtentY" value="7938">
<param name="AUTOSTART" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="-1">
<param name="SRC" value="http://music.cnvnet.com/mtv/20010618/001.ram";>
<param name="CONTROLS" value="Imagewindow">
<param name="CONSOLE" value="clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000">
</object>
<object id="vid2" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width=427 height=30>
<param name="_ExtentX" value="11298">
<param name="_ExtentY" value="794">
<param name="AUTOSTART" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="-1">
<param name="SRC" value="http://music.cnvnet.com/mtv/20010618/001.ram";>
<param name="CONTROLS" value="ControlPanel">
<param name="CONSOLE" value="clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000">
</object>

posted @ 2005-06-17 14:20 似水流年 阅读(1261) | 评论 (0)编辑 收藏

在JSTL 1.1中使用以下标识符:

URI

前缀

Core

http://java.sun.com/jsp/jstl/core

c

XML processing

http://java.sun.com/jsp/jstl/xml

x

I18N formatting

http://java.sun.com/jsp/jstl/fmt

fmt

Database access

http://java.sun.com/jsp/jstl/sql

sql

Functions

http://java.sun.com/jsp/jstl/functions

fn

posted @ 2005-06-07 16:13 似水流年 阅读(642) | 评论 (0)编辑 收藏

使用实例:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ${fn:length(myCollection)}
其他函数:

函数

描述

fn:contains(string, substring)

如果参数string中包含参数substring,返回true

fn:containsIgnoreCase(string, substring)

如果参数string中包含参数substring(忽略大小写),返回true

fn:endsWith(string, suffix)

如果参数 string 以参数suffix结尾,返回true

fn:escapeXml(string)

将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回

fn:indexOf(string, substring)

返回参数substring在参数string中第一次出现的位置

fn:join(array, separator)

将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。

fn:length(item)

返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。

fn:replace(string, before, after)

返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果

fn:split(string, separator)

返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素

fn:startsWith(string, prefix)

如果参数string以参数prefix开头,返回true

fn:substring(string, begin, end)

返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符

fn:substringAfter(string, substring)

返回参数substring在参数string中后面的那一部分字符串

fn:substringBefore(string, substring)

返回参数substring在参数string中前面的那一部分字符串

fn:toLowerCase(string)

将参数string所有的字符变为小写,并将其返回

fn:toUpperCase(string)

将参数string所有的字符变为大写,并将其返回

fn:trim(string)

去除参数string 首尾的空格,并将其返回

posted @ 2005-06-07 16:12 似水流年 阅读(1839) | 评论 (1)编辑 收藏
返回到前一页不刷新
<input type="button" value="返回" onClick="history.go(-1)"> 

返回到前一页并刷新
<%String ref = request.getHeader("REFERER");response.sendRedirect(ref);%>
posted @ 2005-06-07 16:12 似水流年 阅读(813) | 评论 (0)编辑 收藏
<href="delete.jsp?Id=${row.Id}" onclick="if(confirm('确认删除?')){this.click();}else{return false;}">删除</a>
posted @ 2005-06-07 16:10 似水流年 阅读(394) | 评论 (0)编辑 收藏

1.验证用户登录
<sql:query var="query" dataSource="${bookdev}">
  select * from user where userName='${param.userName}' and userPwd='${param.userPwd}'
</sql:query>

<c:if test="${empty query.rows}"> 
<!--验证没有通过,返回登录界面-->
  <font color="red">用户名或密码错误</font>
  <a href="index.jsp">重新登录</a>
</c:if>
<c:if test="${!empty query.rows}"> 
<!--验证通过,保存用户信息到session中-->
<c:forEach var="row" items="${query.rows}">
    <c:set var="userName" value="${row.userName}" scope="session" />
    <c:set var="userLevel" value="${row.userLevel}" scope="session" /> 
 </c:forEach>
    <c:set var="isLog" value="1" scope="session" /> 
<!--页面发送到主页面-->
    <c:redirect url="main.jsp" />
</c:if>

2.session控制

<c:if test="${empty sessionScope.isLog}">
 你没有登录或登录超时
 <a href="index.jsp">重新登录</a>
</c:if>

posted @ 2005-06-07 16:07 似水流年 阅读(3644) | 评论 (3)编辑 收藏
以mysql为例

<sql:setDataSource 
  var
="bookdev"  //数据库名 
  driver="org.gjt.mm.mysql.Driver" //驱动程序 
  url="jdbc:mysql://localhost:3306/bookdev?useUnicode=true&characterEncoding=gb2312" //URL
  user="root" //用户名
  password="" //密码 
 scope="session" 
/> 

其他数据库和URL列表如下(摘自jsp应用开发详解(第二版))

数据库驱动程序和URL

数据库名

驱动程序

URL

MS SQL Server2000

com.microsoft.jdbc.sqlserver.SQLServerDriver

jdbc:microsoft:sqlserver://[ip]:[port];user=[user];passwoerd=[password]

JDBC-ODBC

sun.jdbc.odbc.JdbcOdbcDriver

jdbc:odbc:[odbcsource]

Oracle oci8

oracle.jdbc.driver.OracleDriver

jdbc:oracle:oci8:@[sid]

Oracle thin Driver

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:@[ip]:[port]:[sid]

Cloudscape

COM.cloudscape.core.JDBCDriver

Jdbc:cloudscape:database

MySQL

org.git.mm.mysql.Driver

jdbc:mysql://ip/database?user=?&password=?


相关链接:java连接数据库方法http://blog.java-cn.com/more.asp?name=johnnyhg&id=341 

posted @ 2005-06-07 16:06 似水流年 阅读(392) | 评论 (0)编辑 收藏
由于mysql把\当作转义字符用,所以要把路径中的\处理成\\才可以正确保存,无奈之下copy了一段java代码实现字符替换,后来才发现原来JSTL的新增函数库就有函数已经可以实现此功能,且使用起来代码简洁,这样好的东西自然要用用。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
${fn:replace(param.sourceUrl,'\','\\')}
结果出现错误:Unterminated ${ tag。
修改代码为:
<c:set var="before" value="\\"/> 
<c:set var="after" value="\\\\"/> 
$
{fn:replace(param.sourceUrl,before,after)} 
问题解决
posted @ 2005-06-07 16:01 似水流年 阅读(1444) | 评论 (1)编辑 收藏
加密
<sql:update var="user" dataSource="${bookdev}"> 
  insert into user values(
"","${param.userName}",password("${param.userPwd}"),"${param.userLevel}"
</sql:update> 

解密
<sql:query var="query" dataSource="${bookdev}"> 
  select 
* from user where userName='${param.userName}' and 
  userPwd
=password('${param.userPwd}'
</sql:query>
posted @ 2005-06-07 16:00 似水流年 阅读(597) | 评论 (0)编辑 收藏

JSP文件操作

    文件的建立与删除
    显示目录中的文件
    读取文件中的字符
    将数据写入文件


文件的建立与删除

首先取得当前的磁盘路径,指定要建立的文件的路径,再进行检查,如果文件不存在,如果文件不存在,则建立这个文件,如果文件存在,则删除这个文件。

CreateDelete.jsp
<%@ page contentType="text/html; charset=GB2312"%>
<%@ page import="java.io.*" %>
<%@ page language="java" %>
<HTML>
<HEAD>
<TITLE>文件的建立与删除</TITLE>
</HEAD>
<BODY>
<CENTER>
<FONT SIZE = 5 COLOR = blue>文件的建立与删除</FONT>
</CENTER>
<BR>
<HR>
<BR>
<%
//建立代表目前目录位置中File.txt档的File变量, 并由fileName变量变数引用
String path = request.getRealPath("/jsphosting/wenjian");
File fileName = new File(path, "File.txt");
//检查File.txt是否存在
if(fileName.exists())
{
//删除File.txt档
fileName.delete();
//输出目前所在的目录路径
out.println(path + "\\File.txt");
%>
<FONT SIZE = 4 COLOR = red>存在</FONT>, 已完成
<FONT SIZE = 4 COLOR = red>删除</FONT>
<%
}
else
{
//在目前的目录下建立一个名为File.txt的文字档 
fileName.createNewFile();
//输出目前所在的目录路径
out.println(path + "\\File.txt");
%>
<FONT SIZE = 4 COLOR = red>不存在</FONT>, 已完成
<FONT SIZE = 4 COLOR = red>建立</FONT>
<%
}
%>
</BODY>
</HTML> 


显示目录中的文件


首先建立要显示的目录的FILE对象,然后调用LISTFILES方法,该方法返回一个FILE对象数组,显示数组中的所有元素即可。

ListFile.jsp
<%@ page contentType="text/html; charset=GB2312"%>
<%@ page language="java" %>
<%@ page import="java.io.*" %>
<HTML>
<HEAD>
<TITLE>取得目录中的文件</TITLE>
</HEAD>
<BODY>
<CENTER>
<FONT SIZE = 5 COLOR = blue>取得目录中的文件</FONT>
</CENTER>
<BR>
<HR>
<BR>
<%
//取得目前目录的磁盘目录
String path = request.getRealPath("/jsphosting/wenjian");
//建立代表目前目录位置的d变量
File d = new File(path);
//取得代表目录中所有文件
File list[] = d.listFiles();
%>
在<Font color = red><%= path%></Font>目录下的文件有(每个文件有其相应的功能)<BR>
<Font color = blue>
<ul>
<%
for(int i=0; i < list.length; i++)
{
%>
<li><%= list[i].getName() %><BR> 
<%
}
%>
</ul>
</Font>
</BODY>
</HTML> 

读取文件中的字符

直接调用FILEREADER对象的READ()方法读取所要显示的字符

ReadAll.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page language="java" %>
<%@ page import="java.io.*" %>
<HTML>
<HEAD>
<TITLE>读取文件内容</TITLE>
</HEAD>
<BODY>
<CENTER>
<FONT SIZE = 5 COLOR = blue>读取文件内容</FONT>
</CENTER>
<BR>
<HR>
<BR>
<%
String path = request.getRealPath("/jsphosting/wenjian"); //取得目前目录在伺服端的实际位置
FileReader fr = new FileReader(path + "\\File.txt"); //建立FileReader变量,并设定由fr变量变数引用
int c = fr.read(); //从文件中读取一个字节
while(c != -1) //判断是否已读到文件的结尾
{
out.print((char)c); //输出读取到的数据 
c = fr.read(); //从文件中读取数据
if(c == 13) //判断是否为断行字节
{
out.print("<BR>"); //输出分行标签
fr.skip(1); //略过一个字节
c = fr.read(); //读取一个字节
}
}
//关闭文件
fr.close();
%>
</BODY>
</HTML> 

将数据写入文件

通过调用FILEWRITER对象的WRITE()方法向文件中写入数据

Write.jsp
<%@ page contentType="text/html; charset=GB2312"%>
<%@ page language="java" %>
<%@ page import="java.io.*" %>
<HTML>
<HEAD>
<TITLE>将数据写入文件</TITLE>
</HEAD>
<BODY>
<CENTER>
<FONT SIZE = 5 COLOR = blue>将数据写入文件</FONT>
</CENTER>
<BR>
<HR>
<BR>
<%
String path = request.getRealPath("/jsphosting/wenjian"); //取得目前目录在伺服端的实际位置
FileWriter fw = new FileWriter(path + "\\File.txt"); //建立FileWrite对象,并设定由fw对象变量引用
//将字串写入文件
fw.write("大家好!");
fw.write("祝大家学习jsp愉快!");
fw.write("希望大家能够深入了解jsp技术!");
fw.close(); //关闭文件
%>
<P>写入文件内容为</P>
<FONT SIZE = 4 COLOR = red>
<%
FileReader fr = new FileReader(path + "\\File.txt"); //建立FileReader对象,并设定由fr对象变量引用
BufferedReader br = new BufferedReader(fr); //建立BufferedReader对象,并设定由br对象变量引用
String Line = br.readLine(); //读取一行数据
out.println(Line + "<BR>"); //输出读取得的数据
br.close(); //关闭BufferedReader对象
fr.close(); //关闭文件
%>
</FONT>
</BODY>
</HTML> 

posted @ 2005-06-07 15:58 似水流年 阅读(297) | 评论 (0)编辑 收藏

打开tomcat/conf/servel.xml
修改(黑体字为修改部分)
<Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000"
               disableUploadTimeout="true" URIEncoding="GBK"/>
在web页上把含有中文的url用java.net.URLEncoder.encode("中文")处理
例子:

<c:set var="test"> 
  
/<%=java.net.URLEncoder.encode("用jsp实现文件上传.pdf")%> 
</c:set> 
<c:redirect context="/ebooks" url="${test}"/> 


链接传递中文参数例子

<a href=hello.jsp?send=<%=java.net.URLEncoder.encode("中文")%>> 点击</a> 

 jspsmartupload组件下载中文例子:
 

<%@ page contentType="text/html;charset=gb2312" 
import
="com.jspsmart.upload.*" %><% 

SmartUpload mySmartUpload  
= new SmartUpload(); 

//String path=request.getParameter("中文");修改server.xml后 
String path = new String(request.getParameter("中文").getBytes("ISO-8859-1")); //修改server.xml前 
// Initialization 
mySmartUpload.initialize(pageContext); 
// Download file 
//mySmartUpload.downloadFile("/upload/sample.zip"); 
// With a physical path 

mySmartUpload.downloadFile(path); 
response.getOutputStream().close(); 
// With options 
// mySmartUpload.downloadFile("/upload/sample.zip","application/x-zip-compressed","downloaded.zip") 
%> 
posted @ 2005-06-07 15:57 似水流年 阅读(4646) | 评论 (2)编辑 收藏

数据库需求分析:
class(一级栏目信息):classId(自动编号),className(栏目名称)
Nclass(二级栏目信息):NclassId(自动编号),NclassName(栏目名称),parentId(一级栏目id,与class表中的classId关联)

<%@ page contentType="text/html; charset=GB2312" language="java" errorPage="../error.jsp" %>
<%@ include file="../conn.jsp"%>
<%@ include file="../ds.jsp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%request.setCharacterEncoding("gb2312"); %>
<HTML><HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">

<TITLE>级联菜单</TITLE>
<LINK rel="stylesheet" type="text/css" href="style.css">
</HEAD>
<!--从数据库中得到二级栏目信息-->
<%String sql="select * from Nclass order by NclassId asc";
ResultSet rs=stmt.executeQuery(sql);
%>
<!--将二级栏目信息保存到数组subcat中-->
<script type="text/javascript">
var onecount;
onecount=0;
subcat = new Array();
        <%
        int count = 0;
        while(rs.next()){
        %>
subcat[<%=count%>] = new Array("<%=rs.getString("NclassName")%>","<%=rs.getString("NclassId")%>","<%=rs.getString("parentId")%>");
        <%
        count++;
        }
        rs.close();
        %>
onecount=<%=count%>;
<!--决定select显示的函数-->
function changelocation(locationid)
    {
    document.myform.NclassId.length = 0;

    var locationid=locationid;
    var i;
    for (i=0;i < onecount; i++)
        {
            if (subcat[i][2] == locationid)
            {
                document.myform.NclassId.options[document.myform.NclassId.length] = new Option(subcat[i][0], subcat[i][1]);
            }       
        }
       
    }   
</script>

<FORM method="POST" name="myform" action="adminsave.jsp?action=add">
  <TABLE>
  
    <TR>
      <TD>一级分类</TD>
      <TD> 
        <SELECT name="classId" onChange="changelocation(document.myform.classId.options[document.myform.classId.selectedIndex].value)" size="1">
          <OPTION selected value>==请选一级分类==</OPTION>
        <sql:query var="query" dataSource="${bookdev}">
          SELECT * FROM class
       </sql:query>
<c:forEach var="row" items="${query.rows}">
 <option value="${row.classId}">${row.className}</option>
</c:forEach>
</select>
      </TD>
      <TD>选择二级分类</TD>
      <TD>
        <SELECT name="NclassId">
          <OPTION selected value>==请选二级分类==</OPTION>
        </SELECT>
      </TD>
    </TR>
</TABLE>
 
</FORM>
</BODY>
</HTML>

 

posted @ 2005-06-07 15:53 似水流年 阅读(656) | 评论 (0)编辑 收藏
<html> 
<head> 
<title>Untitled Document</title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
</head><LINK href="../hellking.css" type=text/css rel=stylesheet> 
<body> 
<%request.setCharacterEncoding("gb2312"); %> 

<script type="text/javascript"> 
   
function setid() 
   

   str
='<br>'; 
   
if(!window.form1.upcount.value) 
    window.form1.upcount.value
=1
   
if(window.form1.upcount.value>100)
   alert(
"您最多只能同时上传100个文件0"); 
   window.form1.upcount.value 
= 100
   setid(); 
   }
 
   
else
    
for(i=1;i<=window.form1.upcount.value;i++
      str
+='<div>文件'+i+':<input type="file" name="file'+i+'"></div><br><br>'; 
   window.upid.innerHTML
=str+'<br>';}
 
   }
 
 
</script> 



<form name="form1" method="post" action="BookAction_do.jsp?action=${param.action}" >

 

  
<div> 
  
<table border="1" cellspacing="0" cellpadding="5" bordercolordark="#CCCCCC" bordercolorlight="#000000" bordercolor="#FFFFFF" style="border-collapse: collapse" height="169"> 
    
<tr bgcolor="#CC0CCC"> 
      
<td height="28" align="left" valign="middle" bgcolor="#C0CCCC">&nbsp; 
        
<div><font size="3"><b>文件上传</b></font></div> 
      
</td> 
    
</tr> 
    
<tr align="left" valign="middle" bgcolor="#eeeeee"> 
      
<td bgcolor="#eeeeee" height="92" valign="top"> <br> 
        
<table border="0" cellspacing="1" cellpadding="2"> 

          
<tr> 
            
<td><font color="#FF0000"><b>*</b></font>上传的文件大小不能超过<font color="#FF0000">999999999</font>个字节</td> 
          
</tr> 
          
<tr> 
            
<td> 

              
<b><font color="#FF0000">*</font></b>每次可以设置同时上传<font color="#FF0000">100</font>个文件。<br>

              设置上传的个数 
              
<input type="text" value="1" name="upcount" size="20"> 
              
<input type="button" name="Button"  onClick="setid();" value="设定"> 

            
</td> 
          
</tr> 

        
</table> 
      
</td> 
    
</tr> 
    
<tr> 
      
<td id="upid"> 
        
<div>文件1: 
          
<input type="file" name="file1"> 
        
</div> 
      
</td> 
    
</tr> 


  
</table> 
</div> 
<br> 
  
<tr align="center" valign="middle" bgcolor="#eeeeee"> 
      
<td bgcolor="#ccc000" height="33"> 
        
<input type="submit" name="Submit" value="确定"> 
        
<input type="reset" name="Submit2" value="重执"> 
      
</td> 
    
</tr> 
</table></form> 
</body> 
</html> 

posted @ 2005-06-07 15:51 似水流年 阅读(555) | 评论 (0)编辑 收藏

5.1 停用目錄檢視 (Directory Listing)

在新的 Tomcat 安裝,預設目錄檢視是啟用的,這可以是一個很有用的測試工具,如果像我一樣,您有時會忘記在某個網頁應用程式使用了甚麼 servlets,可以簡單地輸入網頁應用程式的 URL ,就能取得完整的列表。

但在生產的用途上,您可能想將它關掉。如果沒有其他東西,它不鼓勵使用者在他們不應該逗留的地方閒逛。要關掉這個選項基本上兩個方法:

  • 建立一個 index.html 檔案,將它放在網頁應用程式的目錄內。
  • 修改整體的 web.xml 檔案將選項關掉。

第一個選項頗為簡單,因此我們只研究第二個選項。

開啟 web.xml 檔案,這檔案在 $CATALINA_HOME/conf/ 內,是整體的web.xml檔案,即是這裡有任何改變都會影響該 Tomcat 所有網頁應用程式。如果您想要更精細的控制,例如某些應用程式關掉,但某些則開啟,就需要以第一個選項來做,建立 index.html檔案。

找出以下部分:

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.DefaultServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    

這是 web.xml 的第一部分,我們關注的選項是:

        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
    

將  <param-value> 改為 false,便可關掉目錄檢視,就是那麼簡單。

 

5.2 自訂預設頁面

Tomcat使用的慣例與Apache網頁伺服器相同,index.html 是任何目錄的預設或首頁。有時您可能想改變為 page1.html 或是 JSP 頁面,如以下一樣  now_see_this.jsp:

要做到這樣,只需開啟網頁程式的 web.xml ,加上以下這些:

    <welcome-file-list>
        <welcome-file>now_see_this.jsp</welcome-file>
        <welcome-file>page1.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
    </welcome-file-list>
    

要令整個系統改變,可在 $CATALINA_HOME/conf 下修改整體的 web.xml,並將 <welcome-file> 改變指向您所選的檔案。

posted @ 2005-06-07 15:47 似水流年 阅读(327) | 评论 (0)编辑 收藏
     摘要: 1.表格的显示格式,在css中定义; css Property Default Valid Values Description Can be set using file/setProperty  css.tr.even even any valid css class name css class automatically added ...  阅读全文
posted @ 2005-06-07 15:46 似水流年 阅读(2252) | 评论 (0)编辑 收藏
有时要求利用一个超链来同时打开两个帧页。我们先假设要通过超链1来同时载入帧页first.htm和next.htm到不同的帧页窗口,其中将next.htm在窗口banner处打开(窗口名称可以在框架页中类似
<frame name="banner" target="main" src="left.htm">的语句中找到)。需要在first.htm中加入onload指令:
<body onload="parent.banner.location.href= 'next.htm'"></body> 
具体加入形式:
<html> 
<body onload="parent.banner.location.href= 'next.htm'"> 
此处是该文件原有的其他内容 
</body> 
</html> 
原理很简单,超链1打开first.htm,而first.htm中加入的onload语句自动打开next.htm到指定的窗口,从而实现利用一个链接控制两个帧页的功能(你完全可以进一步发挥)。
posted @ 2005-06-07 15:08 似水流年 阅读(283) | 评论 (0)编辑 收藏
     摘要: 在开发复杂的企业应用程序时,很多人更喜欢使用企业 JavaBean (EJB) 技术,让应用服务器来管理对象可持续性。其他人可能更喜欢使用 Java 数据库连接 (JDBC) 标准 API,以便手动地优化数据库访问。这些解决方案可能不适合于简单的由数据库支持的网站,这种网站只需使用 JSP 尽可能快地进行原型开发。如果您只需要查询和更新一个简单的数据库,则提供数据库访问特性的标记库可能是最佳的解决...  阅读全文
posted @ 2005-06-07 15:04 似水流年 阅读(774) | 评论 (1)编辑 收藏
我们可以用CSS语法来控制超链接的形式、颜色变化。

  下面我们做一个这样的链接:未被点击时超链接文字无下划线,显示为蓝色;当鼠标在链接上时有下划线,链接文字显示为红色;当点击链接后,链接无下划线,显示为绿色。

  实现方法很简单,在源代码的<head>和<head>之间加上如下的CSS语法控制:

  

<style type="text/css"> 
   <!-- 
   a:link 
{ text-decoration: none;color: blue} 
   a:active 
{ text-decoration:blink} 
   a:hover 
{ text-decoration:underline;color: red} 
   a:visited 
{ text-decoration: none;color: green} 
   --> 
   
</style> 

  其中:
  a:link 指正常的未被访问过的链接;
  a:active 指正在点的链接;
  a:hover 指鼠标在链接上;
  a:visited 指已经访问过的链接;
  text-decoration是文字修饰效果的意思;
  none参数表示超链接文字不显示下划线;
  underline参数表示超链接的文字有下划线

  下面这行文字就是我们刚才做的效果。

效果演示

  同样,如果讲none替换成overline则给超链接文字加上划线,换成line-through给超链接文字加上删除线,blink则使文字在闪烁。

posted @ 2005-06-07 14:47 似水流年 阅读(511) | 评论 (0)编辑 收藏

导出:

SELECT * from ebook INTO OUTFILE "bookdev.txt" FIELDS ENCLOSED by '"' TERMINATED by "," LINES TERMINATED BY "\n"

 

导入:

LOAD DATA INFILE "bookdev.txt" into TABLE ebook  FIELDS ENCLOSED by '"' TERMINATED by ","  LINES TERMINATED BY "\n"
posted @ 2005-06-07 14:44 似水流年 阅读(443) | 评论 (0)编辑 收藏
有些中文在jbuilder的IDE下无法正常显示,可采取以下办法解决:
设${jbuider}为jbuilder的安装目录,到${jbuider}/jdk1.4jre/lib下.把font.properties文件备份,根据需要将font.properties.*其中之一重命名为font.properties,重启jbuilder即可.
posted @ 2005-06-07 14:40 似水流年 阅读(466) | 评论 (0)编辑 收藏