﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-砖头-文章分类-JSP</title><link>http://www.blogjava.net/yaozhuan/category/8679.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:09:41 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:09:41 GMT</pubDate><ttl>60</ttl><item><title>在web应用中部署你自己的验证码(jsp,jsf两种方式) </title><link>http://www.blogjava.net/yaozhuan/articles/61552.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Thu, 03 Aug 2006 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/61552.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/61552.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/61552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/61552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/61552.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在web系统中,验证码的应用基本上随处可见.验证码可以防止他人恶意攻击和垃圾注册,可以说已成了web开发中必不可少的环节.遗憾的是,验证码在jsp,jsf的组件库, 至少是一些标准的组件库中并没有出现.本文分别介绍如何在jsp和jsf中使用验证码和我的一些小经验,呵呵.     在jsp中,我们使用apache的taglibs-image(http://jakarta.apache.org/tag...&nbsp;&nbsp;<a href='http://www.blogjava.net/yaozhuan/articles/61552.html'>阅读全文</a><img src ="http://www.blogjava.net/yaozhuan/aggbug/61552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-08-03 18:03 <a href="http://www.blogjava.net/yaozhuan/articles/61552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 对 XML 的操作(实用文章) </title><link>http://www.blogjava.net/yaozhuan/articles/53900.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Tue, 20 Jun 2006 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/53900.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/53900.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/53900.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/53900.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/53900.html</trackback:ping><description><![CDATA[
		<font size="2">本例子是参考了一些网站上有关JSP 对 XML 的操作的相关文档，又结合了一些个人的体会。例子涉及的内容是，开发的一个企业内部定餐系统后台管理端的部分代码，功能主要集中在对于餐馆基本信息的管理。 <br /><br />例子本身是在TOMCAT4.01 平台下运行的B/S结构的程式。有关TOMCAT 的配置，这里不做说明。只讲解一下相关文件及文件夹的目录结构。 <br /><br />目录结构说明： <br />/tomcat/webapps/canyin/ -----主目录 <br />/tomcat/webapps/canyin/jsp/ -----JSP 文件目录 <br />/tomcat/webapps/canyin/jsp/admin/ -----实现后台管理的JSP 文件的存放目录 <br />/tomcat/webapps/canyin/WEB-INF/classes/canyin/ ------javabean 文件的存放目录 <br />/tomcat/webapps/canyin/data/ -----xml 文件存放目录 <br />/tomcat/webapps/ROOT/ -----tomcat 启动文件存放文件夹，只存放了index.html 文件 <br /><br />文件简单说明： <br />/tomcat/webapps/canyin/data/users.xml -----记录用户信息 <br />/tomcat/webapps/canyin/data/restaurants.xml -----记录餐馆的基础信息 <br /><br /><br />/tomcat/webapps/ROOT/index.html -----首页，页面出现输入框，要求用户输入用户名，密码 <br /><br /><br />/tomcat/webapps/canyin/jsp/loginjudge.jsp -----用户身份判断页面，根据用户名称和密码决定页面是转入后台管理端，还是前台客户端。本例子中，用户身份一旦确认为有管理权限，可以进入后台管理端，就直接跳到餐馆基本信息管理页面，简化说明的流程。 <br />/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp -----餐馆基本信息管理页面，管理餐馆的名称，电话，地址等信息 <br /><br />/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class ----- 后台管理端检测标志用户身份的session 的值，如果不是管理员的话，跳回登陆页面。 <br />/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class -----连接xml 文件 <br />/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class -----写入xml文件 <br /><br />文件详细介绍及附带代码说明。 <br /><br />/tomcat/webapps/canyin/data/users.xml <br /><br />代码： <br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt; <br /><br />- &lt;users&gt; <br />&lt;user name="joard" password="joard" roles="admin" /&gt; <br />&lt;user name="joard01" password="joard01" roles="user" /&gt; <br />&lt;user name="joard02" password="joard02" roles="user" /&gt; <br />&lt;/users&gt; <br /><br />说明：字段含义是用户名，密码以及用户的身份 <br /><br />/tomcat/webapps/canyin/data/restaurants.xml <br /><br />代码： <br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt; <br />- &lt;restaurants num="10"&gt; <br />- &lt;restaurant id="1"&gt; <br />&lt;name&gt;上海亭快餐店&lt;/name&gt; <br />&lt;phone&gt;021-76546726&lt;/phone&gt; <br />&lt;address&gt;百老汇广场B座&lt;/address&gt; <br />&lt;/restaurant&gt; <br />- &lt;restaurant id="8"&gt; <br />&lt;name&gt;香格里拉大饭店&lt;/name&gt; <br />&lt;phone&gt;021-2312134&lt;/phone&gt; <br />&lt;address&gt;南京路1023号&lt;/address&gt; <br />&lt;/restaurant&gt; <br />&lt;/restaurants&gt; <br />说明：&lt;num&gt;属性是记录在restaurants.xml 文件中总共有过多少条记录，每新增一条，无论以后删除是否，该值都会增加1，就好象数据库中习惯使用的自动增加1的id 项。用来给新增的 &lt;restaurant&gt;的属性&lt;id&gt;赋一个唯一的值。其它的字段意思比较明显。 <br />/tomcat/webapps/ROOT/index.html （单纯的HTML代码） <br /><br />代码： <br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;title&gt;oddWorld 餐饮系统&lt;/title&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br />&lt;/head&gt; <br /><br />&lt;body onload="javascript:dataform.username.focus()"&gt; <br />&lt;div align="center"&gt; <br />&lt;table width="100%" border="0" cellspacing="0" cellpadding="0" height="22"&gt; <br />&lt;tr&gt; <br />&lt;td width="1"&gt;&lt;img src="images/top_r1.GIF" width="62" height="22"&gt;&lt;/td&gt; <br />&lt;td width=150 align="center"&gt; 餐饮系统登录 &lt;/td&gt; <br />&lt;td&gt;&lt;img src="images/top_r2.GIF" width="294" height="22"&gt;&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;table width="300" border="0" cellspacing="1" cellpadding="0" &gt; <br />&lt;tr&gt; <br />&lt;td height="200" valign="top" align="center"&gt; <br />&lt;p align="center"&gt; <br />&lt;table width="100%" border="0" cellspacing="1" cellpadding="5" bgcolor=#999999 class=a9px&gt; <br />&lt;tr&gt; <br />&lt;td bgcolor="#efefef"&gt;餐饮系统登录&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td bgcolor="#FFFFFF" valign="top" align="center"&gt; <br />&lt;table width="100%" border="0" cellspacing="0" cellpadding="0"&gt; <br />&lt;form name=dataform method=post action=''canyin/jsp/loginjudge.jsp''&gt; <br />&lt;tr&gt; <br />&lt;td width="100"&gt;&lt;b&gt;登录名：&lt;/b&gt;&lt;/td&gt; <br />&lt;td&gt; <br />&lt;input maxlength=16 <br />name="username" class=stedit value="joard"&gt; <br />&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td width="100"&gt;&lt;b&gt;密码：&lt;/b&gt;&lt;/td&gt; <br />&lt;td&gt; <br />&lt;input class=stedit maxlength=16 <br />name="userpass" type=password value="oddworld"&gt; <br />&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/form&gt; <br />&lt;/table&gt; <br />&lt;br&gt; <br />&lt;table border=0 cellpadding=0 cellspacing=0&gt; <br />&lt;tbody&gt; <br />&lt;tr&gt; <br />&lt;td&gt; <br />&lt;input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="登 录"&gt; <br />&lt;/td&gt; <br />&lt;td&gt; &lt;/td&gt; <br />&lt;td&gt; <br />&lt;input class=stbtm name=Submit onClick="javascript:window.location.href=''index.asp?myjoke=1'';" type=button value="修改密码"&gt; <br />&lt;/td&gt; <br />&lt;td&gt; &lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/tbody&gt; <br />&lt;/table&gt; <br />&lt;br&gt; <br />&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;/div&gt; <br />&lt;/body&gt; <br />&lt;/html&gt; <br />&lt;SCRIPT language=javascript&gt; <br />&lt;!-- <br />function checkform() <br />{ <br />var Checkblank = /^(\s*|(\　)|(\.))*$/; <br />if (Checkblank.test(dataform.username.value)) <br />{ <br />alert("登录名不能为空!"); <br />return false; <br />} <br /><br />if (Checkblank.test(dataform.userpass.value)) <br />{ <br />alert("密码不能为空!"); <br />return false; <br />} <br /><br /><br />window.dataform.submit(); <br /><br />} <br />--&gt; <br /><br />&lt;/SCRIPT&gt; <br /><br />说明：把用户名称和用户密码提交到/tomcat/webapps/canyin/jsp/loginjudge.jsp <br /><br />/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class （代码是相应的java 文件） <br /><br />package canyin; <br /><br />import javax.servlet.http.HttpSession; <br />import javax.servlet.http.HttpServletRequest; <br /><br />public class checkSessionBean { <br /><br />private boolean bolCheckPass=false; <br />private HttpServletRequest request = null; <br /><br />public boolean checkSessionBean(HttpServletRequest request,String strSessionName,String strCheckValue){ <br />public boolean checkSessionBean(HttpServletRequest request){ <br />HttpSession session = request.getSession(false); <br />return(bolCheckPass); <br /><br />if (strSessionName==null || strCheckValue==null){ <br />return(bolCheckPass); <br />}else{ <br />if (session!=null &amp;&amp; session.getValue(strSessionName)!=null){ <br />bolCheckPass=session.getValue(strSessionName).equals(strCheckValue); <br />} <br /><br />return(bolCheckPass); <br />} <br />} <br />} <br /><br />说明：检验参数传入的session 名称的数值和参数传入的字段的数值是否相等。 <br /><br />/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class <br /><br />代码： <br />package canyin; <br /><br />import javax.xml.parsers.*; <br />import javax.xml.transform.*; <br />import javax.xml.transform.dom.DOMSource; <br />import javax.xml.transform.stream.StreamResult; <br />import org.w3c.dom.*; <br /><br />public class connXmlBean { <br /><br />private DocumentBuilderFactory factory=null; <br />private DocumentBuilder builder=null; <br />private Document doc=null; <br /><br />public connXmlBean(){} <br /><br />public String connXml(String xmlFileName){ <br /><br />String strExc=""; <br /><br />try{ <br />factory = DocumentBuilderFactory.newInstance(); <br />builder=factory.newDocumentBuilder(); <br />doc=builder.parse(xmlFileName); <br />doc.normalize(); <br />}catch(Exception e){ <br />strExc=e.toString(); <br />} <br /><br />return(strExc); <br />} <br /><br />public Document getXmlDoc(){ <br />return(doc); <br />} <br />} <br /><br />说明：打开一个指定xml 文件 <br /><br />/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class <br /><br />代码： <br />package canyin; <br /><br />import javax.xml.parsers.*; <br />import javax.xml.transform.*; <br />import javax.xml.transform.dom.DOMSource; <br />import javax.xml.transform.stream.StreamResult; <br />import java.io.File; <br />import org.w3c.dom.*; <br /><br />public class writeXmlBean { <br /><br />public writeXmlBean(){} <br /><br />public String writeXml(Document doc,String xmlFileName){ <br /><br />String strExc=""; <br /><br />try{ <br />TransformerFactory tfactory = TransformerFactory.newInstance(); <br />Transformer transformer = tfactory.newTransformer(); <br /><br />DOMSource source = new DOMSource(doc); <br /><br />StreamResult result = new StreamResult(new File(xmlFileName)); <br /><br />transformer.transform(source,result); <br />}catch(Exception e){ <br />strExc=e.toString(); <br />} <br /><br />return(strExc); <br />} <br /><br />} <br /><br />说明：写入dom 的内容到一个指定的xml 文件。 <br /><br />/tomcat/webapps/canyin/jsp/loginjudge.jsp <br /><br />代码： <br />&lt;%-- oddWorld 餐饮管理系统(简体中文版) 2002年12月1日 <br />copy right by joard ast <br /><br />loginjudge.jsp 功能：用户身份校验，根据 /data/user.xml 文件内标示的用户不同的身份 <br />决定转入后台管理页面，还是客户点菜页面。 <br />--%&gt; <br /><br />&lt;%@ page contentType="text/html;charset=gb2312" %&gt; <br />&lt;%@ page language="java" import="javax.xml.parsers.*" %&gt; <br />&lt;%@ page import="org.w3c.dom.*" %&gt; <br />&lt;%@ page import="canyin.*" %&gt; <br /><br />&lt;jsp:useBean id="xmlBean" class="canyin.connXmlBean" scope="page" /&gt; <br /><br />&lt;% <br />session.setMaxInactiveInterval(1800); <br /><br /><br />Document doc; <br />NodeList users; <br />String strExc=""; <br />String strUsername,strPassword; <br /><br />strUsername=(String)request.getParameter("username"); <br />strPassword=(String)request.getParameter("userpass"); <br /><br />//校验数据是否为空 <br />if (strUsername=="" || strPassword=="" ){ <br />out.println("&lt;script language=''javascript''&gt;"); <br />out.println("alert(''用户名或密码有空值!'');"); <br />out.println("window.location.href=''/index.html'';"); <br />out.println("&lt;/script&gt;"); <br />return; <br />} <br /><br />xmlBean.connXml("webapps/canyin/data/users.xml"); <br />doc=xmlBean.getXmlDoc(); <br /><br />try{ <br />users =doc.getElementsByTagName("user"); <br /><br />for (int i=0;i&lt;users.getLength();i++){ <br />Element user=(Element) users.item(i); <br /><br />String strAtrNameValue=user.getAttributeNode("name").getNodeValue(); <br />String strAtrPassWordValue=user.getAttributeNode("password").getNodeValue(); <br />String strAtrRoleValue=user.getAttributeNode("roles").getNodeValue(); <br /><br /><br /><br />if (strAtrNameValue.equals(strUsername) &amp;&amp; strAtrPassWordValue.equals(strPassword)){ <br /><br />if (strAtrRoleValue.equals("admin")){ <br />out.println("&lt;script language=''javascript''&gt;"); <br />out.println("alert(''欢迎管理员登陆系统!'');"); <br />out.println("&lt;/script&gt;"); <br /><br />//设置标示用户身份的 session（sesUserRole） ，管理员身份为 admin <br />session.setAttribute("sesUserRole","admin"); <br /><br />//跳转到管理页面 <br />response.sendRedirect("admin/admin_rest.jsp"); <br />return; <br /><br />}else{ <br />//设置标示用户身份的 session（sesUserRole） ，管理员身份为 user <br />session.setAttribute("sesUserRole","user"); <br /><br />//跳转到普通用户页面 <br />response.sendRedirect("index.jsp"); <br />return; <br />} <br /><br />}else{ <br />out.println("&lt;script language=''javascript''&gt;"); <br />out.println("alert(''用户名或密码错误!'');"); <br />out.println("history.go(-1);"); <br />out.println("&lt;/script&gt;"); <br />return; <br />} <br /><br />} <br />}catch(Exception e){ <br />strExc=e.toString(); <br />} <br />%&gt; <br />说明：....... <br /><br />/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp <br /><br />代码： <br />&lt;%-- oddWorld 餐饮管理系统(简体中文版) 2002年12月1日 <br />copy right by joard ast <br /><br />admin_rest.jsp 功能：后台管理页面，餐馆管理页面。 <br />--%&gt; <br /><br />&lt;%@ page contentType="text/html;charset=gb2312" %&gt; <br />&lt;%@ page language="java" import="javax.xml.parsers.*" %&gt; <br />&lt;%@ page import="javax.xml.transform.*" %&gt; <br />&lt;%@ page import="org.w3c.dom.*" %&gt; <br />&lt;%@ page import="canyin.*" %&gt; <br /><br />&lt;%@ include file="../../include/sys_dialog.jsp" %&gt; <br /><br />&lt;jsp:useBean id="checkSessionBean" class="canyin.checkSessionBean" scope="page" /&gt; <br />&lt;jsp:useBean id="xmlBean" class="canyin.connXmlBean" scope="page" /&gt; <br />&lt;jsp:useBean id="writeXmlBean" class="canyin.writeXmlBean" scope="page" /&gt; <br /><br />&lt;%//校验可户身份，判断是不是管理员 <br />if(!checkSessionBean.checkSessionBean(request,"sesUserRole","admin")){ <br />out.print(showDialog("您没有管理的权限!","/index.html")); <br />return; <br />} <br /><br />//从餐馆资料文件 rest.xml 中得到相关数据 <br />Document doc; <br />NodeList restaurants; <br /><br />String strAct; <br />int intId=0; <br />String strOperation="show"; <br /><br />//接受外部传入的参数 <br />strAct=(String)request.getParameter("act"); <br /><br />xmlBean.connXml("webapps/canyin/data/restaurants.xml"); <br />doc=xmlBean.getXmlDoc(); <br />restaurants =doc.getElementsByTagName("restaurant"); <br /><br />//根据外部传入的参数来决定对 restaurant.xml 文件的操作 <br />if (strAct!=null){ <br />if(strAct.equals("addnewDo")){ <br /><br />String strName; <br />String strPhone; <br />String strAddress; <br />Text textseg; <br /><br />strName=(String)request.getParameter("name").trim(); <br />strPhone=(String)request.getParameter("phone").trim(); <br />strAddress=(String)request.getParameter("address").trim(); <br /><br />//数据校验 <br />if(strName==null){ <br />out.print(showDialog("餐馆名称不能为空!")); <br />return; <br />} <br />if(strPhone==null){ <br />out.print(showDialog("餐馆电话不能为空!")); <br />return; <br />} <br />/*if(strAddress==null){ <br />out.print(showDialog("餐馆地址不能为空!")); <br />return; <br />}*/ <br /><br />//校验数据的唯一性 <br />for(int i=0;i&lt;restaurants.getLength();i++){ <br />Element restaurant=(Element) restaurants.item(i); <br />if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){ <br />out.print(showDialog("餐馆名称重复!")); <br />return; <br />}else{ <br />if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){ <br />out.print(showDialog("餐馆电话重复!")); <br />return; <br />} <br />} <br /><br />} <br /><br /><br /><br />//得到已有的记录数，给新增的餐馆记录设定唯一的递增的id 属性 <br />int intNum=0; <br />Element restNum=(Element)doc.getElementsByTagName("restaurants").item(0); <br />intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue()); <br /><br />intNum+=1; <br /><br />//为restaurants的属性num 的数值加1 <br />restNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum)); <br /><br />//新增节点 <br />Element newRestaurant=doc.createElement("restaurant"); <br /><br />Attr newArrId=doc.createAttribute("id"); <br />//Attribute newArrId = new Attribute("id",String.valueOf(intNum)); <br />textseg=doc.createTextNode(String.valueOf(intNum)); <br />newArrId.setValue(String.valueOf(intNum)); <br />newRestaurant.setAttributeNode(newArrId); <br /><br />Element newName=doc.createElement("name"); <br />textseg=doc.createTextNode(strName); <br />newName.appendChild(textseg); <br />newRestaurant.appendChild(newName); <br /><br />Element newPhone=doc.createElement("phone"); <br />textseg=doc.createTextNode(strPhone); <br />newPhone.appendChild(textseg); <br />newRestaurant.appendChild(newPhone); <br /><br />Element newAddress=doc.createElement("address"); <br />textseg=doc.createTextNode(strAddress); <br />newAddress.appendChild(textseg); <br />newRestaurant.appendChild(newAddress); <br /><br />doc.getDocumentElement().appendChild(newRestaurant); <br /><br />//调用bean 写入相应的xml文件 <br />writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml"); <br /><br />response.sendRedirect(request.getRequestURI()); <br />return; <br />} <br />if(strAct.equals("modiDo")){ <br />String strName; <br />String strPhone; <br />String strAddress; <br />Text textseg; <br />int modiId; <br />//记录要修改的记录是item(i)的哪一项 <br />int intI=0; <br /><br />strName=(String)request.getParameter("name").trim(); <br />strPhone=(String)request.getParameter("phone").trim(); <br />strAddress=(String)request.getParameter("address").trim(); <br />modiId=Integer.parseInt(request.getParameter("recordId").trim()); <br /><br />//数据校验 <br />if(strName==null){ <br />out.print(showDialog("餐馆名称不能为空!")); <br />return; <br />} <br />if(strPhone==null){ <br />out.print(showDialog("餐馆电话不能为空!")); <br />return; <br />} <br />if(modiId==0){ <br />out.print(showDialog("你要修改餐馆的记录不存在!")); <br />return; <br />} <br />/*if(strAddress==null){ <br />out.print(showDialog("餐馆地址不能为空!")); <br />return; <br />}*/ <br /><br />//标志显示记录存在 <br />boolean recordExist=false; <br /><br />//校验数据的唯一性 <br />for(int i=0;i&lt;restaurants.getLength();i++){ <br />Element restaurant=(Element) restaurants.item(i); <br /><br />if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){ <br />recordExist=true; <br />intI=i; <br /><br />} <br /><br />if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName) &amp;&amp; Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())!=modiId ){ <br />out.print(showDialog("餐馆名称重复!")); <br />return; <br />}else{ <br />if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone) &amp;&amp; Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())!=modiId ){ <br />out.print(showDialog("餐馆电话重复!")); <br />return; <br />} <br />} <br /><br />} <br /><br /><br /><br />if(!recordExist){ <br />out.print(showDialog("你要修改餐馆的记录不存在!")); <br />return; <br />}else{ <br />//进行记录更改的操作 <br />try{ <br />Element modiRestaurant=(Element) restaurants.item(intI); <br />modiRestaurant.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(strName); <br />modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone); <br />modiRestaurant.getElementsByTagName("address").item(0).getFirstChild().setNodeValue(strAddress); <br /><br />//调用bean 写入相应的xml文件 <br />writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml"); <br /><br />response.sendRedirect(request.getRequestURI()); <br />return; <br /><br />}catch(Exception e){} <br />} <br />} <br />//进行删除操作 <br />if(strAct.equals("del")){ <br />int delId; <br />//记录要修改的记录是item(i)的哪一项 <br />int intI=0; <br /><br />delId=Integer.parseInt(request.getParameter("recordId").trim()); <br /><br />if(delId==0){ <br />out.print(showDialog("你要修改餐馆的记录不存在!")); <br />return; <br />} <br /><br />file://标志显示记录存在 <br />boolean recordExist=false; <br /><br />//校验数据的唯一性 <br />for(int i=0;i&lt;restaurants.getLength();i++){ <br />Element restaurant=(Element) restaurants.item(i); <br /><br />if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){ <br />recordExist=true; <br />intI=i; <br /><br />} <br />} <br /><br />if(!recordExist){ <br />out.print(showDialog("你要删除餐馆的记录不存在!")); <br />return; <br />}else{ <br />//进行记录删除的操作 <br />try{ <br />Node delNode=(Node)restaurants.item(intI); <br /><br />doc.getElementsByTagName("restaurants").item(0).removeChild(delNode); <br /><br />//调用bean 写入相应的xml文件 <br />writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml"); <br /><br />response.sendRedirect(request.getRequestURI()); <br />return; <br /><br />}catch(Exception e){} <br />} <br /><br />} <br />} <br /><br />//由外部传入参数决定页面相应的处理状态 <br />if (strAct==null){ <br />strOperation="show"; <br />}else{ <br />if (strAct.equals("modi")){ <br />strOperation="modi"; <br />intId=Integer.parseInt(request.getParameter("recordId")); <br />}else{ <br />if(strAct.equals("addnew")){ <br />strOperation="addnew"; <br />}else{ <br />strOperation="show"; <br />} <br />} <br />} <br /><br /><br />//如果为空记录，则变更页面状态为“新增” <br />if (restaurants.getLength()==0){ <br />strOperation="addnew"; <br />} <br />%&gt; <br /><br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;title&gt;oddWorld 餐饮系统&lt;/title&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br />&lt;meta http-equiv="expires" content="0"&gt; <br />&lt;link rel="stylesheet" href="../../include/itsp.css" type="text/css"&gt; <br />&lt;/head&gt; <br /><br />&lt;body &gt; <br />&lt;div align="center"&gt; <br />&lt;table width="100%" border="0" cellspacing="0" cellpadding="0" height="22"&gt; <br />&lt;tr&gt; <br />&lt;td width="1"&gt;&lt;img src="../../images/top_r1.GIF" width="62" height="22"&gt;&lt;/td&gt; <br />&lt;td width=150 align="center"&gt; 餐饮系统管理--餐馆管理&lt;/td&gt; <br />&lt;td&gt;&lt;img src="../../images/top_r2.GIF" width="294" height="22"&gt;&lt;/td&gt; <br />&lt;td width=100 align="center"&gt;&lt;a href="/index.html"&gt;[ 退出系统 ]&lt;/a&gt;&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;br&gt; <br />&lt;br&gt; <br />&lt;table bgcolor="#999999" align=center border=0 cellpadding=1 cellspacing=1 <br />width="90%"&gt; <br />&lt;tbody&gt; <br />&lt;tr bgcolor="#efefef" align="center" valign="middle"&gt; <br />&lt;td class=ttTable height=30 width="20"&gt; &lt;/td&gt; <br />&lt;td class=ttTable height=30 width="0"&gt;餐馆名称&lt;/td&gt; <br />&lt;td class=ttTable height=30 width="0"&gt;餐馆电话&lt;/td&gt; <br />&lt;td class=ttTable height=30 width="0"&gt; <br />&lt;div align="center"&gt;餐馆地址&lt;/div&gt; <br />&lt;/td&gt; <br />&lt;td class=ttTable height=30 width="30"&gt; <br />&lt;div align="center"&gt;修改&lt;/div&gt; <br />&lt;/td&gt; <br />&lt;td class=ttTable height=30 width="30"&gt; <br />&lt;div align="center"&gt;删除&lt;/div&gt; <br />&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;% <br />for(int i=0;i&lt;restaurants.getLength();i++) <br />{ <br />Element restaurant=(Element) restaurants.item(i); <br /><br />if (strOperation=="modi" &amp;&amp; Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){ <br />%&gt; <br />&lt;%//显示修改的格式%&gt; <br />&lt;tr align="center" bgcolor="#ffffff" valign="middle"&gt; <br />&lt;form name=dataform action="&lt;%=request.getRequestURI()%&gt;?act=modiDo" method="post" onSubmit=''return checkform(this);'' &gt; <br />&lt;td class=tdsmall height=25 width="20"&gt; <br />&lt;input type="hidden" name="recordId" value="&lt;%=restaurant.getAttributeNode("id").getNodeValue()%&gt;"&gt; <br />&lt;%=(i+1)%&gt;&lt;/td&gt; <br />&lt;td class=tdsmall height=25&gt; <br />&lt;input name="name" class=stedit <br />style="HEIGHT: 22px; WIDTH: 150px" value="&lt;%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){ <br />out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); <br /><br />}%&gt; <br />" maxlength="40" &gt; <br />&lt;/td&gt; <br />&lt;td class=tdsmall height=25&gt; <br />&lt;input name="phone" class=stedit <br />style="HEIGHT: 22px; WIDTH: 100px" value="&lt;%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){ <br />out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue()); <br /><br />}%&gt;" maxlength="20" &gt; <br />&lt;/td&gt; <br />&lt;td class=tdsmall height=25&gt; <br />&lt;input name="address" class=stedit <br />style="HEIGHT: 22px; WIDTH: 200px" value="&lt;% <br /><br />if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){ <br />out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue()); <br /><br />}%&gt;" maxlength="100" &gt; <br />&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="25"&gt;&lt;a href="javascript:if (checkform()==false);"&gt;&lt;img border=0 <br />height=15 src="../../images/editok.gif" width=15&gt;&lt;/a&gt;&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="25"&gt; &lt;/td&gt; <br />&lt;/form&gt; <br />&lt;/tr&gt; <br />&lt;% }else{ <br />//显示正常的格式 %&gt; <br />&lt;tr align="center" bgcolor="#ffffff" valign="middle"&gt; <br />&lt;td class=tdsmall height=25 width="20"&gt;&lt;%=(i+1)%&gt;&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="0"&gt;&lt;%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){ <br />out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); <br /><br />}%&gt; <br />&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="0"&gt;&lt;%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){ <br />out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue()); <br /><br />}%&gt;&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="0"&gt; <br />&lt;% <br />if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){ <br />out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue()); <br /><br />}%&gt; <br />&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="30"&gt;&lt;a href="&lt;%=request.getRequestURI()%&gt;?act=modi&amp;recordId=&lt;%=restaurant.getAttributeNode("id").getNodeValue()%&gt;"&gt;&lt;img border=0 <br />height=15 src="../../images/edit.gif" width=15&gt;&lt;/a&gt;&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="30"&gt;&lt;img border=0 <br />height=15 <br />onClick="javascript:if(confirm(''您是否确定删除本记录，删除后将导至记录无法使用？'')){window.location.href=''&lt;%=request.getRequestURI()%&gt;?act=del&amp;recordId=&lt;%=restaurant.getAttributeNode("id").getNodeValue()%&gt;'';}" <br />src="../../images/delete.gif" style="CURSOR: hand" width=15&gt; &lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;% } <br />}%&gt; <br />&lt;% if (strOperation=="addnew"){ <br />//显示新增的格式%&gt; <br />&lt;tr align="center" bgcolor="#ffffff" valign="middle"&gt; <br />&lt;form name=dataform2 action="&lt;%=request.getRequestURI()%&gt;?act=addnewDo" method="post" onSubmit=''return checkform2(this);'' &gt; <br />&lt;td class=tdsmall height=25 width="20"&gt;&lt;/td&gt; <br />&lt;td class=tdsmall height=25&gt; <br />&lt;input name="name" class=stedit <br />style="HEIGHT: 22px; WIDTH: 150px" value="" maxlength="40" &gt; <br />&lt;/td&gt; <br />&lt;td class=tdsmall height=25&gt; <br />&lt;input name="phone" class=stedit <br />style="HEIGHT: 22px; WIDTH: 100px" value="" maxlength="20" &gt; <br />&lt;/td&gt; <br />&lt;td class=tdsmall height=25&gt; <br />&lt;input name="address" class=stedit <br />style="HEIGHT: 22px; WIDTH: 200px" value="" maxlength="100" &gt; <br />&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="25"&gt;&lt;a href="javascript:if (checkform2()==false);"&gt;&lt;img border=0 <br />height=15 src="../../images/editok.gif" width=15&gt;&lt;/a&gt;&lt;/td&gt; <br />&lt;td class=tdsmall height=25 width="25"&gt; &lt;/td&gt; <br />&lt;/form&gt; <br />&lt;/tr&gt; <br />&lt;% } %&gt; <br />&lt;/tbody&gt; <br />&lt;/table&gt; <br />&lt;br&gt; <br />&lt;table align=center border=0 cellpadding=0 cellspacing=2 width="95%"&gt; <br />&lt;tbody&gt; <br />&lt;tr valign=center&gt; <br />&lt;td align=middle&gt; &lt;br&gt; <br />&lt;table border=0 cellpadding=0 cellspacing=0&gt; <br />&lt;tr&gt; <br />&lt;td&gt; <br />&lt;% if (strOperation=="addnew"){ <br />%&gt; <br />&lt;input class=stbtm name=update onClick="javascript:if (checkform2()==false);" type=button value="更新记录"&gt; <br />&lt;% }else{ <br />if(strOperation=="modi"){ <br />%&gt; <br />&lt;input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="更新记录"&gt; <br />&lt;% <br />}else{ <br />%&gt; <br />&lt;input class=stbtm type="button" name="Button" value="新 增" onClick="javascript:window.location.href=''&lt;%=request.getRequestURI()%&gt;?act=addnew'';"&gt;&lt;% <br />} <br />} %&gt; <br />&lt;/td&gt; <br />&lt;td&gt; <br />&lt;input class=stbtm type="button" name="Button" value="返 回" onClick="javascript:window.location.href=''index.jsp'';"&gt; <br />&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;p&gt; &lt;/p&gt; <br />&lt;/div&gt; <br />&lt;/body&gt; <br />&lt;/html&gt; <br />&lt;SCRIPT LANGUAGE=javascript&gt; <br />&lt;!-- <br />function checkform2() <br />{ <br />var Checkblank = /^(\s*|(\　)|(\.))*$/; <br /><br />if (Checkblank.test(dataform2.name.value)) <br />{ <br />alert("餐馆名称不能为空！"); <br />dataform2.name.focus(); <br />return false; <br />} <br /><br />if (Checkblank.test(dataform2.phone.value)) <br />{ <br />alert("餐馆电话不能为空！"); <br />dataform2.phone.focus(); <br />return false; <br />} <br />window.dataform2.submit(); <br />} <br /><br />function checkform() <br />{ <br />var Checkblank = /^(\s*|(\　)|(\.))*$/; <br />if (Checkblank.test(dataform.name.value)) <br />{ <br />alert("餐馆名称不能为空！"); <br />dataform.name.focus(); <br />return false; <br />} <br /><br />if (Checkblank.test(dataform.phone.value)) <br />{ <br />alert("餐馆电话不能为空！"); <br />dataform.phone.focus(); <br />return false; <br />} <br /><br /><br />window.dataform.submit(); <br />} <br />--&gt; <br />&lt;/SCRIPT&gt; <br />说明：本文件的书写有很多地方并不简练，因为在程式的开发过程中，过分简练的程序往往会带来后期维护的困难。 <br /><br />开发心得： <br /><br />doc.getElementsByTagName("restaurants").item(int i)的返回值是node 型，如果不是要调用它的属性值，没有必要强制转型为 Element型。可以直接操作。本系统因为开发的参考资料的错误，所以全都采用了强制转型。可以在以后的开发中考虑使用node 直接进行操作。 <br />trim() 和 Interger.parseInt() 函数都不可以接受null 型的数值 <br />在tomcat 下左右的文件都是目录从TOMCAT 算起，具体情况请参见\webapps\canyin\jsp\userjudge.jsp 里关于xml 路径的写法。</font>
