??xml version="1.0" encoding="utf-8" standalone="yes"?> package com.wch.pojo; public class Admin { <?xml version='1.0' encoding='UTF-8'?> <!-- Generated by MyEclipse Hibernate Tools. --> <session-factory> </session-factory> </hibernate-configuration> package com.wch.op; import org.hibernate.Session; import com.wch.pojo.Admin; public class UserOperation { ?q?一 ????????C??JavaScript ????????U??q??????/span> ?/span>q?l?/span>?面, ??????????????l?果???q?????????/span> ?JavaScript ????l?合?好, ????????U?????????/span>q?l?/span>?/span> 面, ???????一 ??H??玎ͼ ?吧?Q??何! ?????呢? ????/span> q?一 ?q?l???法: ??了?q???em> window.status ????????WWW ?????????C?/span> 一 ????的????中, ???????????' ?????分, ???" ?/span> ?来, ?????l???後, ????; return true?/span> ?了, ?????????? ????W???q?l???子! ?? 单, ?/span> onMouseOver ?method ??????????????hello() ??了, ??/span> ????了, ???下: ?????????一 ??????????子??W?一 ??中, ???q??/span> lastModified ?????法????????q?????|?????????/span> ???期, ???????????????间???????l?果: ???下: ??????????????话, ????????????????_ ??/span> ?????today 中?q??????是: ??q?????today q??????态, q??Java ????E???a ????????需 ??????????????/span> 同????em> today ?????後, ??{?????一 ?????????????/span> (object)??着 ?????get... ?method ???em> today q?????????期?/span> ???getMonth q??method 所 ?????????0~11Q?所 ????1 ??/span> ????1 ??12 月????????後, ??????????????/span> ?慧, ?如: ??????????话, ?????????一 ???/span>??4 ?所 ??????q?一 ????所 ?????能, ??一 ???????W?0?/span> ???????????者:"喂! q???q??了!"?E?式, ??看, q??难! ???q_?元)Q??着 ?月(????1Q, ??着 ?日?????????/span> ??????定, ?下: ???????q?月?日, ?着 ?时?分?U?最 後, ??????你, JavaScript q?????????态, ???????????C??????_ ??????1 / 1 / 1970 0Q?h 开 ??ms(milli seconds) ????????的, q????? ???杂, ??????心, ????????????, ???????????了! ?????????l?一 ?????????敎ͼ ???JavaScript 所 ?的?/span> q?????????一 ??技 ??Ԍ ?q?U?技 ??????~???compiler)中, ????此(?c?| ??????的????JavaScript 最 ?????????/span> ????q???method Q???????q?????话????????l?果: q??一 ???????敎ͼ 0.9836312285070992 ???q??????法: ????????一 ????????敎ͼ ????一 ????敎ͼ ??q??????q???可! ?如: ????????敎ͼsinQ??q?/span> , ??????l????q?, l??????一 ???0 ?1 ??/span> ?数?????????ms ??位, ???l?????????字?/span> ?q?q????q?????????q?l???一 p????敎ͼ ????/span> ???Ӟ ????一 ơ, ??????了! JavaScript ?一 ????????????H??????一 ???H, q??/span> ???H????HTML ?Ӟ ???JavaScript ???|??|?路(Internet Q?/span> ?????????????开 ?一 ??H?q??????q?去, ?????/span> ?一 ???????看! ??E???下: ?method ???一 ????H?W?一 ????"")????q??????H?/span> ????URL ?|?????I???话, ?????一 ?I???H, q???/span> ?q?JavaScript ???西! ?一 ?????????q???开 ??H???字, ?????l????一 ??字, ?????I?白, ??em> Display Window ???/span> ??????息, ??意?????一 q??????所 ??????H?/span> ?????properties)Q?q?????的, ????????????toolbar) ?/span> ??scrollbar)Q?{?{, ?如: ????toolbar = yesQ??????所 ???/span> ???H????一 ???列?????????????H??性, ?????/span> ???????I?白: toolbar ???em> pixels ?分, ?????????| q?????????q???H??/span> ???开 ??H, q????U??msg ?後, ???开 ???????H??了?/span> ?????一 ????HTML ???字?哇! q?????了, ???_ ???/span> ????????form ?????l?????????????????了! q??/span> ?????????q????CGI ????喔! ?????CGI ????了! JavaScript 是一U新的描q语aQ此一语言可以被箝?HTML 的文件之中?/span> 透过 JavaScript 可以做到回应使用者的需求事?(如: form 的输? 而不用Q何的|\ 来回传输资料Q所以当一位用者输入一资料时Q它不用l过传给伺服?(server) 处理Q再传回来的q程Q而直接可以被客户?(client) 的应用程式所处理。你也可 以想像成有一个可执行E式在你的客端上执行一P目前已有一些写好的E式?/span> Internet 上你可以q过ȝ看,以下有一些计器的例子,?Nescape 上?/span> 许多的程式语aQ?JavaScript 则是相当Ҏ了解的语a。JavaScript 创作?/span> 可以不那麽注重程式技巧,所以许?Java 的特性在 Java Script 中ƈ不支援?/span> 如需相关的更多资讯,可以去读?Netscape 的有?/span> Netscape JavaScript 之介l?/span> JavaScript 如何执行呢? Netscape 2.0 beta 3 版以上,可以执?JavaScript 的功能了Q我们测试过臛_ beta 3 版以上可以,其他U类?WWW 览器如:Internet Expore 3.0也有此一功能?/span> 以下我们׃一些例子来告诉你如何将 JavaScript 写在 HTML 文g中,q且体会 一下新语言的特性,我们从第一个例子开始:如何?JavaScript 印出一串文字至 HTML 文g中: 如果你用的 WWW 览器是 Netscape 2.0 beta 3 以上版本的话Q那你就可以 看到相关的结果,而如果你的浏览器q是可以支?JavaScript 的话Q那看v 来就会有一些怪怪的了,以上范例的结果如下: This is a normal HTML document. 如何它|於 HTML 的文件之中而已Q这个新的标{你可以特它攑֜文g 中的M地方?/span> 接下来下一个例子所要介l的是有兛_?(function) 的用。请攑ֿQ函数ƈ 非很难懂的东西,但它却相当有用。函数通常是在 HTML 文g?<body Q的 部䆾被呼叫,而理所当然圎ͼ它最好事先被宣告q放?HTML 文g?<bodyQ?/span> 的部份。好让在 <bodyQ?部分中用到函数Ӟ它已定被读取住来。另外, <scriptQ?标签的有xq语法剖份,你可以用注解的符号将它括hQ以免旧 版或无法d JavaScript 的浏览器dQ而误会了意思! 如果你是使用 Netscape 2.0 beta 3 以上的浏览器Q那以上 JavaScript 语法部䆾 的结果如下,你可以试着按按钮看看有何结果生! 在范?2 中,会产生一个按钮,当你用滑鼠去按它的时候,应该会出?/span> 一个视H上面有“? 你好”的字Ԍ如何Q不错吧Q这个结果是如何产生 的呢Q首先,?<headQ内的函C被蝲入ƈ存於内存中,接着一个新 ?<formQ标{?<input type ="button".....Q将产生一个接钮。然後,你可?/span> 在後面看?'onClick' 的指令,q就是告诉浏览器Q当该按钮被按时Q应会执?/span> onClick 後的函数 'pushbutton()'Q而这个函数在刚刚E式被蝲入时已安放?/span> 记忆体中了!h意,在这个函C我们用到了个C西- alert ?methodQ?/span> ?JavaScript 事先定义好的Q它会以对话视窗产生内涵的讯息,q有一"定" (OK)的按钮?JavaScript 定义了许多的 methodQ你可以q至 Netscape 公司?/span> 获取较完整的讯息。我惌?method 在不久的来会有镉K的一串可以够?/span> 学的Q不q目前的 method 也已l可以做出相当多东西了! 接着下个例子告诉你如何׃个输入型表格中读入用者的输入资料Q?/span> 事实上,q也是加入个函数可以达成的?/span> 现在你可以试试结果如何: (<!- ... -Q? 此部分即我们之前所提到的它可以避免旧版本或是不支援 JavaScript ?WWW 览器因Z认识q些函数而生错误。它的顺序应 该ؓ <scriptQ?/span> 先,接着为注解的开?<!-Q然後是内容Q注解尾 -Q, 最後是 </scriptQ?/span> 另外要注意的一ҎQ语解尾那一行的开头双斜线 "http://" Q不可以省略Q它代表?/span> JavaScript 的注解,若省略了的话Q?-Q之前的字会被误认ؓ?JavaScript 的指令?/span> "onBlur" 事g函数侦知Q於是呼?em> Getname(Str)q个函数来加以取得输入字Ԍ q将它显C在对话视窗上!函数 Getname(this.value) 中的 "this.value" 是你在文 字输入格式中所输入的倹{?/span> q个范例更是帅了Q我们在 HTML 文g档完成了以後Q常会加上一行文?/span> 最後修改的日期Q现在你可不用担心每ơ都要去Ҏ是忘了改了。你可以 很简单的写一个如下的描述语法E式Q就可以自动的ؓ你每ơ生最後修 改的日期了: 以上?document.lastModified 叁数?Netscape 2.0 beta 2 版时是被写成 documeut.lastmodified 的,然而,之後的版本就改ؓ document.lastModifiedQ?/span> 所以注意一?QJavaScript 本n是会区分大小写的Q?em> lastmodified ?lastModified 在它看来是不同的l果?/span> 最後,在这一部分l束之前Q要提醒你一点,像范?4 Q的用法q每一?/span> 机器都是一LQ例如:PC 上跑得很正确的,在工作站上不一定会有相同的 l果Q所以,或许你仍得测一不同机器的l果才会有所定论。当Ӟq一?/span> 是因?JavaScript q正在发展的原因Q最新的讯息q是得去拜访一?/span>Netscape 公司才知道。也怽也不用奇怪,当你隔周再来访时QJavaScript 可能又作?/span> 相当大的改变了呢 在这个例子中又有新的东西了。首先,让我们注意一下,在语法中的注解部?/span>
create table test(test1 varchar(20),test2 varchar(20)
然后向这个表写入一条测试纪?/span>
那么现在开始我们的jsp和数据库之旅吧?/span>
一?/span>jspq接Oracle8/8i/9i数据库(?/span>thin模式Q?/span>
testoracle.jsp如下Q?/span>
<%@ 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";
//orclZ的数据库?/span>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()) {%>
您的W一个字D内容ؓQ?/span><%=rs.getString(1)%>
您的W二个字D内容ؓQ?/span><%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜?/span>");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
二?/span>jspq接Sql Server7.0/2000数据?/span>
testsqlserver.jsp如下Q?/span>
<%@ 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";
//pubsZ的数据库?/span>
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()) {%>
您的W一个字D内容ؓQ?/span><%=rs.getString(1)%>
您的W二个字D内容ؓQ?/span><%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜?/span>");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
三?/span>jspq接DB2数据?/span>
testdb2.jsp如下Q?/span>
<%@ 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";
//sampleZ的数据库?/span>
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()) {%>
您的W一个字D内容ؓQ?/span><%=rs.getString(1)%>
您的W二个字D内容ؓQ?/span><%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜?/span>");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
四?/span>jspq接Informix数据?/span>
testinformix.jsp如下Q?/span>
<%@ 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";
//testDBZ的数据库?/span>
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()) {%>
您的W一个字D内容ؓQ?/span><%=rs.getString(1)%>
您的W二个字D内容ؓQ?/span><%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜?/span>");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
五?/span>jspq接Sybase数据?/span>
testmysql.jsp如下Q?/span>
<%@ 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";
//tsdataZ的数据库?/span>
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()) {%>
您的W一个字D内容ؓQ?/span><%=rs.getString(1)%>
您的W二个字D内容ؓQ?/span><%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜?/span>");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
六?/span>jspq接MySQL数据?/span>
testmysql.jsp如下Q?/span>
<%@ 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"
//testDBZ的数据库?/span>
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()) {%>
您的W一个字D内容ؓQ?/span><%=rs.getString(1)%>
您的W二个字D内容ؓQ?/span><%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜?/span>");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
七?/span>jspq接PostgreSQL数据?/span>
testmysql.jsp如下Q?/span>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/soft"
//softZ的数据库?/span>
String user="myuser";
String password="mypassword";
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()) {%>
您的W一个字D内容ؓQ?/span><%=rs.getString(1)%>
您的W二个字D内容ؓQ?/span><%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜?/span>");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
现在我以我创建的E序Z来进行说?数据库ؓdemo,表的名字为admin
1、POJOc?br />
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
2、创建hibernate.cfg.xml和class.hbm.xml(class指的是POJOcȝ名字)
class.hbm.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.wch.pojo.Admin" table="admin">
<id name="id" type="integer">
<column name="id" />
<generator class="assigned"></generator>
</id>
<property name="username" type="string">
<column name="username" length="32" not-null="false" />
</property>
<property name="password" type="string">
<column name="password" length="20" not-null="false" />
</property>
</class>
</hibernate-mapping>
hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/demo
</property>
<property name="connection.username">root</property>
<property name="connection.password">****</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">mysql5.0</property>
<property name="show_sql">true</property>
<mapping resource="com/wch/pojo/Admin.hbm.xml" />
3、创建应用程序ƈq行代码试:
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public static void main(String[] args)throws Exception{
Configuration config = new Configuration().configure();
// 创徏工厂
SessionFactory factory = config.buildSessionFactory();
// 打开session
Session session = factory.openSession();
// 事务提交
try{
Transaction tx = session.beginTransaction();
// 创徏对象
Admin hb = new Admin();
hb.setId(3);
hb.setUsername("Hibernate3.2");
hb.setPassword("20081202");
//hb.setUsername("WCH");
//hb.setPassword("Hibernate");
// 执行插入语句,在hibernat中操作的是一个对?br />
session.save(hb);
// 提交事务
tx.commit();
}catch(Exception e)
{
System.out.println("error Msg:"+e.getMessage());
}finally{
// close session
session.close();
}
}
}
当前驱动器?br />
COPY 至一个文件复制到另一个位|?br />
DATE 昄或设|日期?br />
DEL 删除臛_一个文件?br />
DIR 昄一个目录中的文件和子目录?br />
DISKCOMP 比较两个软盘的内宏V?br />
DISKCOPY 一个Y盘的内容复制到另一个Y盘?br />
DOSKEY ~辑命o行、调?Windows 命oq创建宏?br />
ECHO 昄消息Q或命令回显打开或关上?br />
ENDLOCAL l束Ҏ件中环境更改的本地化?br />
ERASE 删除臛_一个文件?br />
EXIT 退?CMD.EXE E序(命o解释E序)?br />
FC 比较两个或两套文Ӟq显C?br />
不同处?br />
FIND 在文件中搜烦文字字符丌Ӏ?br />
FINDSTR 在文件中搜烦字符丌Ӏ?br />
FOR Z套文件中的每个文件运行一个指定的命o?br />
FORMAT 格式化磁盘,以便?Windows 使用?br />
FTYPE 昄或修改用于文件扩展名兌的文件类型?br />
GOTO ?Windows 命o解释E序指向批处理程?br />
中某个标明的行?br />
GRAFTABL 启用 Windows 来以囑փ模式昄
扩展字符集?br />
HELP 提供 Windows 命o的帮助信息?br />
IF 执行批处理程序中的条件性处理?br />
LABEL 创徏、更Ҏ删除盘的卷标?br />
MD 创徏目录?br />
MKDIR 创徏目录?br />
MODE 配置pȝ讑֤?br />
MORE 一ơ显CZ个结果屏q?br />
MOVE 文件从一个目录移到另一个目录?br />
PATH 昄或设|可执行文g的搜索\径?br />
PAUSE 暂停Ҏ件的处理q显C消息?br />
POPD q原 PUSHD 保存的当前目录的上一个倹{?br />
PRINT 打印文本文g?br />
PROMPT 更改 Windows 命o提示W?br />
PUSHD 保存当前目录Q然后对其进行更攏V?br />
RD 删除目录?br />
RECOVER 从有问题的磁盘恢复可M息?br />
REM 记录Ҏ件或 CONFIG.SYS 中的注释?br />
REN 重命名文件?br />
RENAME 重命名文件?br />
REPLACE 替换文g?br />
RMDIR 删除目录?br />
SET 昄、设|或删除 Windows 环境变量?br />
SETLOCAL 开始批文g中环境更改的本地化?br />
SHIFT 更换Ҏ件中可替换参数的位置?br />
SORT 对输入进行分cR?br />
START 启动另一个窗口来q行指定的程序或命o?br />
SUBST \径跟一个驱动器号关联?br />
TIME 昄或设|系l时间?br />
TITLE 讄 CMD.EXE 会话的窗口标题?br />
TREE 以图形模式显C驱动器或\径的目录l构?br />
TYPE 昄文本文g的内宏V?br />
VER 昄 Windows 版本?br />
VERIFY 告诉 Windows 是否验证文g是否已正?br />
写入盘?br />
VOL 昄盘h和序列号?br />
XCOPY 复制文g和目录树?/span>
1、编写quartz.properties文g:代码如下:
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO
#org.quartz.scheduler.rmi.export = false
#org.quartz.scheduler.rmi.proxy = false
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 4
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure Plugins
#============================================================================
#org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = /scheduler/quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
2、编写quartz_job.xml
<?xml version='1.0' encoding='utf-8'?>
<quartz>
<job>
<job-detail>
<name>test</name>
<group>DEFAULT</group>
<description>testJobhere</description>
<job-class>scheduler.TestJob</job-class>
<job-data-map allows-transient-data="true">
<entry>
<key>name</key>
<value>test</value>
</entry>
</job-data-map>
</job-detail>
<trigger>
<cron>
<name>testCron</name>
<group>DEFAULT</group>
<job-name>test</job-name>
<job-group>DEFALUT</job-group>
<!--x/? x表示间断启动旉 ?表示执行间隔旉 13启动旉-->
<cron-expression>0 1/2 23 * * ?</cron-expression>
<!--每月1?Ҏ?br />
<cron-expression>0 1 0 1 1-12 ?</cron-expression>
-->
</cron>
</trigger>
</job>
3、编写java代码q行试:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class ZeroCount implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException
{
String name = context.getJobDetail().getJobDataMap().getString("name");
System.out.println(name);
}
}
Z以下l果表示配置成功:
test
4、此步骤是最后一步也是最重要的一?只要加入如下代码的到/WEB-INF/web.xml文g中在指定的时间内׃执行pȝ调度.
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<init-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
参考网?http://www.iocblog.net/project/quartz.html
[16:14:10.437] {http--8888-7} at org.apache.commons.validator.Validator.<init>(Validator.java:188)
[16:14:10.437] {http--8888-7} at org.apache.struts.validator.Resources.initValidator(Resources.java:475)
[16:14:10.437] {http--8888-7} at org.apache.struts.validator.ValidatorForm.validate(ValidatorForm.java:104)
[16:14:10.437] {http--8888-7} at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:928)
[16:14:10.437] {http--8888-7} at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:204)
[16:14:10.437] {http--8888-7} at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
[16:14:10.437] {http--8888-7} at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
[16:14:10.437] {http--8888-7} at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
[16:14:10.437] {http--8888-7} at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
[16:14:10.437] {http--8888-7} at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103)
[16:14:10.437] {http--8888-7} at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:187)
[16:14:10.437] {http--8888-7} at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:266)
[16:14:10.437] {http--8888-7} at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:270)
[16:14:10.437] {http--8888-7} at com.caucho.server.port.TcpConnection.run(TcpConnection.java:678)
[16:14:10.437] {http--8888-7} at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:721)
[16:14:10.437] {http--8888-7} at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:643)
[16:14:10.437] {http--8888-7} at java.lang.Thread.run(Thread.java:619)
以上错误是因为struts-config.xml文g?lt;form-beans>中form的\径不正确所?
1QCascading Style Sheets 层叠样式?/strong>
2QContent Scrambling System DVD电媄的加密系l?/strong>
3QCast Semi-Steel 半铸? 钢性铸?/strong>
4QCollege Scholarship Service 大学奖学金处
其中在网l上最常见的是Cascading Style SheetsQ层叠样式表Q?br />
什么是CSS呢?你可能急迫的想知道{案。但是空泛的文字描述意义不大Q让我们先来一Ҏ性体验吧。看看这个没有添加CSS的HTML文gQhttp://www.csszengarden.com/zengarden-sample.html
是一个普普通通的|页。然而通过l这个文件添加的CSS规则Q我们可以得到十分美观的|页Qhttp://www.csszengarden.com/
q还不是全部Q不改动HTMLQ只是通过d不同的CSS规则Q我们就可以得到各种不同样式的网:
http://www.csszengarden.com/?cssfile=/208/208.css&page=0
好了Q下面我们再来回{什么是CSSq个问题?br />
什么是Cascading Style SheetsQ层叠样式表Q?br />
* CSS是Cascading Style Sheets(层叠样式?的简U?
* CSS语言是一U标记语a,它不需要编?可以直接由浏览器执行(属于览器解释型语言).
* 在标准网设计中CSS负责|页内容(XHTML)的表?
* CSS文g也可以说是一个文本文?它包含了一些CSS标记,CSS文g必须使用css为文件名后缀.
* 可以通过单的更改CSS文g,改变|页的整体表现Ş?可以减少我们的工作量,所以她是每一个网设计h员的必修?
* CSS是由W3C的CSS工作l生和l护?
可以用以下三U方式将样式表加入您的网c而最接近目标的样式定义优先权高。高优先权样式将l承低优先权样式的未重叠定义但覆盖重叠的定义。例外请参阅 !important 声明?
铑օ外部样式表文?(Linking to a Style Sheet)
你可以先建立外部样式表文Ӟ.cssQ,然后使用HTML的link对象。示例如下:
<head>
<title>文档标题</title>
<link rel=stylesheet type="text/css">
</head>
而在XML中,你应该如下例所C在声明Z加入Q?
<? xml-stylesheet type="text/css" ?>
定义内部样式块对?(Embedding a Style Block)
你可以在你的HTML文档?lt;HTML>?lt;BODY>标记之间插入一?lt;STYLE>...</STYLE>块对象?定义方式请参阅样式表语法。示例如下:
<html>
<head>
<title>文档标题</title>
<style type="text/css">
<!--
body {font: 10pt "Arial"}
h1 {font: 15pt/17pt "Arial"; font-weight: bold; color: maroon}
h2 {font: 13pt/15pt "Arial"; font-weight: bold; color: blue}
p {font: 10pt/12pt "Arial"; color: black}
-->
</style>
</head>
<body>
h意,q里style对象的type属性设|ؓ"text/css"Q是允许不支持这cd的浏览器忽略样式表单?
内联定义 (Inline Styles)
内联定义x在对象的标记内用对象的style属性定义适用其的样式表属性。示例如下:
q一行被增加了左右的外补?
Cascading Style SheetsQ层叠样式表Q的历史
?990q代初HTML被发明开始样式表׃各种形式出现了,不同的浏览器l合了它们各自的样式语言Q读者可以用这些样式语a来调节网늚昄方式。一开始样式表是给读者用的,最初的HTML版本只含有很的昄属性,读者来军_|页应该怎样被显C?
但随着HTML的成长,Z满设计师的要求QHTML获得了很多显C功能。随着q些功能的增加外来定义样式的语言来没有意义了?
1994q哈?#183;利提ZCSS的最初徏议。伯?#183;波斯QBert BosQ当时正在设计一个叫做Argo的浏览器Q他们决定一起合作设计CSS?
当时已经有过一些样式表语言的徏议了Q但CSS是第一个含?#8220;层叠”的主意的。在CSS中,一个文件的样式可以从其它的样式表中l承下来。读者在有些地方可以使用他自己更喜欢的样式,在其他地方则l承Q或“层叠”作者的样式。这U层叠的方式使作者和读者都可以灉|地加入自q设计Q合各人的爱好?
哈坤?994q在芝加哥的一ơ会议上W一ơ展CZCSS的徏议,1995q他与L斯一起再ơ展C个徏议。当时W3C刚刚建立QW3C对CSS的发展很感兴,它ؓ此组l了一ơ讨Z。哈坤、L斯和其他一些hQ比如微软的托马?#183;雷尔登)是这个项目的主要技术负责h?996q底QCSS已经完成?996q?2月CSS要求的第一版本被出版?
1997q初QW3C内组l了专门CSS的工作组Q其负责人是克里?#183;里雷。这个工作组开始讨论第一版中没有涉及到的问题Q其l果?998q?月出版的W二版要求。到2004qؓ止,W三版还未出版?br />
* 1996qW3C正式推出了CSS1.
* 1998qW3C正式推出了CSS2.
* CSS2.1是W3C现在正在推荐使用?
* CSS3现在q处于开发中.
|页设计中常用的CSS属?/strong>
文字或元素的颜色 color
背景颜色 background-color
背景囑փ background-image
字体 font-family
文字大小 font-size
列表样式 list
鼠标样式 cursor
Ҏ样式 border
内补?padding
外边?margin
{?..
CSS的定义是׃个部分构?
选择W?selector)Q属?properties)和属性的取?value)?br />
语法: selector {property: value} (选择W?{属?值})
说明:
·选择W是可以是多UŞ式,一般是你要定义样式的HTML标记Q例如BODY、P、TABLE……Q你可以通过此方法定义它的属性和|属性和D用冒号隔开:
例子:body {color: black}Q此例的效果是ə面中的文字为黑艌Ӏ?br />
·如果属性的值是多个单词l成Q必dg加引P比如字体的名U经常是几个单词的组?
例子:p {font-family: "sans serif"} (定义D落字体为sans serif)
· 如果需要对一个选择W指定多个属性时Q我们用分号将所有的属性和值分开:
例子:p {text-align: center; color: red} (D落居中排列;q且D落中的文字为红?
2. 选择W组
你可以把相同属性和值的选择W组合v来书写,用逗号选择W分开Q这样可以减样式重复定?
h1, h2, h3, h4, h5, h6 { color: green } (q个l里包括所有的标题元素Q每个标题元素的文字都ؓl色)
p, table{ font-size: 9pt } (D落和表格里的文字尺ؓ9号字)
效果完全{效?
p { font-size: 9pt }
table { font-size: 9pt }
3. c选择W?br />
用类选择W你能够把相同的元素分类定义不同的样式,定义c选择W时Q在自定cȝ名称前面加一个点受假如你惌两个不同的段落,一个段落向叛_齐,一个段落居中,你可以先定义两个c?
p.right {text-align: right}
p.center {text-align: center}
然后用不在不同的D落里,只要在HTML标记里加入你定义的class参数:
q个D落向右寚w?br />
q个D落是居中排列的
c选择W还有一U用法,在选择W中省略HTML标记名,q样可以把几个不同的元素定义成相同的样式:
.center {text-align: center} (定义.center的类选择Wؓ文字居中排列)
q样的类可以被应用到M元素上。下面我们h1元素(标题1)和p元素(D落)都归?#8220;center”c,q两个元素的样式都跟随“.center”q个c选择W?
<h1 class="center">q个标题是居中排列的</h1>
q个D落也是居中排列?br />
注意:q种省略HTML标记的类选择W是我们l后最常用的CSSҎQ用这U方法,我们可以很方便的在Q意元素上套用预先定义好的cL式?br />
4. ID选择W?br />
在HTML面中ID参数指定了某个单一元素QID选择W是用来对这个单一元素定义单独的样式?br />
ID选择W的应用和类选择W类|只要把CLASS换成ID卛_。将上例中类用ID替代:
q个D落向右寚w
定义ID选择W要在ID名称前加上一?#8220;#”受和c选择W相同,定义ID选择W的属性也有两U方法。下面这个例子,ID属性将匚w所有id="intro"的元?
#intro
{
font-size:110%;
font-weight:bold;
color:#0000ff;
background-color:transparent
} (字体寸为默认尺寸的110%;_体;蓝色;背景颜色透明)
下面q个例子QID属性只匚wid="intro"的段落元?
p#intro
{
font-size:110%;
font-weight:bold;
color:#0000ff;
background-color:transparent
}
注意:ID选择W局限性很大,只能单独定义某个元素的样式,一般只在特D情况下使用?br />
5. 包含选择W?br />
可以单独ҎU元素包含关pd义的样式表,元素1里包含元?Q这U方式只对在元素1里的元素2定义Q对单独的元?或元?无定义,例如:
table a
{
font-size: 12px
}
在表格内的链接改变了样式Q文字大ؓ12象素Q而表格外的链接的文字仍ؓ默认大小?br />
6. 样式表的层叠?br />
层叠性就是承性,样式表的l承规则是外部的元素样式会保留下来承给q个元素所包含的其他元素。事实上Q所有在元素中嵌套的元素都会l承外层元素指定的属性|有时会把很多层嵌套的样式叠加在一P除非另外更改。例如在DIV标记中嵌套P标记:
div { color: red; font-size:9pt}
……
q个D落的文字ؓU色9号字
(P元素里的内容会承DIV定义的属?
注意:有些情况下内部选择W不l承周围选择W的|但理Zq些都是Ҏ的。例如,上边界属性值是不会l承的,直觉上,一个段落不会同文档BODY一L上边界倹{?br />
另外Q当样式表扉K到冲H时QL以最后定义的样式为准。如果上例中定义了P的颜?
div { color: red; font-size:9pt}
p {color: blue}
……
q个D落的文字ؓ蓝色9号字
我们可以看到D落里的文字大小?号字是承div属性的Q而color属性则依照最后定义的?br />
不同的选择W定义相同的元素Ӟ要考虑C同的选择W之间的优先U。ID选择W,c选择W和HTML标记选择W,因ؓID选择W是最后加上元素上的,所以优先最高,其次是类选择W。如果想越q三者之间的关系Q可以用!important提升样式表的优先权,例如:
p { color: #FF0000!important }
.blue { color: #0000FF}
#id1 { color: #FFFF00}
我们同时寚w面中的一个段落加上这三种样式Q它最后会依照?importantx的HTML标记选择W样式ؓU色文字。如果去?importantQ则依照优先权最高的ID选择Wؓ黄色文字?br />
7. 注释:/* ... */
你可以在CSS中插入注释来说明你代码的意思,注释有利于你或别Z后编辑和更改代码时理解代码的含义。在览器中Q注释是不显C的。CSS注释?/*" 开_?*/" l尾Q如?
/* 定义D落样式?*/
p
{
text-align: center; /* 文本居中排列 */
color: black; /* 文字为黑?*/
font-family: arial /* 字体为arial */
}
css可以用Q何写文本的工兯行开?如文本工?dreamweaver开?br />
css也是一U语a,q种语言要和html或者xhtml语言相结合才起作?
css单来说就是用来美化网는?用css语言来控制网늚外观
举个例子
xhtml部分:
<ul>
<li>主页</li>
<li>留言</li>
<li>论坛</li>
</ul>
此时在页面上的表辑Ş式是一个竖向列?q样不够观,
可以css来改善这个列表ؓ一个横向导航条和超链接
css部分:
ul{list-style:none;margin:0px;padding:0px}
ul li{margin:0px;padding:0px;float:left;}
ul li a{display:block;width:100px;height:30px;background:#efefef;color:#333;text-decoration:none;text-align:center}
ul li a:hover{background:#333;color:#fff;}
d上css?q个列表变成横向的导航条?链接是E色背?灰色字体,没有下划U?高度?0像素,宽度?00像素
当我们鼠标经q这个超U链接时?变成灰色背景,白色字体
在主制作时采用CSS技术,可以有效地对面的布局、字体、颜艌Ӏ背景和其它效果实现更加_的控制?
只要对相应的代码做一些简单的修改Q就可以改变同一面的不同部分,或者页C同的|页的外观和格式?
它的作用可以辑ֈQ?
Q?Q在几乎所有的览器上都可以用?
Q?Q以前一些非得通过囄转换实现的功能,现在只要用CSS可以轻村֮玎ͼ从而更快地下蝲面?
Q?Qə面的字体变得更漂亮Q更Ҏ~排Qə面真正赏心悦目?
Q?Q你可以L地控刉面的布局 ?
Q?Q你可以许多网늚风格格式同时更新Q不用再一一地更新了。你可以站点上所有的|页风格都用一个CSS文gq行控制Q只要修改这个CSS文g中相应的行,那么整个站点的所有页面都会随之发生变动?
想一惻I没有使用CSS前我们是如何控制字体的颜色和大小以及所使用的字体的Q我们一般用HTML标签来实玎ͼ代码非常烦琐?br />
很难惌Q如果在一个页面里需要频J地更替字体的颜色大,最l生成的HTML代码的长度一定臃肿不堪?
说实话,CSS是Z化这L工作诞生的,当然其功能决非这么简单?
CSS是通过寚w面结构的风格控制的思想Q控制整个页面的风格的?
式样单放在页面中Q通过览器的解释执行Q是完全的文本,M懂得HTML的h都可以掌握,非常的容易。甚臛_一些非常老的览器,也不会生页面q现象?br />
CSS的一大优Ҏ它的囄传输速度比较完全的HTML|页要快一炏V?br />
CSS:
Chinese,Surface-to-Surface
中国面对面导?UEQIQN
CSSh两面性。就像它在格式化文本、导航栏、图片以及其他小的|页斚w很棒一P当你准备好布局完整的网|Q它真正可怕的一面也展现出来了?br />
CSS布局有两U风格——绝对定位和动。绝对定位让你把一个元素以像素U的_性定位在|页的Q何位|——或者理Z是这栗这U整体控制o人兴奋,如你将在下一章中所看到的,但是实际上很隑֮现。这是大量|页使用Z动的布局的原因,也是本章的主题?br />
CSS布局如何q行
How CSS Layout Works
如在W?章中讨论q的QHTML的局限性迫使设计师们去开发更聪明的方式来使他们的|页更美观。过L常用的工h[table]标签Q它本是用来创徏电子数据表——比如由数据行和列组成的信息昄表。但是设计师们却用HTML的表格来创徏一U用来组l网内容的脚手Ӟ见图11-1Q。可是由于[table]标签本来不是要用于布局的,因此设计师们不得不经总各种不寻常的方式来用这个标{䏀—比如把一个表格放在另一个表格的单元里面——仅仅ؓ了得C们想要的效果。这U方法的工作量很大,增加了大量额外的HTML代码Qƈ使得后面要修改设计很难。但是在CSS出现之前Q那是|页设计师们所拥有的一切办法?br />
如果你已l习惯于使用[table]标签Q那么当你开始用CSSq行布局Ӟ必须发展一U新的思维。首先,忘掉行和列(q用表格时的一U重要的观念Q。没?br />
列跨度、行跨度和格子状的表格结构在CSS中是找不到的。然而,你可以把一个标{ֽ成一个表格单元。有了表格单元,标签是把你要的内容定位在网区域的一个逻辑位置。此外,如你所见,CSS设计l常把一个div嵌套在另一个div里面Q就像你把表格嵌套在表格里面来获得特定的效果一样——但是,q运的是QCSSҎ只用得多的HTML代码?br />
强大的标{?br />
The Mighty Tag
无论使用表格q是CSSQ网布局都是把大块的内容放进|页的不同区域里面。有了CSSQ最常用来组l内容的元素是标签。如W?8|qͼ标签是没有固有格式化属性的一个HTML元素Q除了浏览器把这个标{ֽ成前后有换行的块之外Q;反之Q它被用来标识元素的一个逻辑l合或者网中的一个分区?br />
你将代表性地把一大块属于一LHTML包围在一个里面。图11-1中包含logo和导航栏的元素占据了|页剙Q因此用一个标{把它们包围h很有意义。至,你要l网늚所有主要区域包含标{,例如横幅、主要内容区域、工h、页脚,{等。但是它也可能把一个或者更多的div包在一个里面。一U最常用的方法就是把<body>标签里面的HTML包在一个里面。然后可以通过把CSS应用到包装,讄基础的页面属性。你可以l网内容设定一个整体的宽度Q设|左边距和右边距Q或者把所有网内容在屏幕的中间居中。(在第313늚教程中,你有Z用到一个包装。)
一旦已l把标签攑֜了适当的位|上Q再l每个标{添加一个类或者IDQ变成你分别Ҏ个定义样式的句柄。对于只出现一ơ和形成|页的基本构建块的网部位,设计师们通常使用一个ID。一个网|q区域的?br />
{h可能像这P。你可以对一个ID每页只用一ơ,因此当有一个多ơ显C的元素Ӟq一个类代替。如果你有几个定位照片和照片说明的divӞ可以创徏一个样式像q样Q?br />
有了cMq些的样式,可以定位各U各L|页元素了。利用CSS的float属性,你可以定位不同的内容块给一张网늚左边或者右边(或者一个包含块比如另一个的左边或者右边)?br />
至理名言
更多q更好
虽然div对于CSS布局很重要,但也别对你的|页滥用div。一个常见的陷阱是相信你必须把一张网中的一切都包围在一个标{N面。假设你的主D栏是一个链接的无序列表
Q就像第218中所qͼ。由于它是一个重要的元素Q你可能会试探用一个来把它围v来:<ul>...</ul>
。但是当<ul>标签唾手可得Ӟ没有必要去d一个了。只?lt;ul>包含主要的导航栏链接Q就只需dID样式l这个标{:<ul id= "mainNav">。多余的只是一些没有必要的代码?br />
jspSmartUpload是由www.jspsmart.com|站开发的一个可免费使用的全功能的文件上传下载组Ӟ适于嵌入执行上传下蝲操作的JSP文g中。该lg有以下几个特点:
1、用简单。在JSP文g中仅仅书写三五行JAVA代码可以搞定文件的上传或下载,方便?
2、能全程控制上传。利用jspSmartUploadlg提供的对象及其操作方法,可以获得全部上传文g的信息(包括文g名,大小Q类型,扩展名,文g数据{)Q方便存取?
3、能对上传的文g在大、类型等斚w做出限制。如此可以o掉不W合要求的文件?
4、下载灵zR仅写两行代码,p把Web服务器变成文件服务器。不文件在Web服务器的目录下或在其它Q何目录下Q都可以利用jspSmartUploadq行下蝲?
5、能文件上传到数据库中Q也能将数据库中的数据下载下来。这U功能针对的是MYSQL数据库,因ؓ不具有通用性,所以本文不准备举例介绍q种用法?
jspSmartUploadlg可以?a >http://www.edufans.com/html/JSP/JSP_down/2006/200610054829.html|站上自׃载,压羃包的名字是jspSmartUpload.zip。下载后Q用WinZip或WinRAR其解压到Tomcat的webapps目录下(本文以Tomcat服务器ؓ例进行介l)。解压后Q将webapps/jspsmartupload目录下的子目录Web-inf名字改ؓ全大写的WEB-INFQ这样一改jspSmartUploadcL能用。因为TomcatҎ件名大小写敏感,它要求Web应用E序相关的类所在目录ؓWEB-INFQ且必须是大写。接着重新启动TomcatQ这样就可以在JSP文g中用jspSmartUploadlg了?
注意Q按上述Ҏ安装后,只有webapps/jspsmartupload目录下的E序可以使用jspSmartUploadlgQ如果想让Tomcat服务器的所有Web应用E序都能用它Q必d如下工作Q?
1Q进入命令行状态,目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下?
2Q运行JAR打包命oQjar cvf jspSmartUpload.jar com
Q也可以打开资源理器,切换到当前目录,?span>WinZipcom目录下的所有文件压~成jspSmartUpload.zipQ然后将jspSmartUpload.zip换名为jspSmartUpload.jar文g卛_。)
3Q将jspSmartUpload.jar拯到Tomcat的shared/lib目录下?
二、相关类说明?/span>
?span> Filec?/span>
q个cd装了一个上传文件的所有信息。通过它,可以得到上传文g的文件名、文件大、扩展名、文件数据等信息?
FilecM要提供以下方法:
1、saveAs作用Q将文g换名另存?
原型Q?
public void saveAs(java.lang.String destFilePathName)
?
public void saveAs(java.lang.String destFilePathName, int optionSaveAs)
其中Q?span>destFilePathName是另存的文g名,optionSaveAs是另存的选项Q该选项有三个|分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUALQSAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系l的根目录ؓ文g根目录另存文ӞSAVEAS_VIRTUAL表明以Web应用E序的根目录为文件根目录另存文gQSAVEAS_AUTO则表Clg军_Q当Web应用E序的根目录存在另存文g的目录时Q它会选择SAVEAS_VIRTUALQ否则会选择SAVEAS_PHYSICAL?
例如Q?span>saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)执行后若Web服务器安装在C盘,则另存的文g名实际是c:uploadsample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)执行后若Web应用E序的根目录是webapps/jspsmartuploadQ则另存的文件名实际是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)执行时若Web应用E序根目录下存在upload目录Q则其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)Q否则同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)?
Q对?span>WebE序的开发来_最好用SAVEAS_VIRTUALQ以便移植?
2、isMissing
作用Q这个方法用于判断用h否选择了文Ӟ也即对应的表单项是否有倹{选择了文件时Q它q回false。未选文件时Q它q回true?
原型Q?span>public boolean isMissing()
3、getFieldName
作用Q取HTML表单中对应于此上传文件的表单的名字?
原型Q?span>public String getFieldName()
4、getFileName
作用Q取文g名(不含目录信息Q?
原型Q?span>public String getFileName()
5、getFilePathName
作用Q取文g全名Q带目录Q?
原型Q?span>public String getFilePathName
6、getFileExt
作用Q取文g扩展名(后缀Q?
原型Q?span>public String getFileExt()
7、getSize
作用Q取文g长度Q以字节计)
原型Q?span>public int getSize()
8、getBinaryData
作用Q取文g数据中指定位Ud的一个字节,用于文件等处理?
原型Q?span>public byte getBinaryData(int index)。其中,index表示位移Q其值在0到getSize()-1之间?
?span> Filesc?/span>
q个c表C所有上传文件的集合Q通过它可以得C传文件的数目、大等信息。有以下ҎQ?
1、getCount
作用Q取得上传文件的数目?
原型Q?span>public int getCount()
2、getFile
作用Q取得指定位Ud的文件对?span>FileQ这是com.jspsmart.upload.FileQ不是java.io.FileQ注意区分)?
原型Q?span>public File getFile(int index)。其中,index为指定位U,其值在0到getCount()-1之间?
3、getSize
作用Q取得上传文件的总长度,可用于限制一ơ性上传的数据量大?
原型Q?span>public long getSize()
4、getCollection
作用Q将所有上传文件对象以Collection的Ş式返回,以便其它应用E序引用Q浏览上传文件信息?
原型Q?span>public Collection getCollection()
5、getEnumeration
作用Q将所有上传文件对象以EnumerationQ枚举)的Ş式返回,以便其它应用E序览上传文g信息?
原型Q?span>public Enumeration getEnumeration()
?span> Requestc?/span>
q个cȝ功能{同?span>JSP内置的对象request。只所以提供这个类Q是因ؓ对于文g上传表单Q通过request对象无法获得表单的|必须通过jspSmartUploadlg提供的Request对象来获取。该cL供如下方法:
1、getParameter
作用Q获取指定参C倹{当参数不存在时Q返回gؓnull?
原型Q?span>public String getParameter(String name)。其中,name为参数的名字?
2、getParameterValues
作用Q当一个参数可以有多个值时Q用此方法来取其倹{它q回的是一个字W串数组。当参数不存在时Q返回gؓnull?
原型Q?span>public String[] getParameterValues(String name)。其中,name为参数的名字?
3、getParameterNames
作用Q取?span>Request对象中所有参数的名字Q用于遍历所有参数。它q回的是一个枚丑֞的对象?
原型Q?span>public Enumeration getParameterNames()
?SmartUploadc?/strong>q个cd成上传下载工作?
AQ上传与下蝲q的方法:
只有一个:initialize?
作用Q执行上传下载的初始化工作,必须W一个执行?
原型Q有多个Q主要用下面这个:
public final void initialize(javax.servlet.jsp.PageContext pageContext)
其中QpageContext为JSP面内置对象Q页面上下文Q?
BQ上传文件用的ҎQ?/strong>
1、upload
作用Q上传文件数据。对于上传操作,W一步执行initializeҎQ第二步p执行q个Ҏ?
原型Qpublic void upload()
2、save
作用Q将全部上传文g保存到指定目录下Qƈq回保存的文件个数?
原型Qpublic int save(String destPathName)
和public int save(String destPathName,int option)
其中QdestPathName为文件保存目录,optionZ存选项Q它有三个|分别是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同FilecȝsaveAsҎ的选项之值类|SAVE_PHYSICAL指示lg文件保存到以操作系l根目录为文件根目录的目录下QSAVE_VIRTUAL指示lg文件保存到以Web应用E序根目录ؓ文g根目录的目录下,而SAVE_AUTO则表C由lg自动选择?
注:save(destPathName)作用{同于save(destPathName,SAVE_AUTO)?
3、getSize
作用Q取上传文g数据的总长?
原型Qpublic int getSize()
4、getFiles
作用Q取全部上传文gQ以Files对象形式q回Q可以利用Filescȝ操作Ҏ来获得上传文件的数目{信息?
原型Qpublic Files getFiles()
5、getRequest
作用Q取得Request对象Q以便由此对象获得上传表单参C倹{?
原型Qpublic Request getRequest()
6、setAllowedFilesList
作用Q设定允怸传带有指定扩展名的文Ӟ当上传过E中有文件名不允许时Q组件将抛出异常?
原型Qpublic void setAllowedFilesList(String allowedFilesList)
其中QallowedFilesList为允怸传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想允许上传那些没有扩展名的文gQ可以用两个逗号表示。例如:setAllowedFilesList("doc,txt,,")允怸传带doc和txt扩展名的文g以及没有扩展名的文g?
7、setDeniedFilesList
作用Q用于限制上传那些带有指定扩展名的文件。若有文件扩展名被限Ӟ则上传时lg抛出异常?
原型Qpublic void setDeniedFilesList(String deniedFilesList)
其中QdeniedFilesList为禁止上传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想止上传那些没有扩展名的文gQ可以用两个逗号来表C。例如:setDeniedFilesList("exe,bat,,")禁止上传带exe和bat扩展名的文g以及没有扩展名的文g?
8、setMaxFileSize
作用Q设定每个文件允怸传的最大长度?
原型Qpublic void setMaxFileSize(long maxFileSize)
其中QmaxFileSizeZؓ每个文g允许上传的最大长度,当文件超出此长度Ӟ不被上传?
9、setTotalMaxFileSize
作用Q设定允怸传的文g的总长度,用于限制一ơ性上传的数据量大?
原型Qpublic void setTotalMaxFileSize(long totalMaxFileSize)
其中QtotalMaxFileSize为允怸传的文g的总长度?
CQ下载文件常用的Ҏ
1、setContentDisposition
作用Q将数据q加到MIME文g头的CONTENT-DISPOSITION域。jspSmartUploadlg会在q回下蝲的信息时自动填写MIME文g头的CONTENT-DISPOSITION域,如果用户需要添加额外信息,L此方法?
原型Qpublic void setContentDisposition(String contentDisposition)
其中QcontentDispositiond的数据。如果contentDisposition为nullQ则lg自动添?attachment;"Q以表明下载的文g作ؓ附gQ结果是IE览器将会提C另存文Ӟ而不是自动打开q个文gQIE览器一般根据下载的文g扩展名决定执行什么操作,扩展名ؓdoc的将用wordE序打开Q扩展名为pdf的将用acrobatE序打开Q等{)?
2、downloadFile
作用Q下载文件?
原型Q共有以下三个原型可用,W一个最常用Q后两个用于Ҏ情况下的文g下蝲Q如更改内容cdQ更改另存的文g名)?
?public void downloadFile(String sourceFilePathName)
其中QsourceFilePathName下蝲的文件名Q带目录的文件全名)
?public void downloadFile(String sourceFilePathName,String contentType)
其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别)?
?public void downloadFile(String sourceFilePathName,String contentType,String destFileName)
其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别),destFileNameZ载后默认的另存文件名?
三、文件上传篇
?表单要求
对于上传文g的FORM表单Q有两个要求Q?
1、METHOD应用POSTQ即METHOD="POST"?
2、增加属性:ENCTYPE="multipart/form-data"
下面是一个用于上传文件的FORM表单的例子:
?上传的例?/strong>
1、上传页面upload.html
本页面提供表单,让用户选择要上传的文gQ点?上传"按钮执行上传操作?
面源码如下Q?
2、上传处理页面do_upload.jsp
本页面执行文件上传操作。页面源码中详细介绍了上传方法的用法Q在此不赘述了?
面源码如下Q?
四、文件下载篇
1、下载链接页面download.html
面源码如下Q?
2、下载处理页面do_download.jsp do_download.jsp展示了如何利用jspSmartUploadlg来下载文Ӟ从下面的源码中就可以看到Q下载何其简单?
源码如下Q?
3、如何下载中文文?/strong>
jspSmartUpload虽然能下载文Ӟ但对中文支持不。若下蝲的文件名中有汉字Q则览器在提示另存的文件名Ӟ昄的是一堆ؕ码,很扫人兴。上面的例子是q样。(q个问题也是众多下蝲lg所存在的问题,很少有h解决Q搜索不到相兌料,可叹Q)
ZljspSmartUploadlg增加下蝲中文文g的支持,我对该组件进行了研究Q发现对q回l浏览器的另存文件名q行UTF-8~码后,览器便能正显CZ文名字了。这是一个o人高兴的发现。于是我对jspSmartUploadlg的SmartUploadcd了升U处理,增加了toUtf8Stringq个ҎQ改动部分源码如下:
注意源码中粗体部分,原jspSmartUploadlg对返回的文g未作M处理Q现在做了编码的转换工作Q将文g名{换ؓUTF-8形式的编码Ş式。UTF-8~码对英文未作Q何处理,对中文则需要{换ؓ%XX的Ş式。toUtf8StringҎ中,直接利用Java语言提供的编码{换方法获得汉字字W的UTF-8~码Q之后将其{换ؓ%XX的Ş式?
源码编译后打包成jspSmartUpload.jarQ拷贝到Tomcat的shared/lib目录下(可ؓ所有WEB应用E序所׃nQ,然后重启Tomcat服务器就可以正常下蝲含有中文名字的文件了。另QtoUtf8StringҎ也可用于转换含有中文的超U链接,以保证链接的有效Q因为有的WEB服务器不支持中文链接?
结QjspSmartUploadlg是应用JSPq行B/SE序开发过E中l常使用的上传下载组Ӟ它用简单,方便。现在我又ؓ其加上了下蝲中文名字的文件的支持Q真个是如虎ȝQ必赢得更多开发者的青睐?
<a href="tpage.htm" onMouseOver="window.status='Just another stupid link...'; return true">
?q???????l?<a> ??{????onMouseOver ?methodQ????????
<html>
<head>
<script language="LiveScript">
<!-- Hiding
function hello() {
alert("?|?");
}
</script>
</head>
<body>
<a href="" onMouseOver="hello()">link</a>
</body>
</html>
????是: 14:4
????为: 6/3/2008<script language="LiveScript">
<!-- Hiding
today = new Date()
document.write("????是: ",today.getHours(),":",today.getMinutes())
document.write("<br>????为: ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());
// end hiding contents -->
</script>
???中, ???需 ????一 ????敎ͼ q????today= new Date()??成?
?????外, ???????????????????下:
<html>
<head>
<script language="LiveScript">
function RandomNumber() {
today = new Date();
num = Math.abs(Math.sin(today.getTime()));
return num;
}
</script>
</head>
<body>
<script language="LiveScript">
<!--
document.write("This is a random number:", RandomNumber());
// -->
</script>
</body>
</html>
<html>
<head>
<script language="LiveScript">
function WinOpen() {
msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");
msg.document.write("<HEAD><TITLE>?|?</TITLE></HEAD>");
msg.document.write("<CENTER><H1>???</H1><h2>q??lt;B>JavaScript</B>所 开 ??H?</h2></CENTER>");
}
</script>
</head>
<body>
<form>
<input type="button" name="Button1" value="Push me" onclick="WinOpen()">
</form>
</body>
</html>
q?????????????数?q?????WinOpen()??着 一 ?open
location
directories
status
menubar
scrollbars
resizable
copyhistory
width=pixels
height=pixels
JavaScript ?Java 很类|但到底ƈ不一P Java 是一U比 JavaScript 更复?/span>
如何执行 JaveScriptQ?范例 1Q?/span>
<html>
<head>
My first JavaScript!
</head>
<body>
<br>
This is a normal HTML document.
<br>
<script language="LiveScript">
document.write("q是?JavaScript 印出?")
</script>
<br>
Back in HTML again.
</body>
</html>
q是?JavaScript 印出?
Back in HTML again. 此一范例q没有太大的用处Q它只是要告诉你如何使用<script>的标{,q?/span>
<html>
<head>
<script language="LiveScript">
function pushbutton() {
alert("? 你好");
}
</script>
</head>
<body>
<form>
<input type="button" name="Button1" value="Push me" onclick="pushbutton()">
</form>
</body>
</html>
<html>
<head>
<script language="LiveScript">
<!-- hide script from old browsers
function getname(str) {
alert("哈罗! "+ str+"!");
}
// end hiding contents -->
</script>
</head>
<body>
Please enter your name:
<form>
<input type="text" name="name" onBlur="getname(this.value)" value="">
</form>
</body>
</html>
误入你的名字:
q个例子可以让用者输入一D|字,然後再输入完毕後l由 <inputQ标{中?/span>
<html>
<body>
This is a simple HTML- page.
<br>
Last changes:
<script language="LiveScript">
<!-- hide script from old browsers
document.write(document.lastModified)
// end hiding contents -->
</script>
</body>
</html>
l构
QhtmlQ?
QheadQ?
QtitleQ标题<titleQ?
Q?headQ?
QbodyQ?.........文g内容..........
Q?bodyQ?
Q?htmlQ?
1.文g标题
QtitleQ?.........Q?titleQ?
2.文g更新--QmetaQ?
??0U后自动更新一?
Qmeta http-equiv="refresh" content=10Q?
??0U后自动q结到另一文g
Qmeta http-equiv="refresh" content="10QURL=Ʋ连l文件之URL"Q?
3.查询用表?-Qisindex>
若欲讑֮查询栏位前的提示文字Q?
Qisindex prompt="提示文字"Q?
4.预设的基准\?-Qbase>
Qbase href="攄文g的主ZURL"Q?
版面
1.标题文字 Qh#Q?.........Q?h#Q?#=1~6Qh1为最大字Qh6为最字
2.字体变化 QfontQ?.........Q?fontQ?
?】字体大?Qfont size=#Q?.........Q?fontQ?#=1~7Q数字愈大字也愈?
?】指定字?Qfont face="字型名称"Q?.........Q?fontQ?
?】文字颜?Qfont color=#rrggbbQ?.........Q?fontQ?rrQ表U色QredQ色?ggQ表l色QgreenQ色?bbQ表蓝色QblueQ色?
3.昄字?QsmallQ?.........Q?smallQ?
4.昄大字?QbigQ?.........Q?bigQ?
5._体?QbQ?.........Q?bQ?
6.斜体?QiQ?.........Q?iQ?
7.打字机字?QttQ?.........Q?ttQ?
8.底线 QuQ?.........Q?uQ?
9.删除U?QstrikeQ?.........Q?strikeQ?
10.下标?QsubQ?.........Q?subQ?
11.上标?Qsup>..........Q?supQ?
12.文字闪烁效果 QblinkQ?.........Q?blinkQ?
13.换行 QbrQ?
14.分段 QpQ?
15.文字的对齐方?Qp align="#"Q?#号可?leftQ表向左寚wQ预讑ր| centerQ表向中寚w rightQ表向右寚w P.S.Qp align="#"Q之后的文字都会以所讄寚w方式昄Q?直到出现另一个<p align="#"Q改变其寚w方向Q或遇到 QhrQⅱQh#Q标{时会自动设回预讄向左寚w?
16.分隔U?QhrQ?
?】分隔线的粗l?Qhr size=ҎQ?
?】分隔线的宽?Qhr size=Ҏ或百分比Q?
?】分隔线寚w方向 Qhr align="#"Q?#号可?leftQ表向左寚wQ预讑ր| centerQ表向中寚w rightQ表向右寚w
?】分隔线的颜?Qhr color=#rrggbbQ?
?】实心分隔线 Qhr noshadeQ?
17.向中寚w QcenterQ?.........Q?centerQ?
18.依原始样式显C?QpreQ?.........Q?preQ?
19.QbodyQ指令的属?
?】背景颜?-- bgcolor Qbody bgcolor=#rrggbbQ?
?】背景图?-- background Qbody background="囑Ş文g?Q?
?】设定背景图案不会卷?-- bgproperties Qbody bgproperties=fixedQ?
?】文件内Ҏ字的颜色 -- text Qbody text=#rrggbbQ?
?】超q结文字颜色 -- link Qbody link=#rrggbbQ?
?】正被选取的超q结文字颜色 -- vlink Qbody vlink=#rrggbbQ?
?】已q结q的连l文字颜?-- alink Qbody alink=#rrggbbQ?
20.注解 Q?--..........--Q?1.Ҏ字元表示?
W????
Q?Qlt
Q?Qgt
& Qamp
" Qquot
I白 Qnbsp
囄
1.插入囄 Qimg src="囑Ş文g?Q?
2.讑֮图框 -- border Qimg src="囑Ş文g? border=ҎQ?
3.讑֮囑Ş大小 -- widthⅱheight Qimg src="囑Ş文g? width=宽度Ҏ height=高度ҎQ?
4.讑֮囑Ş上下左右留空 -- vspaceⅱhspace Qimg src="囑Ş文g? vspace=上下留空Ҏ hspace=左右留空ҎQ?
5.囑Ş附注 Qimg src="囑Ş文g? alt="说明文字"Q?
6.预蝲囄
Qimg src="高解析度囑Ş文g? lowsrc="低解析度囑Ş文g?Q?P.S.两个囄囑Ş大小最好一?
7.影像地图QImage MapQ?Qimg src="囑Ş文g? usemap="#囄名称"Q?Qmap name="囄名称"
Qarea shape=形状 coords=区域座标列表 href="q结点之URL"Q?
Qarea shape=形状 coords=区域座标列表 href="q结点之URL"Q?
Qarea shape=形状 coords=区域座标列表 href="q结点之URL"Q?
Qarea shape=形状 coords=区域座标列表 href="q结点之URL"Q?Q?mapQ?
?】定义Ş?-- shape
shape=rectQ矩?shape=circleQ圆?shape=polyQ多边Ş
?】定义区?-- coords
a.矩ŞQ必M用四个数字,前两个数字ؓ左上角标,后两个数字ؓ右下角?
例:Qarea shape=rect coords=100,50,200,75 href="URL"Q?
b.圆ŞQ必M用三个数字,前两个数字ؓ圆心的标,最后一个数字ؓ半径长度
例:Qarea shape=circle coords=85,155,30 href="URL"Q?
c.L囑ŞQ多边ŞQ:图形之每一转折点标依序填?
例:Qarea shape=poly coords=232,70,285,70,300,90,250,90,200,78 href="URL"Q?
表格
1.定义表格 QtableQ?.........Q?tableQ?
?】设定边框的厚度 -- border
Qtable border=ҎQ?
?】设定格U的宽度 -- cellspacing
Qtable cellspacing=ҎQ?
?】设定资料与格线的距?-- cellpadding
Qtable cellpadding=ҎQ?
?】调整表格宽?-- width
Qtable width=Ҏ或百分比Q?
?】调整表格高?-- height
Qtable height=Ҏ或百分比Q?
?】设定表D景色?-- bgcolor
Qtable bgcolor=#rrggbbQ?
?】设定表D框色?-- bordercolor
Qtable bordercolor=#rrggbb
2.昄格线 Qtable borderQ?
3.表格标题
QcaptionQ?.........Q?captionQ?
表格标题位置 -- align
Qcaption align="#"Q?#号可?topQ表标题|于表格上方Q预讑ր|
bottomQ表标题|于表格下方
4.定义?QtrQ?
5.定义栏位 ?》<tdQ:靠左寚w
?》<thQ:靠中寚wq?
?】水q位|?-- align Qth align="#"Q?
#号可?leftQ向左对?
centerQ向中对?rightQ向叛_?
?】垂直位|?-- align Qth align="#"Q?#号可?
topQ向上对?middleQ向中对?
bottomQ向下对?
?】栏位宽?-- width
Qth width=Ҏ或百分比Q?
?】栏位垂直合q?-- rowspan
Qth rowspan=Ʋ合q栏位数Q?
?】栏位横向合q?-- colspan
Qth colspan=Ʋ合q栏位数Q?
清单
一、目录式清单
QdirQ?QliQ项? QliQ项? QliQ项? Q?dirQ?P.S.目录式清单每一个项目不能超q?0个字元(?0个中文字Q?
二、选项式清?QmenuQ?QliQ项? QliQ项? QliQ项? Q?menuQ?
三、有序号的清?QolQ?QliQ项? QliQ项? QliQ项? Q?olQ?
?】序号Ş?-- type Qol type=#Q或Qli type=#Q?#号可?AQ表以大写英文字母AⅱBⅱCⅱD...做ؓ目~号 aQ表以小写英文字母aⅱbⅱcⅱd...做ؓ目~号 IQ表以大写罗马数字做为项目编?iQ表以小写罗马数字做为项目编?1Q表以阿拉伯数字做ؓ目~号Q预讑ր|
?】v始数?-- start Qol start=Ʋ开始计数的序数Q?
?】指定编?-- value Qli value=Ʋ指定的序数Q?
四、无序号的清?QulQ?QliQ项? QliQ项? QliQ项? Q?ulQ?
?】项目符号Ş?-- type Qul type=#Q或Qli type=#Q?#号可?discQ实心圆点(预设| circleQ空心圆?squareQ实心方?
?】原始清?-- plain Qul plainQ?
?】清单排列方?-- warp ?》清单垂直排?Qul warp = vertQ??》清单水qx?Qul warp = horizQ?
五、定义式清单 QdlQ?QdtQ项? QddQ项?说明 QdtQ项? QddQ项?说明 QdtQ项? QddQ项?说明 Q?dlQ?
紧密排列 -- compact Qdl compactQ?P.S.如此可QdtQ的内容与<ddQ的内容在同一行,?以数格空白相隔而不换行Q但若<dtQ的文字过一 定的长度后,compact的作用就消失了!
表单
一、基本架?Qform action="处理资料用的CGIE式之URL"?mailt电子信箱的URL" method="get或post"Q?.......... .......... .......... Q?formQ?
二、输入文件型表单 Qform action="URL" method="post"Q?QinputQ?QinputQ?.......... .......... Q?formQ?
?】栏位类?-- type Qinput type=#Q?#号可?textQ文字输?passwordQ密?checkboxQ多选钮 radioQ单选钮 submitQ接受按?resetQ重设按?imageQ图形钮 hiddenQ隐藏栏?
?】栏位名U?-- name Qinput name="资料栏名"Q?P.S.若type为submitⅱreset则name不必讑֮
?】文件上的预讑ր?-- value Qinput value="预设之字?Q?
?】设定栏位的宽度 -- size Qinput size=字元敎ͼ
?】限制最大输入字串的长度 -- maxlength Qinput maxlength=字元敎ͼ
?】预设checkbox或radio的初?-- checked Qinput type=checkbox checkedQ?Qinput type=radio checkedQ?
?】指定图形的URL -- src Qinput type=image src="图档?Q?
?】图文对?-- align Qinput type=image align="#"Q?#号可?topQ文字对齐图片之端 middleQ文字对齐图片之中间 buttomQ文字对齐图片之底部
三、选择式表?Qform action="URL" method="post"Q?QselectQ?QoptionQ?QoptionQ?.......... .......... Q?selectQ?Q?formQ?
A、<selectQ的属?
?】栏位名U?-- name Qselect name="资料栏位?Q?
?】设定显C的选项?-- size Qselect size=个数Q?
?】多重选项 -- multiple Qselect multipleQ?
B、<optionQ的属?
?】定义选项的传回?-- value Qoption value="传回?Q?
?】预先选取的选项 -- selected Qoption selectedQ?
四、多列输入文字区表单 Qform action="URL" method="post"Q?QtextareaQ?.......... .......... Q?textareaQ?Q?formQ?
?】文字区的变数名U?-- name Qtextarea name=变数名称Q?
?】设定文字输入区宽度 -- cols Qtextarea cols=字元敎ͼ
?】设定文字输入区高度 -- rows Qtextarea rows=列数Q?
?】输入区讑֮预设字串 QtextareaQ?预设文字 Q?textareaQ?
?】自动换行与?-- wrap Qtextarea wrap=#Q?#号可?offQ表输入的文字超q栏宽时Q不会自动换行(预设| virtualQ表输入的文字在过栏宽时会自动换行
链接
一、连l至其他文g Qa href="URL"Q说明文字或囄Q?aQ?
二、连l至文g内之某一处(外部q结Q?
?》v?
Qa href="档名#名称"Q?.........Q?aQ?
?》终?Qa name="名称"Q?
三、frame的超q结
?】开启新的浏览器来显Cl文?-- _blank Qa href="URL" target=_blankQ?
?】显Cl文件於目前的frame -- _self Qa href="URL" target=_selfQ?
?】以上一层的分割视窗昄q结文g -- _parent Qa href="URL" target=_parentQ?
?】以全视H显Cl文?-- _top Qa href="URL" target=_topQ?
?】以特定视窗昄q结文g --Qa href="URL" target="特定视窗名称"Q?
FRAME
一、分割视H指?QframesetQ?.........Q?framesetQ?
?】垂_上下Q分?-- rows
Qframeset rows=#Q?#号可为点敎ͼ如欲分割?00,200,300三个视窗Q则
Qframeset rows=100,200,300Q;亦可?号代表,如<frameset rows=*,500,*Q?
癑ֈ比:如<frameset rows=30%,70%Q,?Ҏd最好ؓ100%
?】水qI左右Q分?-- cols Qframeset cols=Ҏ或百分比Q?
二ⅱ指定视窗内容 -- QframeQ?
Qframeset cols=30%,70%Q?QframeQ?QframeQ?Q?framesetQ?
?】指定视H的文g名称 -- src Qframe src=HTML档名Q?
?】定义视H的名称 -- name
Qframe name=视窗名称Q?
?】设定文件与上下Ҏ的距?-- marginheight
Qframe marginheight=ҎQ?
?】设定文件与左右Ҏ的距?-- marginwidth
Qframe marginwidth=ҎQ?
?】设定分割视H卷?-- scrollin
Qframe scrolling=#Q?#号可?yesQ固定出现卷?
noQ不出现卯u autoQ自动判断文件大需不需要卷_预设|
?】锁住分割视H的大小 -- noresize Qframe noresizeQ?
2
3 import java.io.DataInputStream;
4 import java.io.File;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import javax.servlet.http.HttpServletRequest;
9 import java.io.*;
10 import java.util.HashMap;
11
12
13 public class uploadFile {
14 public static final int MAX_SIZE = 1024 * 1024*100;
15 public static final String FILE_DIR = "d:/temp/";
16
17 private int file_Size=0;
18 private String file_Path = "";
19 private HashMap hm = new HashMap();
20
21 public String upLoad(HttpServletRequest req) {
22 String tmpString ="";
23 String result = "";
24 DataInputStream dis = null;
25 String split_Str = "";
26
27 try {
28 dis = new DataInputStream(req.getInputStream());
29 String content = req.getContentType();
30 if (content != null && content.indexOf("multipart/form-data") != -1) {
31
32 int reqSize = req.getContentLength();
33 byte[] data = new byte[reqSize];
34 int bytesRead = 0;
35 int totalBytesRead = 0;
36 int sizeCheck = 0;
37 while (totalBytesRead < reqSize) {
38 // check for maximum file size violation
39 sizeCheck = totalBytesRead + dis.available();
40 if (sizeCheck > MAX_SIZE)
41 result = "文g太大不能上传";
42
43 bytesRead = dis.read(data, totalBytesRead, reqSize);
44 totalBytesRead += bytesRead;
45 }
46 String dataString = null;
47 //dataString = new String(data, "ISO-8859-1");
48 dataString = new String(data);
49 tmpString = new String(data);
50 hm = parseAnotherParam(tmpString);
51
52 //取出字段分割W?br />
53 split_Str = dataString.substring(0, dataString.indexOf("\r\n"));
54 // 分离filepath q赋?br />
55 dataString = dataString.substring(dataString.indexOf("filename=\""));
56 String filePath = dataString.substring(0, dataString.indexOf("Content-Type:"));
57 if (filePath==null && filePath.equals("")) return "";
58 //System.out.println(filePath);
59 dataString = new String(dataString.getBytes(),"ISO-8859-1");
60 // 分离contentType q赋?br />
61 dataString = dataString.substring(dataString.indexOf("Content-Type:") + 1);
62 dataString = dataString.substring(dataString.indexOf("\n") + 1);
63 // 分离文g信息 获得最l想要的字节
64 //System.out.print("|"+dataString+"|");
65 dataString = dataString.substring(2, dataString.indexOf(split_Str));
66 //System.out.println("|"+dataString+"|");
67 dataString = dataString.substring(0, dataString.lastIndexOf("\n") - 1);
68 //System.out.print("|"+dataString+"|");
69 if (writeFile(dataString.getBytes("ISO-8859-1"), FILE_DIR + getFileName(filePath))) {
70 this.file_Size = dataString.getBytes("ISO-8859-1").length;
71 this.file_Path = FILE_DIR + getFileName(filePath);
72 result = "文g上传完毕";
73 } else {
74 result = "文g上传p|";
75 }
76 } else {
77 result = "content 必须?multipart/form-data";
78 }
79 } catch (UnsupportedEncodingException ex4) {
80 result = "getBytes p| UnsupportedEncodingException错误";
81 } catch (NullPointerException e) {
82 result = "getBytes p| NullPointerException错误";
83 } catch (IOException ex1) {
84 result = "IOException 错误 ";
85 }
86
87 return result;
88 }
89
90 public String getFilePath(){
91 return this.file_Path;
92 }
93
94 public int getFileSize(){
95 return this.file_Size;
96 }
97
98 public boolean writeFile(byte[] data, String path) {
99 File f = null;
100 FileOutputStream fos = null;
101 try {
102 f = new File(path);
103 f.createNewFile();
104 fos = new FileOutputStream(f);
105 fos.write(data, 0, data.length);
106 } catch (FileNotFoundException e) {
107 return false;
108 } catch (IOException e) {
109 return false;
110 } finally {
111 try {
112 fos.close();
113 } catch (IOException e) {
114 return false;
115 }
116 }
117 return true;
118 }
119
120 public String getFileName(String arg) {
121 String path = "";
122 if (arg.indexOf("\"") > -1)
123 path = arg.substring(arg.indexOf("\"") + 1, arg.lastIndexOf("\""));
124 else
125 path = arg;
126 //System.out.println("file_path:"+arg);
127 path = path.substring(path.lastIndexOf("\\") + 1);
128 return path;
129 }
130
131
132 public HashMap parseAnotherParam(String str){
133 HashMap hm= new HashMap();
134 String key="";
135 String value="";
136 int startindex = 0;
137 int endindex = 0;
138
139 startindex = str.indexOf("Content-Disposition: form-data; name=\"") + "Content-Disposition: form-data; name=\"".length();
140 endindex = str.indexOf("\"\r\n\r\n");
141
142 while ( startindex >-1 && endindex > -1 ){
143 key = str.substring(startindex, endindex);
144
145 if(!str.substring(endindex , endindex + 5).equals("\"\r\n\r\n") ){//L没有value的元?br />
146 str = str.substring(endindex);
147 startindex = str.indexOf("Content-Disposition: form-data; name=\"") + "Content-Disposition: form-data; name=\"".length();
148 endindex = str.indexOf("\"\r\n\r\n");
149 continue;
150 }
151 if( key.indexOf("\";") > -1){//L上传文g的参C及编?br />
152 str = str.substring(str.indexOf("\";") + 2);
153 startindex = str.indexOf("Content-Disposition: form-data; name=\"") + "Content-Disposition: form-data; name=\"".length();
154 endindex = str.indexOf("\"\r\n\r\n");
155
156 continue;
157 } else
158 str = str.substring(endindex + 5);
159
160 value = str.substring(0, str.indexOf("\r\n"));
161 str = str.substring(str.indexOf("\r\n") + 2);
162 //System.out.println("key:"+key+" value:"+value);
163 hm.put(key,value);
164
165 startindex = str.indexOf("Content-Disposition: form-data; name=\"") + "Content-Disposition: form-data; name=\"".length();
166 endindex = str.indexOf("\"\r\n\r\n");
167
168 }
169 return hm;
170 }
171
172 public String getParameter(String param){
173 //System.out.println(hm.toString());
174 return (String)hm.get(param);
175 }
176
177
178 }