-
XML配置文件的读取处理
2007-06-18 10:55:52
Java和XML是黄金组合,网上已经有很多文章介绍,XML作为电子商务中数据交换,已经有其不可替代的作用,但是在平时系统开发中,我们不一定都用到数据交换,是不是无法使用XML了?
当然不是,现在已经有一个新趋势,java程序的配置文件都开始使用XML格式,以前是使用类似windows的INI格式.(Java中也有Propertiesy这样的类专门处理这样的属性配置文件).使用XML作为Java的配置文件有很多好处,从Tomcat的安装配置文件和J2ee的配置文件中,我们已经看到XML的普遍应用,让我们也跟随流行趋势用XML武装起来.
现在关键是如何读取XML配置文件?有好几种XML解析器:主要有DOM和SAX ,这些区别网上文章介绍很多.
在apache的XML项目组中,目前有Xerces Xalan Cocoon几个开发XML相关技术的project.Tomcat本身使用的是 Sun 的 JAXP,而其XSL Taglib project中使用Xerces解析器.
好了,上面都是比较烦人的理论问题,还是赶快切入XML的配置文件的读取吧.
在我们的程序中,通常要有一些根据主机环境确定的变量.比如数据库访问用户名和密码,不同的主机可能设置不一样.只要更改XML配置文件,就可以正常运行.
<myenv>
<datasource>
<dbhost>localhost</dbhost>
<dbname>sqlname</dbname>
<dbuser>username</dbuser>
<dbpassword>password</dbpassword>
</datasource></myenv>
上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下.
我们编制一个Java程序直接读取,将dbhost dbuser dbpassword提取出来供其他程序访问数据库用.
目前使用SAX比较的多,与DOM主要区别是 SAX是一行一行读取XML文件进行分析,适合比较大文件,DOM是一次性读入内存,显然不能对付大文件.这里我们使用SAX解析,由于SAX解析器不断在发展,网上有不少文章是针对老版本的.如果你使用JDK1.4 ,可以参考 使用SAX处理XML文档 一文.这里的程序是根据其改进并且经过实践调试得来的.
对上面myenv.xml读取的Java程序:
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException;import java.util.Properties;
//使用DefaultHandler的好处 是 不必陈列出所有方法,
public class ConfigParser extends DefaultHandler {////定义一个Properties 用来存放 dbhost dbuser dbpassword的值
private Properties props;
private String currentSet;
private String currentName;
private StringBuffer currentValue = new StringBuffer();//构建器初始化props
public ConfigParser() {this.props = new Properties();
}public Properties getProps() {
return this.props;
}
//定义开始解析元素的方法. 这里是将<xxx>中的名称xxx提取出来.
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
currentValue.delete(0, currentValue.length());
this.currentName =qName;
}//这里是将<xxx></xxx>之间的值加入到currentValue
public void characters(char[] ch, int start, int length) throws SAXException {
currentValue.append(ch, start, length);
}//在遇到</xxx>结束后,将之前的名称和值一一对应保存在props中
public void endElement(String uri, String localName, String qName) throws SAXException {
props.put(qName.toLowerCase(), currentValue.toString().trim());
}}
上面的这个解析程序比较简单吧? 其实解析XML就是这么简单.
现在我们已经将dbhost dbuser dbpassword的值localhost sqlname username password提取了出来.但是这只是在在解析器内部,我们的程序还不能访问.需要再编制一个程序.
import java.util.Properties;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.net.URL;public class ParseXML{
//定义一个Properties 用来存放 dbhost dbuser dbpassword的值
private Properties props;//这里的props
public Properties getProps() {
return this.props;
}public void parse(String filename) throws Exception {
//将我们的解析器对象化
ConfigParser handler = new ConfigParser();//获取SAX工厂对象
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);//获取SAX解析
SAXParser parser = factory.newSAXParser();
//得到配置文件myenv.xml所在目录. tomcat中是在WEB-INF/classes
//下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义
URL confURL = BeansConstants.class.getClassLoader().getResource(filename);
try
{
//将解析器和解析对象myenv.xml联系起来,开始解析
parser.parse(confURL.toString(), handler);
//获取解析成功后的属性 以后 我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了
props = handler.getProps();
}finally{
factory=null;
parser=null;
handler=null;
}
}
}由于我们的XML文件是使用最简单的形式 ,因此解析器相对简单,但是这已经足够对付我们的配置文件了.
判断一个程序系统的先进性,我们先看看他的配置文件,如果还在使用老套的xxx=123 这样类似.ini的文件,
我们也许会微微一笑,他又落伍了..... -
利用JScript复制网页中的表格到Excel中
2007-06-16 11:37:22
利用Jscrīpt复制网页中的表格到Excel中
利用Javascrīpt复制网页中的表格到Excel中
作者:木子 来自:顺天科技 毕业于:延边大学
把网页中的一个表格(含表格中的内容)复制到Excel的一个Sheet中,具体步骤如下
一、 创建一个含有表格的网页
1、网页代码如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>利用Jscrīpt复制网页中的表格到Excel中</title>
<scrīpt language="javascrīpt" src="dataToExcel.js">
</scrīpt>
<style type="text/css">
<!--
.STYLE2 {color: #000000}
-->
</style>
</head>
<body>
<table width="307" border="1" cellspacing="0" cellpadding="0" id="tableToExcel" name="tableName">
<tr bgcolor="#99CCCC">
<td width="66" rowspan="4" bgcolor="#33FF99">吉林的长春</td>
<td width="67" rowspan="4" bgcolor="#33FF99">辽宁的沈阳</td>
<td width="94" rowspan="4" bgcolor="#33FF99">黑龙江的哈尔滨</td>
<td width="30" rowspan="4" bgcolor="#33FF99">北京</td>
<td width="38" bgcolor="#66CC99">海淀</td>
</tr>
<tr bgcolor="#99CCCC">
<td bgcolor="#66CC99">吉林-长春</td>
</tr>
<tr bgcolor="#99CCCC">
<td bgcolor="#66CC99">辽宁-沈阳</td>
</tr>
<tr bgcolor="#99CCCC">
<td bgcolor="#66CC99">黑龙江-哈尔滨</td>
</tr>
<tr bgcolor="#99CCCC">
<td colspan="5">演示javascrīpt对表格copy的处理过程(推荐) </td>
</tr>
<tr bgcolor="#99CCCC">
<td colspan="5"><label>
<div align="center">
<input name="textfield" type="text" value="单行文本框控件" size="30"/>
</div>
</label></td>
</tr>
</table>
<br>
<input type="submit" name="Submit3" value="点击复制表格到Excel中" ōnclick="CellToExcel(cellToExcel)" />
</body>
</html>
2、代码说明
CellToExcel()为JS文件中定义的函数(关于JS文件稍后加以说明),tableToExcel为表格的id。
二、 含有复制功能的JS文件的创建
1、dataToExcel.js文件代码如下
// Javascrīpt Document
// 杀Excel进程使用此变量
var idTmr = "";
// 函数功能:复制表格到Excel中
// 参 数:tableID 表的id
function CellToTable(tableID)
{
try
{
// 加载ActiveX控件,获取Excel句柄
var exApp = new ActiveXObject("Excel.Application");
// 创建一个Excel文件
var ōWB = exApp.WorkBooks.add();
// 获取sheet1句柄CA
var exSheet = exApp.ActiveWorkBook.WorkSheets(1);
// 设置sheet1的名称
exSheet.name="演示复制表格到Excel中";
// copy指定的表格
var sel=document.body.createTextRange();
sel.moveToElementText(tableID);
sel.select();
sel.execCommand("Copy");
// 粘贴到sheet中
exSheet.Paste();
// 弹出保存对话框,保存Excel文件
exApp.Save();
// 退出Excel实例
exApp.Quit();
exApp = null;
// 调用Cleanup()进行垃圾回收
idTmr = window.setInterval("Cleanup();",10);
}catch(Exception)
{
//用户点击保存对话框中的取消按钮时会发生异常
}
}
// 函数功能:杀掉Excel进程
function Cleanup() {
window.clearInterval(idTmr);
CollectGarbage();
}
2、代码说明
以上的代码每行都有注释,不再一一加以说明,其中Cleanup()中调用的CollectGarbage();是JS提供的垃圾回收函数。
三、 多个表格复制到Excel中同一个sheet中
1、 应注意的问题
设置当前sheet中的焦点,以避免多次粘贴出现覆盖现象
2、代码
exSheet.Cells(行,列).Select();
复制第二张表时,要确定焦点所在的行,通过
var table = document.all. cellToExcel; //表格的ID
var row= table.rows.length;//表格的行
var col = table.rows(0).cells.length;//表格的列
获取表格的行列,然后调用exSheet.Cells(row,1).Select();使焦点定位到表格第row行,第1列,然后执行粘贴功能的代码exSheet.Paste();,完成粘贴功能,三个以上的表格的复制,依次类推。
四、 关于sheet的说明
代码中var ōWB = exApp.WorkBooks.add();这句话执行完后,Excel中默认会有三个sheet,当用户如果需要更多的sheet,要做如下的处理oWB .Sheets.Add();添加sheet,此代码美执行一次,添加一个sheet,用户可更具需要来添加sheet的数量。 -
验证码
2007-06-15 17:32:11
现在有不少网站在用户填写表单时,同时要求填写验证码,验证码的一个目的就是防范一些恶意的网站下载软件,这些软件能通过遍历链接而将网站的所有网页下载。还可以防止用户不经过本网站的页面而使用网站的资源。所以现在有不少网站都使用了验证码技术,验证码通常是一个在WEB服务器上生成的随机字符串,同时以某种方式保存起来,比如保存到与当前的Session中,然后在用户提交网页时与用户输入的验证比较是否一致,然而如果直接以明文的方式,还是不能防范一些功能较强的自动填写表格的软件。所以一般将验证码以图片的形式显示出来,同时可以将在图片中显示的字符串进行一些处理,比如使用旋转字符,添加背景纹理等技术以增大被软件识别的难度。下面简要介绍一下如果实现这种验证码:首先实现一个servlet用来生成图片(当然也可以用jsp实现):import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import com.sun.image.codec.jpeg.*;import java.awt.*;import com.sun.image.codec.jpeg.*;import java.awt.image.BufferedImage;import java.awt.image.DataBuffer;import java.awt.geom.GeneralPath;import javax.swing.*;import java.math.*;public class Servlet1extends HttpServlet {//Process the HTTP Get requestpublic void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {response.setContentType(CONTENT_TYPE);response.setContentType("image/jpeg"); //必须设置ContentType为image/jpegint length = 4; //设置默认生成4个数字Date d = new Date();long lseed = d.getTime();java.util.Random r = new Random(lseed); //设置随机种子if (request.getParameter("length") != null) {try {length = Integer.parseInt(request.getParameter("length"));}catch (NumberFormatException e) {}}StringBuffer str = new StringBuffer();for (int i = 0; i <length; i++) {str.append(r.nextInt(9)); //生成随机数字}//可以在此加入保存验证码的代码//创建内存图像BufferedImage bi = new BufferedImage(40, 16, BufferedImage.TYPE_INT_RGB);Graphics2D g = bi.createGraphics();g.clearRect(0, 0, 16, 40);g.setColor(Color.green.CYAN);g.drawString(str.toString(), 4, 12);try {//使用JPEG编码,输出到response的输出流JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);param.setQuality(1.0f, false);encoder.setJPEGEncodeParam(param);encoder.encode(bi);}catch (Exception ex) {}}}然后在需求显示验证码的加入以下代码就可以了<img alt="" src="/WebModule1/servlet1" width="40" height="16"/>将/WebModule1/servlet1替换成你用来生成验证码的servlet的全路径。 -
输出Word Excel
2007-06-15 15:13:10
<TD class=P ōnmouseover=MO() ōnclick="exportExcelInfo('<%=goods_sales_borough_report%>')" ōnmouseout=MU() noWrap>
<IMG alt='' hspace=5 src="../image/excel.jpg" align=absMiddle border=0><%=excel_data%></TD>
<TD class=LL>|</TD>
<TD class=P ōnmouseover=MO() ōnclick="exportWordInfo('<%=goods_sales_borough_report%>','1')" ōnmouseout=MU() noWrap>
<IMG alt='' hspace=5 src="../image/word.jpg" align=absMiddle border=0><%=word_data%></TD>function resize_rect()
{
try{
var o = document.getElementById("rect");
o.style.width = document.body.clientWidth-2 + "px";
o.style.height =document.body.clientHeight-60 + "px";
}catch(e)
{}
}window.onresize = resize_rect;
function checkType_Num(obj)
{
if((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||event.keyCode==8||event.keyCode==110||event.keyCode==46||event.keyCode==190)
{
event.returnValue=true;
}
else
event.returnValue=false;}
function display_editCustomer(ID){
reValue=window.open("../cilent/editcilent.jsp?id="+ID, "editcilent", "height=600,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
}function display_viewCompany(ID){
reValue=window.open("../system/company_view.jsp?companyid="+ID, "viewCompany", "height=700,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
}function display_editMaterial(ID){
reValue=window.open("../material/editMaterial.jsp?materialID="+ID, "editMaterial", "height=700,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
}//指定页面区域“单元格”内容导入Excel
function exportExcel(titleName)
{
try{
var ōXL = new ActiveXObject("Excel.Application");
var ōWB = oXL.Workbooks.Add();
var ōSheet = oWB.ActiveSheet;
var PrintA = document.all("tableRpt");
var Lenr = PrintA.rows.length;
var colSite = Math.round(PrintA.rows(0).cells.length / 2);
oSheet.Cells(1,colSite).value=titleName;
oSheet.Cells(1,colSite).Font.Bold =1;
oSheet.Cells(1,colSite).Font.Size=12;for (i=1;i<Lenr;i++)
{
var Lenc = PrintA.rows(i-1).cells.length;
for (j=0;j<Lenc;j++)
{
oSheet.Cells(i+1,j+1).value = PrintA.rows(i-1).cells(j).innerText;
oSheet.Cells(i+1,j+1).Font.Size=10;
if(i==1)
{
oSheet.Cells(i+1,j+1).Font.Bold =1;
}
}}
oXL.Visible = true;
ōXL = null;
}catch(e){}
finally{
idTmr = window.setInterval("Cleanup();",1);
}
}function Cleanup() {
window.clearInterval(idTmr);
CollectGarbage();
}function exportWord(titleName,calcIndex) //calcIndex 计算列开始序号
{
try{
var PrintA = document.all("tableRpt");
var row_count = PrintA.rows.length-1;
var col_count = PrintA.rows(0).cells.length;var WordApp=new ActiveXObject("Word.Application"); //得到WORD对象
var wdCharacter=1;
var wdOrientLandscape = 1;
var myDoc=WordApp.Documents.Add();WordApp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape
WordApp.Selection.Font.Size=12;
WordApp.Selection.Font.Bold=1;
WordApp.Selection.TypeText(titleName);
WordApp.Selection.Paragraphs(1).Alignment=1;
WordApp.Selection.MoveRight(1);
WordApp.Selection.TypeParagraph();
WordApp.Selection.TypeParagraph();
WordApp.Selection.Font.Bold=0;var myTable=myDoc.Tables.Add (WordApp.Selection.Range, row_count,col_count)
var TableRange; //以下为给表格中的单元格赋值for (i =0;i<row_count;i++)
{
for (n =0;n<col_count ;n++)
{
with (myTable.Cell(i+1,n+1).Range)
{
font.Size = 10;
if(i==0)
{
font.Bold =1;
}
if(n>=calcIndex)
ParagraphFormat.Alignment=2;
else
ParagraphFormat.Alignment=0;
if(i==0)
ParagraphFormat.Alignment=1;InsertAfter(PrintA.rows(i).cells(n).innerText);
}
}
}row_count = 0;
col_count = 0
WordApp.Application.Visible=true;
}catch(e){}
finally{
idTmr = window.setInterval("Cleanup();",1);
}
}function searchCustomer(contactID)
{
var cusID=document.all("customerID").value
var url = '../invoice/getcustomer';
var pars = 'customerID=' + cusID+"&contactID="+contactID+"&t="+Math.random();
var bankAjax = new Ajax.Request(url,{method: 'get', parameters: pars, onComplete: fillCustomerInfo});
}
function choseCode(code,customerID,payment,saleStaff,contactType,paymentTerm,invoiceDeliver)
{
parent.opener.document.all("contacter").length=0;
parent.opener.document.all("customerID").value=customerID;
parent.opener.document.all("customerInfo").value=document.all(code).value;
if(parent.opener.document.all("paymentMethodID"))
parent.opener.document.all("paymentMethodID").value=payment;
if(parent.opener.document.all("salesStaffID"))
parent.opener.document.all("salesStaffID").value=saleStaff;
if(parent.opener.document.all("paymentTerms"))
parent.opener.document.all("paymentTerms").value=paymentTerm;
if(parent.opener.document.all("invoiceDeliver"))
parent.opener.document.all("invoiceDeliver").value=invoiceDeliver;
var url = '../invoice/getcontacter';
var pars = "customerID=" + customerID+"&contactType="+contactType+"&t="+Math.random() ;
var bankAjax = new Ajax.Request(url,{method: 'get', parameters: pars, onComplete: fillContact});}
function fillContact(requestObj)
{
try{
var resultf=requestObj.responseXML.getElementsByTagName("firstName");
var resultl=requestObj.responseXML.getElementsByTagName("lastName");
var resulti=requestObj.responseXML.getElementsByTagName("contactID");
for(i=0;i<=resultf.length-1;i++)
{
firstName=resultf[i].firstChild==null?"":resultf[i].firstChild.nodeValue;
lastName=resultl[i].firstChild==null?"":resultl[i].firstChild.nodeValue;
contactID=resulti[i].firstChild==null?"":resulti[i].firstChild.nodeValue;
parent.opener.fillContactOption(contactID,firstName+lastName);
}
}catch(e){}
finally{
window.close();
}
}function exportExcelInfo(titleName)
{
try{
var ōXL = new ActiveXObject("Excel.Application");
var ōWB = oXL.Workbooks.Add();
var ōSheet = oWB.ActiveSheet;
var PrintA = document.all("tableRpt");
var Lenr = PrintA.rows.length;
var colSite = Math.round(PrintA.rows(0).cells.length / 2);
oSheet.Cells(1,colSite).value=titleName;
oSheet.Cells(1,colSite).Font.Bold =1;
oSheet.Cells(1,colSite).Font.Size=12;
var info=document.all("info").innerHTML
oSheet.Cells(2,1).value=info.replace(/ /g,' ');
oSheet.Cells(2,1).Font.Bold =0;
oSheet.Cells(2,1).Font.Size=10;
oSheet.Range('A2:Z2').Select();
oXL.Selection.Merge();
oXL.Selection.HorizontalAlignment = -4131;var k=0;
for (i=2;i<Lenr+1;i++,k++)
{
var Lenc = PrintA.rows(k).cells.length;
for (j=0;j<Lenc;j++)
{
oSheet.Cells(i+1,j+1).value = PrintA.rows(k).cells(j).innerText;
oSheet.Cells(i+1,j+1).Font.Size=10;
if(i==1)
{
oSheet.Cells(i+1,j+1).Font.Bold =1;
}
}
}
oXL.Visible = true;
ōXL = null;
}catch(e){}
finally{
idTmr = window.setInterval("Cleanup();",1);
}
}function exportWordInfo(titleName,calcIndex)
{
try{
var PrintA = document.all("tableRpt");
var row_count = PrintA.rows.length-1;
var col_count = PrintA.rows(0).cells.length;var WordApp=new ActiveXObject("Word.Application");
var wdCharacter=1;
var wdOrientLandscape = 1;
var myDoc=WordApp.Documents.Add();WordApp.ActiveDocument.PageSetup.Orientation = wdOrientLandscape
WordApp.Selection.Font.Size=12;
WordApp.Selection.Font.Bold=1;
WordApp.Selection.TypeText(titleName);
WordApp.Selection.Paragraphs(1).Alignment=1;
WordApp.Selection.MoveRight(1);
WordApp.Selection.TypeParagraph();
WordApp.Selection.TypeParagraph();
WordApp.Selection.Font.Bold=0;
var info=document.all("info").innerHTML
WordApp.Selection.Font.Size=10;
WordApp.Selection.TypeText(info.replace(/ /g,' '));
WordApp.Selection.Paragraphs(1).Alignment=3;
WordApp.Selection.MoveRight(1);
WordApp.Selection.TypeParagraph();
WordApp.Selection.TypeParagraph();
var myTable=myDoc.Tables.Add (WordApp.Selection.Range, row_count,col_count)
var TableRange;for (i =0;i<row_count;i++)
{
for (n =0;n<col_count ;n++)
{
with (myTable.Cell(i+1,n+1).Range)
{
font.Size = 10;
if(i==0)
{
font.Bold =1;
}
if(n>=calcIndex)
ParagraphFormat.Alignment=2;
else
ParagraphFormat.Alignment=0;
if(i==0)
ParagraphFormat.Alignment=1;InsertAfter(PrintA.rows(i).cells(n).innerText);
}
}
}row_count = 0;
col_count = 0
WordApp.Application.Visible=true;
}catch(e){}
finally{
idTmr = window.setInterval("Cleanup();",1);
}
}
function choseProject(customerID)
{window.open("../project/choseproject.jsp?customerID="+customerID , "cre", "height=400,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=yes, resizable=yes, location=no, status=no");
}
//edit supplier edit by qing 1029
function show_editVendor(ID){
reValue=window.open("../supplier/editcilent.jsp?id="+ID, "editvendor", "height=600,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
}//edit supplier edit by qing 0127
function show_editCustomer(ID){
reValue=window.open("../cilent/editcilent.jsp?id="+ID, "editclient", "height=600,top=0,left=0, width=800, toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no");
}function checkPeriod(period)
{
var url = '../voucher/autocode';
var pars = "type=checkPeriod"+"&period="+period+"&t="+Math.random();
var bankAjax = new Ajax.Request(url,{method: 'post', parameters: pars, onComplete: showMsg});
}function checkPeriod1(period)
{
var url = '../voucher/autocode';
var pars = "type=checkPeriod"+"&period="+period+"&t="+Math.random();
var bankAjax = new Ajax.Request(url,{method: 'post', parameters: pars, onComplete: showMsg1});
}
function showMsg(requestObj)
{
var resultf=requestObj.responseXML.getElementsByTagName("code");
var resultc=requestObj.responseXML.getElementsByTagName("check");
periodExist=resultf[0].firstChild.nodeValue;
checkOut=resultc[0].firstChild.nodeValue;
if(periodExist=="0")
{
alert(document.all("periodNotFound").value);
return ;
}if(checkOut==1)
{
alert(document.all("periodCheckOut").value);
return ;
}
document.all("form").submit();
}
function showMsg1(requestObj)
{
var resultf=requestObj.responseXML.getElementsByTagName("code");
var resultc=requestObj.responseXML.getElementsByTagName("check");
periodExist=resultf[0].firstChild.nodeValue;
checkOut=resultc[0].firstChild.nodeValue;
if(periodExist=="0")
{
alert(document.all("periodNotFound").value);
return ;
}if(checkOut==1)
{
alert(document.all("periodCheckOut").value);
return ;
}
var tb = document.getElementsByTagName("table");
tb[1].rows[0].cells[1].disabled=true;
document.all("form").submit();
} -
学java必备jar
2007-04-25 21:34:18
1)javaMail
1、javaMail API 里面有个mail.jar (下载地址:http://java.sun.com/products/javamail/downloads/index.html
2、JavaBeans Activation Framework (俗称JAF包)里面的 activation.jar (下载地址:http://java.sun.com/products/javabeans/jaf/downloads/index.html
2)jstl与标签函数库
1、JSTL API 里面的jstl.jar、standard.jar (下载地址:http://www.apache.org/dist/jakarta/taglibs/standard/
里面的一个jakarta-taglibs-standard-current.zip
2、添加操作XML的jar,一般要添加xalan.jar、serializer.jar这两个包,如有特殊需求可将下载的所有jar全部添加 (下载地址:http://apache.seekmeup.com/xml/xalan-j
3) java 帮助文件,官方提供的
http://java.sun.com/docs/windows_format.html
4) Apache Http Server / Windows下安装文件下载目录
http://apache.mirror.phpchina.com/httpd/binaries/win32/
5) Apache Http Server 中文帮助文件目录
http://lamp.linux.gov.cn/Apache/ApacheMenu/index.html
暂时先写到这里,以后陆续添加…………
-
jstl与xml
2007-04-25 10:45:02
我刚刚接触了一下jstl标签,在用jstl标签库使用的时候,感觉其他的标签还挺顺手,但在用到XML标签操作XML文件时,发现了一个小小的问题,然后上网查询了N多次还是无法解决,后来我无意中发现了解决的方法,其实方法就是很简单!但是我总结一下我的经过吧!
我的例子:
<%@page contentType="text/html" pageEncoding="GB2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><html>
<head>
<title>JSTL与XML解释</title>
</head>
<body>
<x:parse var="xmlbody">
<customer>
<customerid>2002</customerid>
<customername>tea</customername>
</customer>
</x:parse>
<b><u>解释XML本体内容</u></b><br>
客户编号(customerid):
<x:out select="$xmlbody/customer/customerid"/><br>
客户姓名(customername):
<x:out select="$xmlbody/customer/customername" /><br>
</body>
</html>运行后报错在红色的部分!!
错误显示为:javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/xpath/VariableStack
我上网查了语法,但是没有发现错误,我就奇怪什么原因,
后来才知道原来是我用的包少了一个,但是为什么书和网上的解说很多的不同呢?
经过我仔细的观察,网上的uri地址原来是:uri="http://java.sun.com/jstl/xml" 而且其他标签库德引用地址都少了那个/jsp/,然后我打开了那个jar看了里面的tld文件,才知道正确的写法是有uri="http://java.sun.com/jsp/jstl/xml" jsp这个地址的,我就不明白为什么其他人写的都没有,后来寻根问底了一下,我发现原来可能跟版本有关系。不过这只是插曲,没有进入正题呢,因为我的问题还没解决。
再过后我翻了很多其他的网站和教科书,都没有发现我的错误是在那里!之后我就上官网看了一下(之前为什么不上呢,那是我英文太烂了,官网的都是鸡肠,我看的太费力了),无意中给我发现(又是无意!!我披视自己哈哈……),原来教科书说的用jstl所要用的包是:jstl.jar、standard.jar这两个包,但是不知道为什么官网上有说要加xalan.jar、serializer.jar这个包!给我尝试了一下,终于没问题了。我就是气愤啊,就因为少用加jar,我搞了差不多2天2夜(有点夸张……其实就是经历2天2夜,其中共用时就那几个小时,哈哈……)。
不过终于搞好了,心安哦,总结了一下学jstl的过程,其他什么核心标签、sql标签、函数标签都只用两个包就可以了,但涉及到操作xml,就要加上xalan.jar、serializer.jar,原因在那啊?那你上官网看看就知道了,不过全部是鸡肠,反正我是看到头晕了—_—
还有就是关于用jstl在WEB-INF\web.xml的配置,其实就不用配置什么,将那jar全部拷到WEB\INF\lib下就可以了,不过要注意你的版本问题哦,最好找比较新的,而且要看看版本更新的说明书(不过又是鸡肠,晕啊……),因为在包里的就包含了配好了tld文件。
其它就靠自己罗,看书很重要,但是我看过很多书,不知道书上为什么老是会出现这些无聊的错误!唉…………