<img src ="http://www.blogjava.net/yaozhuan/aggbug/53900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-06-20 09:48 <a href="http://www.blogjava.net/yaozhuan/articles/53900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js dojo 中 javascript继承实现(转)</title><link>http://www.blogjava.net/yaozhuan/articles/45142.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Tue, 09 May 2006 01:26:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/45142.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/45142.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/45142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/45142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/45142.html</trackback:ping><description><![CDATA[
		<h1 class="block_title">
				<font size="2">
						<strong>1、对象的继承</strong>
						<br />在prototype.js中extend实现中，只是简单的属性拷贝。<br />在dojo的lang.js中,也有个属性拷贝的函数 叫 dojo.lang.mixin。显然dojo的实现严谨多了。 既没有改变Object.prototype，另外toString函数也可以拷贝到目标对象中。  如果你熟悉 commons-beanutils 的copyProperties方法，那么就好理解了，但要注意javascript中function函数也是数据类型。</font>
		</h1>
		<div class="post">
				<div class="postcontent">
						<p>
								<font size="2">
								</font> </p>
						<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
								<font size="2">
										<img id="Codehighlighter1_38_380_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_380_Open_Text.style.display='none'; Codehighlighter1_38_380_Closed_Image.style.display='inline'; Codehighlighter1_38_380_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
										<img id="Codehighlighter1_38_380_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_380_Closed_Text.style.display='none'; Codehighlighter1_38_380_Open_Image.style.display='inline'; Codehighlighter1_38_380_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
										<span style="COLOR: #000000">dojo.lang.mixin </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> function(obj, props)</span>
										<span id="Codehighlighter1_38_380_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
								</font>
								<span id="Codehighlighter1_38_380_Open_Text">
										<font size="2">
												<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_52_53_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_53_Open_Text.style.display='none'; Codehighlighter1_52_53_Closed_Image.style.display='inline'; Codehighlighter1_52_53_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_52_53_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_52_53_Closed_Text.style.display='none'; Codehighlighter1_52_53_Open_Image.style.display='inline'; Codehighlighter1_52_53_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> var tobj </span>
												<span style="COLOR: #000000">=</span>
												<span style="COLOR: #000000"> </span>
												<span id="Codehighlighter1_52_53_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
														<img src="http://www.blogjava.net/images/dot.gif" />
												</span>
												<span id="Codehighlighter1_52_53_Open_Text">
														<span style="COLOR: #000000">{}</span>
												</span>
										</font>
										<font size="2">
												<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_76_166_Open_Image" onclick="this.style.display='none'; Codehighlighter1_76_166_Open_Text.style.display='none'; Codehighlighter1_76_166_Closed_Image.style.display='inline'; Codehighlighter1_76_166_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_76_166_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_76_166_Closed_Text.style.display='none'; Codehighlighter1_76_166_Open_Image.style.display='inline'; Codehighlighter1_76_166_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span>
												<span style="COLOR: #0000ff">for</span>
												<span style="COLOR: #000000">(var x in props)</span>
												<span id="Codehighlighter1_76_166_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
														<img src="http://www.blogjava.net/images/dot.gif" />
												</span>
										</font>
										<span id="Codehighlighter1_76_166_Open_Text">
												<font size="2">
														<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_137_163_Open_Image" onclick="this.style.display='none'; Codehighlighter1_137_163_Open_Text.style.display='none'; Codehighlighter1_137_163_Closed_Image.style.display='inline'; Codehighlighter1_137_163_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_137_163_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_137_163_Closed_Text.style.display='none'; Codehighlighter1_137_163_Open_Image.style.display='inline'; Codehighlighter1_137_163_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
														<span style="COLOR: #0000ff">if</span>
														<span style="COLOR: #000000">(typeof tobj[x] </span>
														<span style="COLOR: #000000">==</span>
														<span style="COLOR: #000000"> </span>
														<span style="COLOR: #000000">"</span>
														<span style="COLOR: #000000">undefined</span>
														<span style="COLOR: #000000">"</span>
														<span style="COLOR: #000000"> </span>
														<span style="COLOR: #000000">||</span>
														<span style="COLOR: #000000"> tobj[x] </span>
														<span style="COLOR: #000000">!=</span>
														<span style="COLOR: #000000"> props[x]) </span>
														<span id="Codehighlighter1_137_163_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
																<img src="http://www.blogjava.net/images/dot.gif" />
														</span>
												</font>
												<span id="Codehighlighter1_137_163_Open_Text">
														<font size="2">
																<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   obj[x] </span>
																<span style="COLOR: #000000">=</span>
														</font>
														<font size="2">
																<span style="COLOR: #000000"> props[x];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
														</font>
												</span>
												<span style="COLOR: #000000">
														<br />
														<font size="2">
																<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</font>
												</span>
												<font size="2">
												</font>
										</span>
										<span style="COLOR: #000000">
												<br />
												<font size="2">
														<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> </font>
										</span>
										<font size="2">
												<span style="COLOR: #008000">//</span>
												<span style="COLOR: #008000"> IE doesn't recognize custom toStrings in for..in</span>
										</font>
										<span style="COLOR: #008000">
												<br />
												<font size="2">
														<img id="Codehighlighter1_329_365_Open_Image" onclick="this.style.display='none'; Codehighlighter1_329_365_Open_Text.style.display='none'; Codehighlighter1_329_365_Closed_Image.style.display='inline'; Codehighlighter1_329_365_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
														<img id="Codehighlighter1_329_365_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_329_365_Closed_Text.style.display='none'; Codehighlighter1_329_365_Open_Image.style.display='inline'; Codehighlighter1_329_365_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
												</font>
										</span>
										<font size="2">
												<span style="COLOR: #000000"> </span>
												<span style="COLOR: #0000ff">if</span>
												<span style="COLOR: #000000">(dojo.render.html.ie </span>
												<span style="COLOR: #000000">&amp;&amp;</span>
												<span style="COLOR: #000000"> dojo.lang.isFunction(props[</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">toString</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">]) </span>
												<span style="COLOR: #000000">&amp;&amp;</span>
												<span style="COLOR: #000000"> props[</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">toString</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">] </span>
												<span style="COLOR: #000000">!=</span>
												<span style="COLOR: #000000"> obj[</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">toString</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">]) </span>
												<span id="Codehighlighter1_329_365_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
														<img src="http://www.blogjava.net/images/dot.gif" />
												</span>
										</font>
										<span id="Codehighlighter1_329_365_Open_Text">
												<font size="2">
														<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  obj.toString </span>
														<span style="COLOR: #000000">=</span>
												</font>
												<font size="2">
														<span style="COLOR: #000000"> props.toString;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</span>
												</font>
										</span>
										<span style="COLOR: #000000">
												<br />
												<font size="2">
														<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> </font>
										</span>
										<font size="2">
												<span style="COLOR: #0000ff">return</span>
										</font>
										<font size="2">
												<span style="COLOR: #000000"> obj;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
										</font>
								</span>
						</div>
						<p>
								<font size="2">
								</font> </p>
						<p>
								<font size="2">例子代码</font>
						</p>
						<p>
								<font size="2">
										<font style="BACKGROUND-COLOR: #a9a9a9">&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />&lt;!--<br />function pf(key,msg){<br />    document.writeln("&lt;div&gt;"+key+':'+msg+"&lt;/div&gt;");<br />}<br />Object.extend = function(destination, source) {<br />  for (property in source) {<br />    destination[property] = source[property];<br />  }<br />  return destination;<br />}<br />function Source(name){<br />    this.name=name;<br />};<br />Source.prototype.getName=function(){<br />    return this.name;<br />}<br />Source.prototype.obj={name:'aaa'};<br />Source.prototype.toString=function(){<br />    return this.name;<br />}<br />var source=new Source('zkj');<br />var obj={};<br />pf('obj.name',obj.name)<br />Object.extend(obj,source);<br />pf('obj.name',obj.name)//zkj<br />pf('source',source)//zkj<br />pf('obj',obj)//没有拷贝toString函数<br />pf('source.obj.name',source.obj.name)//aaa<br />obj.obj.name='bbb';<br />pf('obj.obj.name',obj.obj.name) //bbb<br />pf('source.obj.name',source.obj.name) <br />//--&gt;<br />&lt;/SCRIPT&gt;</font>
								</font>
						</p>
						<p>
								<font size="2">对象之间的属性拷贝（extend） 和java c++中继承概念完全不一样。有几个问题需要注意<br /><strong>a、</strong>如果源对象的属性在 (for in) 不出现，那目标对象将不全。  </font>
								<a class="" title="" href="/zkjbeyond/archive/2006/04/16/41336.html" target="_blank">
										<font size="2">for in</font>
								</a>
								<br />
								<font size="2">
										<strong>b、</strong>如果源对象的属性是prototype的属性，也可以拷贝，但目标对象将当作自己的属性来使用。<br /><strong>c、</strong>如果属性是对象（引用传递），那任何持有者修改这个对象，内容全部都修改了。所以只是“浅度clone”.你也可以模仿dwr  DWRUtil.toDescriptiveString方法实现多层的属性拷贝（没必要吧）。<br /><strong>d、</strong>如果属性是方法，那目标对象使用方法可能会出现问题，因为方法中很可能包括 this 关键字。所以我觉得javascript对象只当作数据模型使用可能会简单很多。如DWR框架，这也是我喜欢dwr原因之一，完全以数据为核心的AJAX框架。</font>
						</p>
						<p>
								<font size="2">
										<strong>2、自定义类的继承</strong>
										<br />我把用function定义的类叫自定义类。如 function Person(name){this.name=name}; 这种类有个复杂的原型对象porotype。<br />如果用prototype.js实现这类的继承，只能变相的通过原型对象的拷贝来实现。(Object.extend(des.prototype,source.prototype))。这样两个类的原型对象内容一样，但这种方法叫继承太过牵强，我感觉用起来有一定限制。（大家可以读prototype.js看到这种用法）</font>
						</p>
						<p>
								<font size="2">关于类的继承我推荐dojo或犀牛书中写法。</font>
						</p>
						<p>
								<font size="2">
										<font style="BACKGROUND-COLOR: #a9a9a9">&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />var dojo={};<br />dojo.lang={};<br />dojo.inherits = function(subclass, superclass){<br /> subclass.prototype = new superclass();<br /> subclass.prototype.constructor = subclass;<br /> subclass.superclass = superclass.prototype;<br />}<br />dojo.lang.mixin = function(obj, props){<br /> var tobj = {};<br /> for(var x in props){<br />  if(typeof tobj[x] == "undefined" || tobj[x] != props[x]) {<br />   obj[x] = props[x];<br />  }<br /> }<br /> // IE doesn't recognize custom toStrings in for..in<br /> if(true) {<br />  obj.toString = props.toString;<br /> }<br /> return obj;<br />}</font>
								</font>
						</p>
						<p>
								<font size="2">
										<font style="BACKGROUND-COLOR: #a9a9a9">dojo.lang.extend = function(ctor, props){<br /> this.mixin(ctor.prototype, props);<br />}</font>
								</font>
						</p>
						<p>
								<font size="2">
										<font style="BACKGROUND-COLOR: #a9a9a9">dojo.lang.extendPrototype = function(obj, props){<br /> this.extend(obj.constructor, props);<br />}<br />function Person(){<br />}<br />Person.prototype.getName=function(){<br />    return this.name;<br />}<br />Person.prototype.setName=function(name){<br />    this.name=name;<br />}<br />Person.prototype.toString=function(){<br />    return this.name;<br />}<br />function Man(){<br />}<br />dojo.inherits(Man, Person);<br />dojo.lang.extend(Man,{<br />getName:function(){return this.name+' of Man';},<br />getAge:function(){return this.age;},<br />setAge:function(age){this.age=age;}<br />});<br />var man=new Man();<br />man.setName('zkj');<br />man.setAge(25);<br />alert(man.getName());<br />alert(man.getAge());<br />alert(Man.superclass.getName.call(man,null));//父方法<br />&lt;/SCRIPT&gt;</font>
								</font>
						</p>
						<p>
								<br />
								<font size="2">这样模拟的java中的继承，也有方法覆盖等概念，可对于javascript语言来说，这样造成一定的复杂性。有几个方面需要注意：<br /><strong>a、</strong>在java中，继承是为了代码重用，语言的特性决定java继承是有用的（多用接口代替继承）。但javascript中，继承存在好象没那么必要，估计是那帮java迷的杰作。<br /><strong>b、</strong>javascript语言的可重用代码比较难写，不同浏览器，语言版本也带来一些复杂性。javascript包机制，模块划分,严格的语法检查等等的不完善支持，造成javascript代码的一片混乱。<br /><strong>c、</strong>javascript在网页中的作用与java，c++作用不同，实现的功能决定高级语言特征不需要。但现在ajax的兴起可能有改观。<br />d、继承虽然可以模拟实现，但这只是模拟，并不是语言底层支持，在代码质量、代码风格、可读性、可维护性都会造成一定麻烦。如果你用了dojo，那你必须让读你代码的人也熟悉dojo。或知道你的代码实现思路。 <br />e、IDE支持。javascrit极大的软肋，就不多说。javascript框架的复杂度、推广的难度，编译检查等，决定javascript的复杂应用只是少数人能干的事。<br />f、浏览器中javascript需要多线程吗？好象csdn见有人模拟了个实现。完全不需要。浏览器下载了代码，自己用自己的。所以我认为javascript中只有静态 （static）方法就够了，没必要有对象概念。只要var obj=new Object();这种只放数据的对象加上静态方法就够了。 </font>
						</p>
						<p>
								<font size="2">大家可以看看dojo的代码。</font>
						</p>
						<p>
								<font size="2">说这么多，在你自己写的代码中，你不要用javascript的类继承，我宁愿ctrl+c\v 也不用继承来重用代码。除非dojo真的能统一江湖。</font>
						</p>
						<p>
								<font size="2">参考:<br />   &lt;javascript权威指南&gt;<br />   </font>
								<a class="" title="" href="/zkjbeyond/category/10156.html" target="_blank">
										<font size="2">javascript的一些文章</font>
								</a>
								<br />
								<font size="2">   </font>
								<a class="" title="" href="http://prototype.conio.net/" target="_blank">
										<font size="2">prototype.js</font>
								</a>
								<br />
								<font size="2">  </font>
								<a class="" title="" href="http://manual.dojotoolkit.org/lang.html" target="_blank">
										<font size="2">dojo的文档</font>
								</a>
						</p>
						<p>
								<font size="2">
								</font> </p>
				</div>
		</div>
<img src ="http://www.blogjava.net/yaozhuan/aggbug/45142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-05-09 09:26 <a href="http://www.blogjava.net/yaozhuan/articles/45142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mime-Type资料</title><link>http://www.blogjava.net/yaozhuan/articles/41695.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Tue, 18 Apr 2006 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/41695.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/41695.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/41695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/41695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/41695.html</trackback:ping><description><![CDATA[Mime-Type 
<p></p><table cellspacing="0" cellpadding="0" bgcolor="#c0c0c0" border="0"><tbody><tr><td><table cellspacing="1" cellpadding="3" border="0"><tbody><tr><th align="left" bgcolor="#eeeeee">Mime-Type</th><th align="left" bgcolor="#eeeeee">Dateiendung(en)</th><th align="left" bgcolor="#eeeeee">Bedeutung</th></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/acad</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.dwg</font></code></td><td valign="top" bgcolor="#e4eeff">AutoCAD-Dateien (nach NCSA)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/applefile</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">AppleFile-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/astound</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.asd *.asn</font></code></td><td valign="top" bgcolor="#e4eeff">Astound-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/dsptype</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.tsp</font></code></td><td valign="top" bgcolor="#e4eeff">TSP-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/dxf</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.dxf</font></code></td><td valign="top" bgcolor="#e4eeff">AutoCAD-Dateien (nach CERN)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/futuresplash</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.spl</font></code></td><td valign="top" bgcolor="#e4eeff">Flash Futuresplash-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/gzip</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.gz</font></code></td><td valign="top" bgcolor="#e4eeff">GNU Zip-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/listenup</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.ptlk</font></code></td><td valign="top" bgcolor="#e4eeff">Listenup-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/mac-binhex40</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.hqx</font></code></td><td valign="top" bgcolor="#e4eeff">Macintosh Binär-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/mbedlet</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.mbd</font></code></td><td valign="top" bgcolor="#e4eeff">Mbedlet-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/mif</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.mif</font></code></td><td valign="top" bgcolor="#e4eeff">FrameMaker Interchange Format Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/msexcel</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.xls *.xla</font></code></td><td valign="top" bgcolor="#e4eeff">Microsoft Excel Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/mshelp</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.hlp *.chm</font></code></td><td valign="top" bgcolor="#e4eeff">Microsoft Windows Hilfe Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/mspowerpoint</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.ppt *.ppz *.pps *.pot</font></code></td><td valign="top" bgcolor="#e4eeff">Microsoft Powerpoint Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/msword</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.doc *.dot</font></code></td><td valign="top" bgcolor="#e4eeff">Microsoft Word Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/octet-stream</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.bin *.exe *.com *.dll *.class</font></code></td><td valign="top" bgcolor="#e4eeff">Ausfｕhrbare Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/oda</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.oda</font></code></td><td valign="top" bgcolor="#e4eeff">Oda-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/pdf</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.pdf</font></code></td><td valign="top" bgcolor="#e4eeff">Adobe PDF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/postscript</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.ai *.eps *.ps</font></code></td><td valign="top" bgcolor="#e4eeff">Adobe Postscript-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/rtc</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.rtc</font></code></td><td valign="top" bgcolor="#e4eeff">RTC-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/rtf</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.rtf</font></code></td><td valign="top" bgcolor="#e4eeff">Microsoft RTF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/studiom</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.smp</font></code></td><td valign="top" bgcolor="#e4eeff">Studiom-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/toolbook</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.tbk</font></code></td><td valign="top" bgcolor="#e4eeff">Toolbook-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/vocaltec-media-desc</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.vmd</font></code></td><td valign="top" bgcolor="#e4eeff">Vocaltec Mediadesc-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/vocaltec-media-file</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.vmf</font></code></td><td valign="top" bgcolor="#e4eeff">Vocaltec Media-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-bcpio</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.bcpio</font></code></td><td valign="top" bgcolor="#e4eeff">BCPIO-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-compress</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.z</font></code></td><td valign="top" bgcolor="#e4eeff">-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-cpio</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.cpio</font></code></td><td valign="top" bgcolor="#e4eeff">CPIO-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-csh</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.csh</font></code></td><td valign="top" bgcolor="#e4eeff">C-Shellscript-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-director</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.dcr *.dir *.dxr</font></code></td><td valign="top" bgcolor="#e4eeff">-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-dvi</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.dvi</font></code></td><td valign="top" bgcolor="#e4eeff">DVI-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-envoy</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.evy</font></code></td><td valign="top" bgcolor="#e4eeff">Envoy-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-gtar</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.gtar</font></code></td><td valign="top" bgcolor="#e4eeff">GNU tar-Archiv-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-hdf</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.hdf</font></code></td><td valign="top" bgcolor="#e4eeff">HDF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-httpd-php</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.php *.phtml</font></code></td><td valign="top" bgcolor="#e4eeff">PHP-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-<i>javascript</i></font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.js</font></code></td><td valign="top" bgcolor="#e4eeff">serverseitige <i>javascript</i>-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-latex</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.latex</font></code></td><td valign="top" bgcolor="#e4eeff">Latex-Quelldateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-macbinary</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.bin</font></code></td><td valign="top" bgcolor="#e4eeff">Macintosh Binärdateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-mif</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.mif</font></code></td><td valign="top" bgcolor="#e4eeff">FrameMaker Interchange Format Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-netcdf</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.nc *.cdf</font></code></td><td valign="top" bgcolor="#e4eeff">Unidata CDF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-nschat</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.nsc</font></code></td><td valign="top" bgcolor="#e4eeff">NS Chat-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-sh</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.sh</font></code></td><td valign="top" bgcolor="#e4eeff">Bourne Shellscript-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-shar</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.shar</font></code></td><td valign="top" bgcolor="#e4eeff">Shell-Archiv-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-shockwave-flash</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.swf *.cab</font></code></td><td valign="top" bgcolor="#e4eeff">Flash Shockwave-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-sprite</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.spr *.sprite</font></code></td><td valign="top" bgcolor="#e4eeff">Sprite-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-stuffit</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.sit</font></code></td><td valign="top" bgcolor="#e4eeff">Stuffit-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-supercard</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.sca</font></code></td><td valign="top" bgcolor="#e4eeff">Supercard-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-sv4cpio</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.sv4cpio</font></code></td><td valign="top" bgcolor="#e4eeff">CPIO-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-sv4crc</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.sv4crc</font></code></td><td valign="top" bgcolor="#e4eeff">CPIO-Dateien mit CRC</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-tar</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.tar</font></code></td><td valign="top" bgcolor="#e4eeff">tar-Archivdateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-tcl</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.tcl</font></code></td><td valign="top" bgcolor="#e4eeff">TCL Scriptdateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-tex</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.tex</font></code></td><td valign="top" bgcolor="#e4eeff">TEX-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-texinfo</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.texinfo *.texi</font></code></td><td valign="top" bgcolor="#e4eeff">TEXinfo-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-troff</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.t *.tr *.roff</font></code></td><td valign="top" bgcolor="#e4eeff">TROFF-Dateien (Unix)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-troff-man</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.man *.troff</font></code></td><td valign="top" bgcolor="#e4eeff">TROFF-Dateien mit MAN-Makros (Unix)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-troff-me</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.me *.troff</font></code></td><td valign="top" bgcolor="#e4eeff">TROFF-Dateien mit ME-Makros (Unix)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-troff-ms</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.me *.troff</font></code></td><td valign="top" bgcolor="#e4eeff">TROFF-Dateien mit MS-Makros (Unix)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-ustar</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.ustar</font></code></td><td valign="top" bgcolor="#e4eeff">tar-Archivdateien (Posix)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-wais-source</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.src</font></code></td><td valign="top" bgcolor="#e4eeff">WAIS Quelldateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/x-www-form-urlencoded</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">HTML-Formulardaten an CGI</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/zip</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.zip</font></code></td><td valign="top" bgcolor="#e4eeff">ZIP-Archivdateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/basic</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.au *.snd</font></code></td><td valign="top" bgcolor="#e4eeff">Sound-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/echospeech</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.es</font></code></td><td valign="top" bgcolor="#e4eeff">Echospeed-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/tsplayer</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.tsi</font></code></td><td valign="top" bgcolor="#e4eeff">TS-Player-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/voxware</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.vox</font></code></td><td valign="top" bgcolor="#e4eeff">Vox-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/x-aiff</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.aif *.aiff *.aifc</font></code></td><td valign="top" bgcolor="#e4eeff">AIFF-Sound-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/x-dspeeh</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.dus *.cht</font></code></td><td valign="top" bgcolor="#e4eeff">Sprachdateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/x-midi</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.mid *.midi</font></code></td><td valign="top" bgcolor="#e4eeff">MIDI-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/x-mpeg</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.mp2</font></code></td><td valign="top" bgcolor="#e4eeff">MPEG-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/x-pn-realaudio</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.ram *.ra</font></code></td><td valign="top" bgcolor="#e4eeff">RealAudio-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/x-pn-realaudio-plugin</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.rpm</font></code></td><td valign="top" bgcolor="#e4eeff">RealAudio-Plugin-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/x-qt-stream</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.stream</font></code></td><td valign="top" bgcolor="#e4eeff">-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">audio/x-wav</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.wav</font></code></td><td valign="top" bgcolor="#e4eeff">Wav-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">drawing/x-dwf</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.dwf</font></code></td><td valign="top" bgcolor="#e4eeff">Drawing-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/cis-cod</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.cod</font></code></td><td valign="top" bgcolor="#e4eeff">CIS-Cod-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/cmu-raster</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.ras</font></code></td><td valign="top" bgcolor="#e4eeff">CMU-Raster-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/fif</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.fif</font></code></td><td valign="top" bgcolor="#e4eeff">FIF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/gif</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.gif</font></code></td><td valign="top" bgcolor="#e4eeff">GIF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/ief</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.ief</font></code></td><td valign="top" bgcolor="#e4eeff">IEF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/jpeg</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.jpeg *.jpg *.jpe</font></code></td><td valign="top" bgcolor="#e4eeff">JPEG-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/tiff</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.tiff *.tif</font></code></td><td valign="top" bgcolor="#e4eeff">TIFF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/vasa</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.mcf</font></code></td><td valign="top" bgcolor="#e4eeff">Vasa-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/vnd.wap.wbmp</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.wbmp</font></code></td><td valign="top" bgcolor="#e4eeff">Bitmap-Dateien (WAP)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-freehand</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.fh4 *.fh5 *.fhc</font></code></td><td valign="top" bgcolor="#e4eeff">Freehand-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-portable-anymap</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.pnm</font></code></td><td valign="top" bgcolor="#e4eeff">PBM Anymap Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-portable-bitmap</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.pbm</font></code></td><td valign="top" bgcolor="#e4eeff">PBM Bitmap Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-portable-graymap</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.pgm</font></code></td><td valign="top" bgcolor="#e4eeff">PBM Graymap Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-portable-pixmap</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.ppm</font></code></td><td valign="top" bgcolor="#e4eeff">PBM Pixmap Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-rgb</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.rgb</font></code></td><td valign="top" bgcolor="#e4eeff">RGB-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-windowdump</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.xwd</font></code></td><td valign="top" bgcolor="#e4eeff">X-Windows Dump</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-xbitmap</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.xbm</font></code></td><td valign="top" bgcolor="#e4eeff">XBM-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">image/x-xpixmap</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.xpm</font></code></td><td valign="top" bgcolor="#e4eeff">XPM-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">message/external-body</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">Nachricht mit externem Inhalt</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">message/http</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">HTTP-Headernachricht</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">message/news</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">Newsgroup-Nachricht</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">message/partial</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">Nachricht mit Teilinhalt</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">message/rfc822</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">Nachricht nach RFC 1822</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">model/vrml</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.wrl</font></code></td><td valign="top" bgcolor="#e4eeff">Visualisierung virtueller Welten</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/alternative</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten gemischt</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/byteranges</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten mit Byte-Angaben</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/digest</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten / Auswahl</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/encrypted</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten verschlｕsselt</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/form-data</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten aus HTML-Formular (z.B. File-Upload)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/mixed</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten gemischt</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/parallel</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten parallel</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/related</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten / verbunden</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/report</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten / Bericht</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/signed</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten / bezeichnet</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">multipart/voice-message</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">mehrteilige Daten / Sprachnachricht</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/comma-separated-values</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.csv</font></code></td><td valign="top" bgcolor="#e4eeff">komma-separierte Datendateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/css</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.css</font></code></td><td valign="top" bgcolor="#e4eeff">CSS Stylesheet-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/html</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.htm *.html *.shtml</font></code></td><td valign="top" bgcolor="#e4eeff">-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/<i>javascript</i></font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.js</font></code></td><td valign="top" bgcolor="#e4eeff"><i>javascript</i>-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/plain</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.txt</font></code></td><td valign="top" bgcolor="#e4eeff">reine Textdateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/richtext</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.rtx</font></code></td><td valign="top" bgcolor="#e4eeff">Richtext-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/rtf</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.rtf</font></code></td><td valign="top" bgcolor="#e4eeff">Microsoft RTF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/tab-separated-values</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.tsv</font></code></td><td valign="top" bgcolor="#e4eeff">tabulator-separierte Datendateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/vnd.wap.wml</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.wml</font></code></td><td valign="top" bgcolor="#e4eeff">WML-Dateien (WAP)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/vnd.wap.wmlc</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.wmlc</font></code></td><td valign="top" bgcolor="#e4eeff">WMLC-Dateien (WAP)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/vnd.wap.wmlscript</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.wmls</font></code></td><td valign="top" bgcolor="#e4eeff">WML-Scriptdateien (WAP)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">application/vnd.wap.wmlscriptc</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.wmlsc</font></code></td><td valign="top" bgcolor="#e4eeff">WML-Script-C-dateien (WAP)</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/xml-external-parsed-entity</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体"> </font></code></td><td valign="top" bgcolor="#e4eeff">extern geparste XML-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/x-setext</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.etx</font></code></td><td valign="top" bgcolor="#e4eeff">SeText-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/x-sgml</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.sgm *.sgml</font></code></td><td valign="top" bgcolor="#e4eeff">SGML-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">text/x-speech</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.talk *.spc</font></code></td><td valign="top" bgcolor="#e4eeff">Speech-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">video/mpeg</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.mpeg *.mpg *.mpe</font></code></td><td valign="top" bgcolor="#e4eeff">MPEG-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">video/quicktime</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.qt *.mov</font></code></td><td valign="top" bgcolor="#e4eeff">Quicktime-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">video/vnd.vivo</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*viv *.vivo</font></code></td><td valign="top" bgcolor="#e4eeff">Vivo-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">video/x-msvideo</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.avi</font></code></td><td valign="top" bgcolor="#e4eeff">Microsoft AVI-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">video/x-sgi-movie</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.movie</font></code></td><td valign="top" bgcolor="#e4eeff">Movie-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">workbook/formulaone</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.vts *.vtts</font></code></td><td valign="top" bgcolor="#e4eeff">FormulaOne-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">x-world/x-3dmf</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.3dmf *.3dm *.qd3d *.qd3</font></code></td><td valign="top" bgcolor="#e4eeff">3DMF-Dateien</td></tr><tr><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">x-world/x-vrml</font></code></td><td valign="top" nowrap="" bgcolor="#ffffe0"><code><font face="新宋体">*.wrl</font></code></td><td valign="top" bgcolor="#e4eeff">VRML-Dateien</td></tr></tbody></table></td></tr></tbody></table><br /><img src ="http://www.blogjava.net/yaozhuan/aggbug/41695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-04-18 17:38 <a href="http://www.blogjava.net/yaozhuan/articles/41695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> [转载]一个邮件发送的API（可以带附件和群发）</title><link>http://www.blogjava.net/yaozhuan/articles/39758.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Fri, 07 Apr 2006 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/39758.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/39758.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/39758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/39758.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/39758.html</trackback:ping><description><![CDATA[
		<br />
		<font size="2">
				<span style="COLOR: #3f7f5f">/*<br />* MailKit.java<br />*<br />* Created on 2004年8月21日, 下午2:11<br />*/</span>
				<br />
				<span style="FONT-WEIGHT: bold; COLOR: #7f0055">package</span> javatip;<br />import java.util.*;<br />import java.io.*;<br />import javax.mail.*;<br />import javax.mail.internet.*;<br />import javax.activation.*;<br />import javatip.SMTPAuthenticator;<br />import javax.activation.FileDataSource;<br /></font>
		<font size="2">
				<span style="COLOR: #3f7f5f">/**<br />*/</span>
				<br />
				<span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>class MailKit {<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">private </span>String host;<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">private </span>String userMail;<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">private </span>String pwd;<br /></font>
		<font size="2">
				<span style="COLOR: #3f7f5f">/** Creates a <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>instance of MailKit<br />*@param mailHost： 邮件服务器，如 smtp.163.com<br />*@param userAccount: 用户， 如 admin<br />*@param password： 登陆密码，如 123456<br />*/</span> <span style="FONT-WEIGHT: bold; COLOR: #7f0055">private </span>MailKit(String mailHost,String userMail, String password) <br />{<br />init(mailHost,userMail,password);<br />}<br /></font>
		<font size="2">
				<span style="COLOR: #3f7f5f">/** 初始化邮件服务器<br />*@param mailHost： 邮件服务器，如 smtp.163.com<br />*@param userAccount: 用户， 如 admin<br />*@param pwd： 登陆密码，如 123456<br />*/</span>
				<br />
				<span style="FONT-WEIGHT: bold; COLOR: #7f0055">private </span>void init(String mailHost,String userMail, String password) {<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">if</span>(mailHost == <span style="FONT-WEIGHT: bold; COLOR: #7f0055">null</span> || userMail == <span style="FONT-WEIGHT: bold; COLOR: #7f0055">null</span> || password == <span style="FONT-WEIGHT: bold; COLOR: #7f0055">null</span>) {<br />throw <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>IllegalArgumentException(<span style="COLOR: #2a00ff">"传人的参数不能为空"</span>);<br />}<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">this</span>.host = mailHost;<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">this</span>.userMail = userMail;<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">this</span>.pwd = password;<br />}<br /></font>
		<font size="2">
				<span style="COLOR: #3f7f5f">/** 发送邮件<br />* @param to 邮件接受者，可以有多个接受者 support@163.com<br />* @param subject 邮件主题<br />* @param msgContent 邮件正文<br />* @param attachFile 邮件附件，可以有多个附件；<br />* 传入的参数为文件数组，文件必须为完整路径名 c:\\11.jsp<br />* <span style="FONT-WEIGHT: bold; COLOR: #7f0055">null</span>表示没有附件 <br />* @<span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span>发送成功返回<span style="FONT-WEIGHT: bold; COLOR: #7f0055">true</span>，否则返回<span style="FONT-WEIGHT: bold; COLOR: #7f0055">false</span><br />*/</span>
				<br />
				<span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>boolean sendMail(String[] to, String subject,String msgContent,String[] attachFile) {<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">try</span> {<br />java.util.Properties props = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>java.util.Properties();<br />props.put(<span style="COLOR: #2a00ff">"mail.smtp.host"</span>, host);<br />props.put(<span style="COLOR: #2a00ff">"mail.smtp.auth"</span>,<span style="COLOR: #2a00ff">"<span style="FONT-WEIGHT: bold; COLOR: #7f0055">true</span>"</span>);<br />props.put(<span style="COLOR: #2a00ff">"username"</span>,userMail); <br />props.put(<span style="COLOR: #2a00ff">"password"</span>,pwd); <br />Authenticator auth = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>SMTPAuthenticator(userMail, pwd);<br />Session sendMailSession = Session.getDefaultInstance(props, auth);<br />Message msg = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>MimeMessage(sendMailSession);<br />msg.setFrom(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>InternetAddress(userMail));<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">if</span>(to != <span style="FONT-WEIGHT: bold; COLOR: #7f0055">null</span> &amp;&amp; to.length &gt; 0) {<br />InternetAddress[] address = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>InternetAddress[to.length];<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">for</span>(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">int </span>i=0; i address[i] = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>InternetAddress(to[i]);<br />}<br />msg.setRecipients(Message.RecipientType.TO, address);<br />}<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">else</span> {<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">false</span>;<br />}<br />msg.setSubject(subject);<br /><span style="COLOR: #3f7f5f">// create and fill the first message part</span><br />MimeBodyPart mbp1 = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>MimeBodyPart();<br />mbp1.setText(msgContent);<br /><span style="COLOR: #3f7f5f">// create the Multipart and add its parts to it</span><br />Multipart mp = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>MimeMultipart();<br />mp.addBodyPart(mbp1);<br /><span style="COLOR: #3f7f5f">// create the second message part</span><br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">if</span>(attachFile != <span style="FONT-WEIGHT: bold; COLOR: #7f0055">null</span> &amp;&amp; attachFile.length &gt;0) {<br />MimeBodyPart mbp2;<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">for</span>(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">int </span>i=0; i mbp2 = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>MimeBodyPart();<br /><span style="COLOR: #3f7f5f">// attach the file to the message</span><br />FileDataSource fds = <span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>FileDataSource(attachFile[i]);<br />mbp2.setDataHandler(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>DataHandler(fds));<br />mbp2.setFileName(fds.getName());<br />mp.addBodyPart(mbp2);<br />}<br />}<br /><span style="COLOR: #3f7f5f">// add the Multipart to the message</span><br />msg.setContent(mp);<br /><span style="COLOR: #3f7f5f">// set the Date: header</span><br />msg.setSentDate(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>Date());<br /><span style="COLOR: #3f7f5f">// send the message</span><br />Transport.send(msg);<br />}<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">catch</span>(Exception ex) {<br />ex.printStackTrace();<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">false</span>;<br />}<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">true</span>;<br />}<br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">static </span>void main(String []a)<br />{<br />   <span style="COLOR: #3f7f5f">// 使用API</span><br />      MailKit mkit = createJavaSalonMailKit();<br />      mkit.sendMail(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>String[]{<span style="COLOR: #2a00ff">"support@163.com"</span>},<span style="COLOR: #2a00ff">"u邮件标题"</span>,<span style="COLOR: #2a00ff">"邮件正文"</span>,<span style="FONT-WEIGHT: bold; COLOR: #7f0055">null</span>);<br />      System.out.println(<span style="COLOR: #2a00ff">"sOK"</span>);<br /><br />}<br /><br /><span style="COLOR: #3f7f5f">/** 创建163用户的邮件信息，发件人是 javalalon@163.com */</span><br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">static </span>MailKit create163MailKit()<br />{<br />String mailHost = <span style="COLOR: #2a00ff">"smtp.163.com"</span>;<br />String userAccount = <span style="COLOR: #2a00ff">"username@163.com"</span>;<br />String password = <span style="COLOR: #2a00ff">"password"</span>; <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>MailKit(mailHost,userAccount,password);<br />}<br />}<br /><br /></font>
<img src ="http://www.blogjava.net/yaozhuan/aggbug/39758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-04-07 10:38 <a href="http://www.blogjava.net/yaozhuan/articles/39758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 彻底搞定JSP的在线人数 </title><link>http://www.blogjava.net/yaozhuan/articles/39748.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Fri, 07 Apr 2006 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/39748.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/39748.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/39748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/39748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/39748.html</trackback:ping><description><![CDATA[
		<font color="#3f7f5f">**这是管理user信息的类 <br />文件名为onLineUser.java <br />欢迎访问javajia家(http:<span style="COLOR: #3f7f5f">//www.javajia.com),由yuking制作。2001.1.1 </span></font>
		<br />
		<font color="#3f7f5f">*/</font> <br />import javax.servlet.http.*;  <br />import javax.servlet.*;  <br />import java.util.*;  <br /><br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>class onLineUser implements HttpSessionBindingListener {  <br />    <span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>onLineUser(){ <br />}  <br /><br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">private </span>Vector users=<span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>Vector(); <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">int </span>getCount(){ <br />users.trimToSize(); <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span>users.capacity(); <br />} <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>boolean existUser(String userName){ <br />users.trimToSize(); <br />boolean existUser=<span style="FONT-WEIGHT: bold; COLOR: #7f0055">false</span>; <br />for (<span style="FONT-WEIGHT: bold; COLOR: #7f0055">int </span>i=0;i&lt;users.capacity();i++ ) <br />{ <br />if (userName.equals((String)users.get(i))) <br />{ <br />existUser=<span style="FONT-WEIGHT: bold; COLOR: #7f0055">true</span>; <br />break; <br />} <br />} <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span>existUser; <br />} <br /><br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>boolean deleteUser(String userName) { <br />users.trimToSize(); <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">if</span>(existUser(userName)){ <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">int </span>currUserIndex=-1; <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">for</span>(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">int </span>i=0;i&lt;users.capacity();i++){ <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">if</span>(userName.equals((String)users.get(i))){ <br />currUserIndex=i; <br />break; <br />} <br />} <br />if (currUserIndex!=-1){ <br />users.remove(currUserIndex); <br />users.trimToSize(); <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">true</span>; <br />} <br />} <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span><span style="FONT-WEIGHT: bold; COLOR: #7f0055">false</span>; <br />} <br /><br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>Vector getOnLineUser() <br />{ <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">return </span>users; <br />} <br />    <span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>void valueBound(HttpSessionBindingEvent e) {  <br />users.trimToSize(); <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">if</span>(!existUser(e.getName())){ <br />users.add(e.getName()); <br />System.out.print(e.getName()+<span style="COLOR: #2a00ff">"\t  登入到系统\t"</span>+(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>Date())); <br />System.out.println(<span style="COLOR: #2a00ff">"     在线用户数为："</span>+getCount()); <br />}<span style="FONT-WEIGHT: bold; COLOR: #7f0055">else</span> <br />System.out.println(e.getName()+<span style="COLOR: #2a00ff">"已经存在"</span>); <br />    }  <br /><br />    <span style="FONT-WEIGHT: bold; COLOR: #7f0055">public </span>void valueUnbound(HttpSessionBindingEvent e) {  <br />users.trimToSize(); <br />String userName=e.getName(); <br />deleteUser(userName); <br />System.out.print(userName+<span style="COLOR: #2a00ff">"\t  退出系统\t"</span>+(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">new </span>Date())); <br />System.out.println(<span style="COLOR: #2a00ff">"     在线用户数为："</span>+getCount()); <br />    }  <br />}  <br /> <br /><table cellspacing="1" cellpadding="4" width="98%" align="center" bgcolor="#bad5ef" border="0"><form><tbody><tr><td style="FONT-SIZE: 12px" bgcolor="#e6eef7" height="25">程序代码：</td></tr><tr><td style="FONT-SIZE: 12px" bgcolor="#ffffff">&lt;% <br /><span style="COLOR: #3f7f5f">/**这是显示在线用户的jsp文件 <br /><br />文件名为onLineUser.jsp <br /><br />欢迎访问javajia家(http:<span style="COLOR: #3f7f5f">//www.javajia.com),由yuking制作。2001.1.1 </span><br />*/</span> <br />%&gt; <br />&lt;%@ page contentType=<span style="COLOR: #2a00ff">"text/html;charset=gb2312"</span> %&gt;  <br />&lt;%@ page import=<span style="COLOR: #2a00ff">"onLineUser,java.util.*"</span> %&gt;  <br />&lt;jsp:useBean id=<span style="COLOR: #2a00ff">"onlineuser"</span> class=<span style="COLOR: #2a00ff">"onLineUser"</span> scope=<span style="COLOR: #2a00ff">"application"</span>/&gt; <br />&lt;html&gt;  <br />&lt;head&gt;  <br />&lt;title&gt;搞定JSP在线人数&lt;/title&gt; <br />&lt;/head&gt; <br />&lt;body&gt;  <br />&lt;center&gt;  <br />  &lt;p&gt;&lt;h1&gt;登陆成功，欢迎您访问Java家!&lt;/h1&gt;&lt;/p&gt; <br />&lt;/center&gt; <br />&lt;%  session = request.getSession(<span style="FONT-WEIGHT: bold; COLOR: #7f0055">false</span>); %&gt;  <br />&lt;%  <br />String username=request.getParameter(<span style="COLOR: #2a00ff">"username"</span>); <br />if (onlineuser.existUser(username)){ <br />out.println(<span style="COLOR: #2a00ff">"用户&lt;font color=red&gt;"</span>+username+<span style="COLOR: #2a00ff">"&lt;/font&gt;已经登陆！"</span>); <br />}<span style="FONT-WEIGHT: bold; COLOR: #7f0055">else</span>{ <br />session.setMaxInactiveInterval(50); <span style="COLOR: #3f7f5f">//Sesion有效时长，以秒为单位 </span><br />session.setAttribute(username,onlineuser);  <br />out.println(<span style="COLOR: #2a00ff">"欢迎新用户:&lt;font color=red&gt;"</span>+username+<span style="COLOR: #2a00ff">"&lt;/font&gt;登陆到系统！"</span>); <br />} <br />out.println(<span style="COLOR: #2a00ff">"&lt;br&gt;当前在线用户人数:&lt;font color=red&gt;"</span>+onlineuser.getCount()+<span style="COLOR: #2a00ff">"&lt;/font&gt;&lt;br&gt;"</span>); <br />Vector vt=onlineuser.getOnLineUser(); <br />Enumeration e = vt.elements(); <br />out.println(<span style="COLOR: #2a00ff">"在线用户列表"</span>); <br />out.println(<span style="COLOR: #2a00ff">"&lt;table border=1&gt;"</span>); <br />out.println(<span style="COLOR: #2a00ff">"&lt;tr&gt;&lt;td&gt;用户名&lt;/td&gt;&lt;/tr&gt;"</span>); <br />    <span style="FONT-WEIGHT: bold; COLOR: #7f0055">while</span>(e.hasMoreElements()){ <br />out.println(<span style="COLOR: #2a00ff">"&lt;tr&gt;&lt;td&gt;"</span>); <br />out.println((String)e.nextElement()+<span style="COLOR: #2a00ff">"&lt;br&gt;"</span>); <br />out.println(<span style="COLOR: #2a00ff">"&lt;/td&gt;&lt;/tr&gt;"</span>); <br />} <br />out.println(<span style="COLOR: #2a00ff">"&lt;/table&gt;"</span>); <br />     <br />%&gt;  <br />&lt;center&gt;  <br />  &lt;p&gt;yuking制作&lt;/p&gt; <br />  &lt;p&gt; &lt;/p&gt; <br />&lt;% <br />out.println(<span style="COLOR: #2a00ff">"&lt;p&gt;&lt;a href=logout.jsp?username="</span>+username+<span style="COLOR: #2a00ff">"&gt;退出系统&lt;/a&gt;&lt;/p&gt;"</span>); <br />%&gt; <br />&lt;/center&gt;  <br />&lt;/body&gt;  <br />&lt;/html&gt;  <br /></td></tr></tbody></form></table><br /><table cellspacing="1" cellpadding="4" width="98%" align="center" bgcolor="#bad5ef" border="0"><form><tbody><tr><td style="FONT-SIZE: 12px" bgcolor="#e6eef7" height="25">程序代码：</td></tr><tr><td style="FONT-SIZE: 12px" bgcolor="#ffffff">&lt;% <br /><span style="COLOR: #3f7f5f">/**这是用户退出的jsp文件 <br /><br />文件名为logout.jsp <br /><br />欢迎访问javajia家(http:<span style="COLOR: #3f7f5f">//www.javajia.com),由yuking制作。2001.1.1 </span><br />*/</span> <br />%&gt; <br />&lt;%@ page contentType=<span style="COLOR: #2a00ff">"text/html;charset=gb2312"</span> %&gt;  <br />&lt;%@ page import=<span style="COLOR: #2a00ff">"onLineUser,java.util.*"</span> %&gt;  <br />&lt;jsp:useBean id=<span style="COLOR: #2a00ff">"onlineuser"</span> class=<span style="COLOR: #2a00ff">"onLineUser"</span> scope=<span style="COLOR: #2a00ff">"application"</span>/&gt; <br />&lt;html&gt;  <br />&lt;head&gt;  <br />&lt;title&gt;搞定JSP在线人数&lt;/title&gt; <br />&lt;/head&gt; <br />&lt;body&gt;  <br />&lt;center&gt;  <br />  &lt;p&gt;&lt;h1&gt;登陆成功，欢迎您访问Java家!&lt;/h1&gt;&lt;/p&gt; <br />&lt;/center&gt; <br />&lt;%  <br />String username=request.getParameter(<span style="COLOR: #2a00ff">"username"</span>); <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">if</span>(onlineuser.deleteUser(username)) <br />out.println(username+<span style="COLOR: #2a00ff">"已经退出系统!"</span>); <br /><span style="FONT-WEIGHT: bold; COLOR: #7f0055">else</span> <br />out.println(username+<span style="COLOR: #2a00ff">"没有登陆到系统！"</span>); <br />%&gt;  <br />&lt;center&gt;  <br />  &lt;p&gt;yuking制作&lt;/p&gt; <br />  &lt;p&gt; &lt;/p&gt; <br />  &lt;p&gt;&lt;a href=<span style="COLOR: #2a00ff">"logout.jsp"</span>&gt;退出系统&lt;/a&gt;&lt;/p&gt; <br />&lt;/center&gt;  <br />&lt;/body&gt;  <br />&lt;/html&gt;  </td></tr></tbody></form></table><img src ="http://www.blogjava.net/yaozhuan/aggbug/39748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-04-07 10:31 <a href="http://www.blogjava.net/yaozhuan/articles/39748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP内建对象 </title><link>http://www.blogjava.net/yaozhuan/articles/36229.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Mon, 20 Mar 2006 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/36229.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/36229.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/36229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/36229.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/36229.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New">
						<font size="2">
								<strong>① out - javax.servlet.jsp.jspWriter</strong>
								<br />   out对象用于把结果输出到网页上。</font>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">方法：<br />1. void clear() ;<br />   清除输出缓冲区的内容，但是不输出到客户端。</font>
		</p>
		<p>
				<font face="Courier New" size="2">2. void clearBuffer() ;<br />   清除输出缓冲区的内容，并输出到客户端。</font>
		</p>
		<p>
				<font face="Courier New" size="2">3. void close() ;<br />   关闭输出流，清除所有内容。</font>
		</p>
		<p>
				<font face="Courier New" size="2">4. void flush() ;<br />   输出缓冲区里面的数据。</font>
		</p>
		<p>
				<font face="Courier New" size="2">5. int getBufferSize() ;<br />   获取以kb为单位的目前缓冲区大小。</font>
		</p>
		<p>
				<font face="Courier New" size="2">6. int getRemaining() ;<br />   获取以kb为单位的缓冲区中未被占用的空间大小。</font>
		</p>
		<p>
				<font face="Courier New" size="2">7. boolean isAutoFlush() ;<br />   是否自动刷新缓冲区。</font>
		</p>
		<p>
				<font face="Courier New" size="2">8. void newLine() ;<br />   输出一个换行字符。</font>
		</p>
		<p>
				<font face="Courier New" size="2">9. void print( boolean b ) ;<br />   void print( char c ) ;<br />   void print( char[] s ) ;<br />   void print( double d ) ;<br />   void print( float f ) ;<br />   void print( int i ) ;<br />   void print( long l ) ;<br />   void print( Object obj ) ;<br />   void print( String s ) ;<br />   将指定类型的数据输出到Http流，不换行。</font>
		</p>
		<p>
				<font face="Courier New" size="2">10. void println( boolean b ) ;<br />    void println( char c ) ;<br />    void println( char[] s ) ;<br />    void println( double d ) ;<br />    void println( float f ) ;<br />    void println( int i ) ;<br />    void println( long l ) ;<br />    void println( Object obj ) ;<br />    void println( String s ) ;<br />    将指定类型的数据输出到Http流，并输出一个换行符。<br />    <br />11. Appendable append( char c ) ;<br />    Appendable append( CharSequence cxq, int start, int end ) ;<br />    Appendable append( CharSequence cxq ) ;<br />    将一个字符或者实现了CharSequence接口的对象添加到输出流的后面。</font>
		</p>
		<p>
				<font face="Courier New" size="2">成员：<br />int DEFAULT_BUFFER = 0    - 缺省缓冲区大小<br />int NO_BUFFER = -1        - writer是否处于缓冲输出状态<br />int UNBOUNDED_BUFFER = -2 - 是否限制缓冲区大小</font>
		</p>
		<p>
				<br />
				<font face="Courier New">
						<font size="2">
								<strong>② request - javax.servlet.http.HttpServletRequest<br /></strong>   request对象包含所有请求的信息，如请求的来源、标头、cookies和请求相关的参数值等。</font>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">方法：<br />1. Object getAttribute( String name ) ;<br />   返回由name指定的属性值，该属性不存在时返回null。</font>
		</p>
		<p>
				<font face="Courier New" size="2">2. Enumeration getAttributeNames() ;<br />   返回request对象的所有属性名称的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">3. String getAuthType() ;<br />   返回用来保护servlet的认证方法的名称，未受保护时返回null。</font>
		</p>
		<p>
				<font face="Courier New" size="2">4. String getCharacterEncoding() ;<br />   返回请求中的字符编码方法，可以在response对象中设置。</font>
		</p>
		<p>
				<font face="Courier New" size="2">5. int getContentLength() ;<br />   返回请求的BODY的长度，不能确定长度时返回-1。可以在response中设置。</font>
		</p>
		<p>
				<font face="Courier New" size="2">6. String getContentType() ;<br />   返回在response中定义的内容类型。</font>
		</p>
		<p>
				<font face="Courier New" size="2">7. String getContentPath() ;<br />   返回请求的路径。</font>
		</p>
		<p>
				<font face="Courier New" size="2">8. Cookie[] getCookies() ;<br />   返回客户端所有的Cookie的数组。</font>
		</p>
		<p>
				<font face="Courier New" size="2">9. Enumeration getHeaderNames() ;<br />   返回所有HTTP头的名称的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">10. Enumeration getHeaders( String name ) ;<br />    返回指定HTTP头的所有值的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">11. String getHeader( String name ) ;<br />    返回指定名称的HTTP头的信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">12. long getDateHeader( String name ) ;<br />    返回指定名称的Data类型的HTTP头的信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">13. int getIntHeader( String name ) ;<br />    返回指定名称的Int类型的HTTP头的信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">14. ServletInputStream getInputStream() ;<br />    返回请求的输入流。</font>
		</p>
		<p>
				<font face="Courier New" size="2">15. Locale getLocale() ;<br />    返回当前页的Locale对象，可以在response中设定。</font>
		</p>
		<p>
				<font face="Courier New" size="2">16. Enumeration getLocales() ;<br />    返回请求中所有的Locale对象的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">17. String getLocalName() ;<br />    获取响应请求的服务器端主机名。</font>
		</p>
		<p>
				<font face="Courier New" size="2">18. String getLocalAddr() ;<br />    获取响应请求的服务器端地址。</font>
		</p>
		<p>
				<font face="Courier New" size="2">19. int getLocalPort() ;<br />    获取响应请求的服务器端端口</font>
		</p>
		<p>
				<font face="Courier New" size="2">20. String getMethod() ;<br />    获取客户端向服务器端发送请求的方法(GET、POST)。</font>
		</p>
		<p>
				<font face="Courier New" size="2">21. String getParameter( String name ) ;<br />    获取客户端发送给服务器端的参数值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">22. Map getParameterMap() ;<br />    该方法返回包含请求中所有参数的一个Map对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">23. Enumeration getParameterNames() ;<br />    返回请求中所有参数的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">24. String[] getParameterValues( String name ) ;<br />    获得请求中指定参数的所有值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">25. String getQueryString() ;<br />    返回get方法传递的参数字符串，该方法不分解出单独的参数。</font>
		</p>
		<p>
				<font face="Courier New" size="2">26. String getPathInfo() ;<br />    取出请求中处于ServletPath和QueryString之间的额外信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">27. String getPathTranslated() ;<br />    返回用getPathInfo()方法取得的路径信息的实际路径。</font>
		</p>
		<p>
				<font face="Courier New" size="2">28. String getProtocol() ;<br />    返回请求使用的协议。可以是HTTP1.1或者HTTP1.0。</font>
		</p>
		<p>
				<font face="Courier New" size="2">29. BufferedReader getReader() ;<br />    返回请求的输入流对应的Reader对象，该方法和getInputStream()方法在一个页面中只能调用一个。</font>
		</p>
		<p>
				<font face="Courier New" size="2">30. String getRemoteAddr() ;<br />    获取发出请求的客户端IP地址。</font>
		</p>
		<p>
				<font face="Courier New" size="2">31. String getRemoteHost() ;<br />    获取发出请求的客户端主机名</font>
		</p>
		<p>
				<font face="Courier New" size="2">32. String getRemoteUser() ;<br />    返回经过客户端验证的用户名，未经验证返回null。</font>
		</p>
		<p>
				<font face="Courier New" size="2">33. int getRemotePort() ;<br />    返回发出请求的客户端主机端口。</font>
		</p>
		<p>
				<font face="Courier New" size="2">34. String getRealPath( String path ) ;<br />    返回给定虚拟路径的物理路径。</font>
		</p>
		<p>
				<font face="Courier New" size="2">35. RequestDispatcher getRequestDispatcher( String path ) ;<br />    按给定的路径生成资源转向处理适配器对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">36. String getRequestedSessionId() ;<br />    返回请求的session的标识。</font>
		</p>
		<p>
				<font face="Courier New" size="2">37. String RequestURI() ;<br />    返回发出请求的客户端地址，但是不包括请求的参数字符串。</font>
		</p>
		<p>
				<font face="Courier New" size="2">38. StringBuffer getRequestURI() ;<br />    返回响应请求的服务器端地址</font>
		</p>
		<p>
				<font face="Courier New" size="2">39. String getScheme() ;<br />    获取协议名称，缺省值为HTTP协议。</font>
		</p>
		<p>
				<font face="Courier New" size="2">40. String getServerName() ;<br />    返回响应请求的服务器名称。</font>
		</p>
		<p>
				<font face="Courier New" size="2">41. String getServletPath() ;<br />    获取客户端所请求的脚本文件的文件路径。</font>
		</p>
		<p>
				<font face="Courier New" size="2">42. int getServerPort() ;<br />    获取响应请求的服务器端主机端口号。</font>
		</p>
		<p>
				<font face="Courier New" size="2">43. void removeAttribute( String name ) ;<br />    在属性列表中删除指定名称的属性。</font>
		</p>
		<p>
				<font face="Courier New" size="2">44. void setAttribute( String name, Object value ) ;<br />    在属性列表中添加/删除指定的属性。</font>
		</p>
		<p>
				<font face="Courier New" size="2">45. void setCharacterEncoding( String name ) ;<br />    设置请求的字符编码格式。</font>
		</p>
		<p>
				<font face="Courier New" size="2">46. HttpSession getSession() ;<br />    HttpSession getSession( boolean create ) ;<br />    获取session，如果create为true，在无session的情况下创建一个。<br />    <br />47. boolean isRequestedSessionIdFromCookie() ;<br />    检查请求的会话ID是否为通过Cookie传入。</font>
		</p>
		<p>
				<font face="Courier New" size="2">48. boolean isRequestedSessionIdFromURL() ;<br />    检查请求的会话ID是否为通过URL传入。</font>
		</p>
		<p>
				<font face="Courier New" size="2">49. boolean isRequestedSessionIdValid() ;<br />    检查请求的会话ID是否仍然有效。</font>
		</p>
		<p>
				<font face="Courier New" size="2">50. boolean isSecure() ;<br />    检查请求是否使用安全链接，如果HTTPS等。</font>
		</p>
		<p>
				<font face="Courier New" size="2">51. boolean isUserInRole( String role ) ;<br />    检查已经通过验证的用户是否在是role所指定的角色。</font>
		</p>
		<p>
				<font face="Courier New" size="2">52. Principal getUserPrincipal() ;<br />    返回包含用户登陆名的一个java.security.Principal对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">成员：<br />String BASIC_AUTH = "BASIC"             - <br />String CLIENT_CERT_AUTH = "CLIENT_CERT" - <br />String DIGEST_AUTH = "DIGEST"           - <br />String FORM_AUTH = "FORM"               - </font>
		</p>
		<p>
				<br />
				<font face="Courier New">
						<font size="2">
								<strong>③ response - javax.servlet.http.HttpServletResponse</strong>
								<br />   response对象主要将JSP容器处理后的结果传回到客户端。</font>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">方法：<br />1. void addCookie( Cookie cookie ) ;<br />   添加一个Cookie对象，保存客户端信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">2. void addDateHeader( String name, long value ) ;<br />   添加一个日期类型的HTTP头信息，覆盖同名的HTTP头信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">3. void addHeader( String name, String value ) ;<br />   添加一个HTTP头，覆盖同名的旧HTTP头。</font>
		</p>
		<p>
				<font face="Courier New" size="2">4. void addIntHeader( String name, int value ) ;<br />   添加一个整型的HTTP头，覆盖同名的旧HTTP头。</font>
		</p>
		<p>
				<font face="Courier New" size="2">5. boolean containsHeader( String name ) ;<br />   判断指定的HTTP头是否存在。</font>
		</p>
		<p>
				<font face="Courier New" size="2">6. String encodeRedirectURL( String url ) ;<br />   对sendRedirect()方法使用的URL进行编码。</font>
		</p>
		<p>
				<font face="Courier New" size="2">7. String encodeURL( String url ) ;<br />   将URL予以编码，回传包含session ID的URL。<br />   <br />8. void flushBuffer() ;<br />   强制把当前缓冲区的内容发送到客户端。</font>
		</p>
		<p>
				<font face="Courier New" size="2">9. int getBufferSize() ;<br />   取得以kb为单位的缓冲区大小。</font>
		</p>
		<p>
				<font face="Courier New" size="2">10. String getCharacterEncoding() ;<br />    获取响应的字符编码格式。</font>
		</p>
		<p>
				<font face="Courier New" size="2">11. String getContentType() ;<br />    获取响应的类型。</font>
		</p>
		<p>
				<font face="Courier New" size="2">12. Locale getLocale() ;<br />    获取响应的Locale对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">13. ServletOutputStream getOutputStream() ;<br />    返回客户端的输出流对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">14. PrintWriter getWriter() ;<br />    获取输出流对应的writer对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">15. boolean isCommitted() ;<br />    判断服务器端是否已经将数据输出到客户端。</font>
		</p>
		<p>
				<font face="Courier New" size="2">16. void reset() ;<br />    清空buffer中的所有内容。</font>
		</p>
		<p>
				<font face="Courier New" size="2">17. void resetBuffer() ;<br />    情况buffer中所有的内容，但是保留HTTP头和状态信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">18. void sendError( int xc, String msg ) ;<br />    void sendError( int xc ) ;<br />    发送错误，包括状态码和错误信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">19. void sendRedirect( String locationg ) ;<br />    把响应发送到另外一个位置进行处理。</font>
		</p>
		<p>
				<font face="Courier New" size="2">20. void setBufferSize( int size ) ;<br />    设置以kb为单位的缓冲区大小。</font>
		</p>
		<p>
				<font face="Courier New" size="2">21. void setCharacterEncoding( String charset ) ;<br />    设置响应使用的字符编码格式。</font>
		</p>
		<p>
				<font face="Courier New" size="2">22. void setContentLength( int length ) ;<br />    设置响应的BODY长度。</font>
		</p>
		<p>
				<font face="Courier New" size="2">23. void setContentType( String type ) ;<br />    设置响应的类型。</font>
		</p>
		<p>
				<font face="Courier New" size="2">24. void setDateHeader( String name, long value ) ;<br />    设置指定名称的Data类型的HTTP头的值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">25. void setHeader( String name, String value ) ;<br />    设置指定名称的HTTP头的值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">26. void setIntHeader( String name, int value ) ;<br />    设置指定名称的int类型的HTTP头的值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">27. void setStatus( int xc ) ;<br />    设置响应状态码，新值会覆盖当前值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">成员(HTTP状态码)：<br />int SC_CONTINUE = 100                      int SC_SWITCHING_PROTOCOLS = 101<br />int SC_OK = 200                            int SC_NON_AUTHORITATIVE_INFORMATION = 203<br />int SC_ACCEPTED = 202                      int SC_CREATED = 201<br />int SC_NO_CONTENT = 204                    int SC_RESET_CONTENT = 205<br />int SC_PARTIAL_CONTENT = 206               int SC_MULTIPLE_CHOICES = 300<br />int SC_MOVED_PERMANENTLY = 301             int SC_MOVED_TEMPORARILY = 302<br />int SC_FOUND = 302                         int SC_SEE_OTHER = 303<br />int SC_NOT_MODIFIED = 304                  int SC_USE_PROXY = 305<br />int SC_TEMPORARY_REDIRECT = 307            int SC_BAD_REQUEST = 400<br />int SC_UNAUTHORIZED = 401                  int SC_PAYMENT_REQUIRED = 402<br />int SC_FORBIDDEN = 403                     int SC_NOT_FOUND = 404<br />int SC_METHOD_NOT_ALLOWED = 405            int SC_NOT_ACCEPTABLE = 406<br />int SC_PROXY_AUTHENTICATION_REQUIRED = 407 int SC_REQUEST_TIMEOUT = 408<br />int SC_CONFLICT = 409                      int SC_GONE = 410<br />int SC_LENGTH_REQUIRED = 411               int SC_PRECONDITION_FAILED = 412<br />int SC_REQUEST_ENTITY_TOO_LARGE = 413      int SC_REQUEST_URI_TOO_LONG = 414<br />int SC_UNSUPPORTED_MEDIA_TYPE = 415        int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416<br />int SC_EXPECTATION_FAILED = 417            int SC_INTERNAL_SERVER_ERROR = 500<br />int SC_NOT_IMPLEMENTED = 501               int SC_BAD_GATEWAY = 502<br />int SC_SERVICE_UNAVAILABLE = 503           int SC_GATEWAY_TIMEOUT = 504<br />int SC_HTTP_VERSION_NOT_SUPPORTED = 505</font>
		</p>
		<p>
				<br />
				<font face="Courier New">
						<font size="2">
								<strong>④ session - javax.servlet.http.HttpSession</strong>
								<br />   session对象表示目前个别用户的会话状态，用来识别每个用户。</font>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">方法：<br />1. Object getAttribute( String name ) ;<br />   获取与指定名字相关联的session属性值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">2. Enumeration getAttributeNames() ;<br />   取得session内所有属性的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">3. long getCreationTime() ;<br />   返回session的创建时间，最小单位千分之一秒。</font>
		</p>
		<p>
				<font face="Courier New" size="2">4. String getId() ;<br />   取得session标识。</font>
		</p>
		<p>
				<font face="Courier New" size="2">5. long getLastAccessedTime() ;<br />   返回与当前session相关的客户端最后一次访问的时间，由1970-01-01算起，单位毫秒。</font>
		</p>
		<p>
				<font face="Courier New" size="2">6. int getMaxInactiveInterval( int interval ) ;<br />   返回总时间，以秒为单位，表示session的有效时间(session不活动时间)。-1为永不过期。</font>
		</p>
		<p>
				<font face="Courier New" size="2">7. ServletContext getServletContext() ;<br />   返回一个该JSP页面对应的ServletContext对象实例。</font>
		</p>
		<p>
				<font face="Courier New" size="2">8. HttpSessionContext getSessionContext() ;<br />   </font>
		</p>
		<p>
				<font face="Courier New" size="2">9. Object getValue( String name ) ;<br />   取得指定名称的session变量值，不推荐使用。</font>
		</p>
		<p>
				<font face="Courier New" size="2">10. String[] getValueNames() ;<br />    取得所有session变量的名称的集合，不推荐使用。</font>
		</p>
		<p>
				<font face="Courier New" size="2">11. void invalidate() ;<br />    销毁这个session对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">12. boolean isNew() ;<br />    判断一个session是否由服务器产生，但是客户端并没有使用。</font>
		</p>
		<p>
				<font face="Courier New" size="2">13. void pubValue( String name, Object value ) ;<br />    添加一个session变量，不推荐使用。</font>
		</p>
		<p>
				<font face="Courier New" size="2">14. void removeValue( String name ) ;<br />    移除一个session变量的值，不推荐使用。</font>
		</p>
		<p>
				<font face="Courier New" size="2">15. void setAttribute( String name, String value ) ;<br />    设置指定名称的session属性值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">16. void setMaxInactiveInterval( int interval ) ;<br />    设置session的有效期。</font>
		</p>
		<p>
				<font face="Courier New" size="2">17. void removeAttribute( String name ) ;<br />    移除指定名称的session属性。</font>
		</p>
		<p>
				<br />
				<font face="Courier New">
						<font size="2">
								<strong>⑤ pageContext - javax.servlet.jsp.PageContext</strong>
								<br />   pageContext对象存储本JSP页面相关信息，如属性、内建对象等。</font>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">方法：<br />1. void setAttribute( String name, Object value, int scope ) ;<br />   void setAttribute( String name, Object value ) ;<br />   在指定的共享范围内设置属性。</font>
		</p>
		<p>
				<font face="Courier New" size="2">2. Object getAttribute( String name, int scope ) ;<br />   Object getAttribute( String name ) ;<br />   取得指定共享范围内以name为名字的属性值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">3. Object findAttribute( String name ) ;<br />   按页面、请求、会话和应用程序共享范围搜索已命名的属性。</font>
		</p>
		<p>
				<font face="Courier New" size="2">4. void removeAttribute( String name, int scope ) ;<br />   void removeAttribute( String name ) ;<br />   移除指定名称和共享范围的属性。</font>
		</p>
		<p>
				<font face="Courier New" size="2">5. void forward( String url ) ;<br />   将页面导航到指定的URL。</font>
		</p>
		<p>
				<font face="Courier New" size="2">6. Enumeration getAttributeNamesScope( int scope ) ;<br />   取得指定共享范围内的所有属性名称的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">7. int getAttributeScope( String name ) ;<br />   取得指定属性的共享范围。</font>
		</p>
		<p>
				<font face="Courier New" size="2">8. ErrorData getErrorDate() ;<br />   取得页面的errorData对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">9. Exception getException() ;<br />   取得页面的exception对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">10. ExpressionEvaluator getExpressionEvaluator() ;<br />    取得页面的expressionEvaluator对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">11. JspWriter getOut() ;<br />    取得页面的out对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">12. Object getPage() ;<br />    取得页面的page对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">13. ServletRequest getRequest() ;<br />    取得页面的request对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">14. ServletResponse getResponse() ;<br />    取得页面的response对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">15. ServletConfig getConfig() ;<br />    取得页面的config对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">16. ServletContext getServletContext() ;<br />    取得页面的servletContext对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">17. HttpSession getSession() ;<br />    取得页面的session对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">18. VariableResolver getVariableResolver() ;<br />    取得页面的variableResolver对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">19. void include( String url, boolean flush ) ;<br />    void include( String url ) ;<br />    包含其他的资源，并指定是否自动刷新。</font>
		</p>
		<p>
				<font face="Courier New" size="2">20. void release() ;<br />    重置pageContext内部状态，释放所有内部引用。</font>
		</p>
		<p>
				<font face="Courier New" size="2">21. void initialize( Servlet servlet, ServletRequest request, ServletResponse response,<br />                     String errorPageURL, boolean needSession, int bufferSize, boolean autoFlush ) ;<br />    初始化未经初始化的pageContext对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">22. BodyContext pushBody() ;<br />    BodyContext pushBody( Writer writer ) ;<br />    保存当前的out对象，并更新pageContext中page范围内的out对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">23. JspWrite popBody() ;<br />    取出由pushBody()方法保存的out对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">24. void handlePageException( Exception e ) ;<br />    void handlePageException( Thrwoable t ) ;<br />    </font>
		</p>
		<p>
				<font face="Courier New" size="2">成员：<br />int PAGE_SCOPE = 1        - 页面共享范围<br />int REQUEST_SCOPE = 2     - 请求共享范围<br />int SESSION_SCOPE = 3     - 会话共享范围<br />int APPLICATION_SCOPE = 4 - 应用程序共享范围<br />String PAGE = "javax.servlet.jsp.jspPage"<br />String PAGECONTEXT = "javax.servlet.jsp.jspPageContext"<br />String REQUEST = "javax.servlet.jsp.jspRequest"<br />String RESPONSE = "javax.servlet.jsp.jspResponse"<br />String CONFIG = "javax.servlet.jsp.jspConfig"<br />String SESSION = "javax.servlet.jsp.jspSession"<br />String OUT = "javax.servlet.jsp.jspOut"<br />String APPLICATION = "javax.servlet.jsp.jspApplication"<br />String EXCEPTION = "javax.servlet.jsp.jspException"</font>
		</p>
		<p>
				<br />
				<font face="Courier New">
						<font size="2">
								<strong>⑥ application - javax.servlet.ServletContext</strong>
								<br />   application主要功用在于取得或更改Servlet的设定。</font>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">方法：<br />1. Object getAttribute( String name ) ;<br />   返回由name指定的application属性。</font>
		</p>
		<p>
				<font face="Courier New" size="2">2. Enumeration getAttributes() ;<br />   返回所有的application属性。</font>
		</p>
		<p>
				<font face="Courier New" size="2">3. ServletContext getContext( String uripath ) ;<br />   取得当前应用的ServletContext对象。</font>
		</p>
		<p>
				<font face="Courier New" size="2">4. String getInitParameter( String name ) ;<br />   返回由name指定的application属性的初始值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">5. Enumeration getInitParameters() ;<br />   返回所有的application属性的初始值的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">6. int getMajorVersion() ;<br />   返回servlet容器支持的Servlet API的版本号。</font>
		</p>
		<p>
				<font face="Courier New" size="2">7. String getMimeType( String file ) ;<br />   返回指定文件的类型，未知类型返回null。一般为"text/html"和"image/gif"。</font>
		</p>
		<p>
				<font face="Courier New" size="2">8. int getMinorVersion() ;<br />   返回servlet容器支持的Servlet API的副版本号。</font>
		</p>
		<p>
				<font face="Courier New" size="2">9. String getRealPath( String path ) ;<br />   返回给定虚拟路径所对应物理路径。</font>
		</p>
		<p>
				<font face="Courier New" size="2">10. RequestDispatcher getNamedDispatcher( String name ) ;<br />    为指定名字的Servlet对象返回一个RequestDispatcher对象的实例。</font>
		</p>
		<p>
				<font face="Courier New" size="2">11. RequestDispatcher getRequestDispatcher( String path ) ;<br />    返回一个RequestDispatcher对象的实例。</font>
		</p>
		<p>
				<font face="Courier New" size="2">12. URL getResource( String path ) ;<br />    返回指定的资源路径对应的一个URL对象实例，参数要以"/"开头。</font>
		</p>
		<p>
				<font face="Courier New" size="2">13. InputStream getResourceAsStream( String path ) ;<br />    返回一个由path指定位置的资源的InputStream对象实例。</font>
		</p>
		<p>
				<font face="Courier New" size="2">14. Set getResourcePaths( String path ) ;<br />    返回存储在web-app中所有资源路径的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">15. String getServerInfo() ;<br />    取得应用服务器版本信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">16. Servlet getServlet( String name ) ;<br />    在ServletContext中检索指定名称的servlet。</font>
		</p>
		<p>
				<font face="Courier New" size="2">17. Enumeration getServlets() ;<br />    返回ServletContext中所有servlet的集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">18. String getServletContextName() ;<br />    返回本web应用的名称。</font>
		</p>
		<p>
				<font face="Courier New" size="2">19. Enumeration getServletContextNames() ;<br />    返回ServletContext中所有servlet的名称集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">20. void log( Exception ex, String msg ) ;<br />    void log( String msg, Throwable t ) ;<br />    void log( String msg ) ;<br />    把指定的信息写入servlet log文件。</font>
		</p>
		<p>
				<font face="Courier New" size="2">21. void removeAttribute( String name ) ;<br />    移除指定名称的application属性。</font>
		</p>
		<p>
				<font face="Courier New" size="2">22. void setAttribute( String name, Object value ) ;<br />    设定指定的application属性的值。</font>
		</p>
		<p>
				<br />
				<font face="Courier New">
						<font size="2">
								<strong>⑦ config - javax.servlet.ServletConfig<br /></strong>   config对象用来存放Servlet初始的数据结构。</font>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">方法：<br />1. String getInitParameter( String name ) ;<br />   返回名称为name的促使参数的值。</font>
		</p>
		<p>
				<font face="Courier New" size="2">2. Enumeration getInitParameters() ;<br />   返回这个JSP所有的促使参数的名称集合。</font>
		</p>
		<p>
				<font face="Courier New" size="2">3. ServletContext getContext() ;<br />   返回执行者的servlet上下文。</font>
		</p>
		<p>
				<font face="Courier New" size="2">4. String getServletName() ;<br />   返回servlet的名称。</font>
		</p>
		<p>
				<br />
				<font face="Courier New">
						<font size="2">
								<strong>⑧ exception - java.lang.Throwable</strong>
								<br />   错误对象，只有在JSP页面的page指令中指定isErrorPage="true"后，才可以在本页面使用exception对象。</font>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">方法：<br />1. Throwable fillInStackTrace() ;<br />   将当前stack信息记录到exception对象中。</font>
		</p>
		<p>
				<font face="Courier New" size="2">2. String getLocalizedMessage() ;<br />   取得本地语系的错误提示信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">3. String getMessage()<br />   取得错误提示信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">4. StackTrackElement[] getStackTrace() ;<br />   返回对象中记录的call stack track信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">5. Throwable initCause( Throwable cause ) ;<br />   将另外一个异常对象嵌套进当前异常对象中。<br />   <br />6. Throwable getCause() ;<br />   取出嵌套在当前异常对象中的异常。</font>
		</p>
		<p>
				<font face="Courier New" size="2">7. void printStackTrace() ;<br />   void printStackTrace( printStream s ) ;<br />   void printStackTrace( printWriter s ) ;<br />   打印出Throwable及其call stack trace信息。</font>
		</p>
		<p>
				<font face="Courier New" size="2">8. void setStackTrace( StackTraceElement[] stackTrace )<br />   设置对象的call stack trace信息。</font>
		</p>
		<p>
				<br />
				<font face="Courier New">
						<font size="2">
								<strong>⑨ page - javax.servlet.jsp.HttpJspPage</strong>
								<br />   page对象代表JSP对象本身，或者说代表编译后的servlet对象，<br />   可以用( (javax.servlet.jsp.HttpJspPage)page )来取用它的方法和属性。</font>
				</font>
		</p>
<img src ="http://www.blogjava.net/yaozhuan/aggbug/36229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-03-20 10:37 <a href="http://www.blogjava.net/yaozhuan/articles/36229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>