??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲福利一区二区,亚洲日本国产精华液,亚洲卡一卡2卡三卡4麻豆http://m.tkk7.com/wangbbs2007/articles/309890.html狂淘|?/dc:creator>狂淘|?/author>Sun, 17 Jan 2010 13:25:00 GMThttp://m.tkk7.com/wangbbs2007/articles/309890.htmlhttp://m.tkk7.com/wangbbs2007/comments/309890.htmlhttp://m.tkk7.com/wangbbs2007/articles/309890.html#Feedback0http://m.tkk7.com/wangbbs2007/comments/commentRss/309890.htmlhttp://m.tkk7.com/wangbbs2007/services/trackbacks/309890.html request.getRealPath("url");//虚拟目录映射为实际目?
request.getRealPath("./");//|页所在的目录
request.getRealPath("../");//|页所在目录的上一层目?

request.getContextPath();//应用的web目录的名U?
   如http://localhost:7001/bookStore/ 
    /bookStore/      =>  [contextPath]  (request.getContextPath())

获取Web目的全路径
String strDirPath = request.getSession().getServletContext().getRealPath("/");
www.kuangtao.net  狂涛购物|?img src ="http://m.tkk7.com/wangbbs2007/aggbug/309890.html" width = "1" height = "1" />

]]>
Jsp生成静态页?http://m.tkk7.com/wangbbs2007/articles/299006.html狂淘|?/dc:creator>狂淘|?/author>Tue, 20 Oct 2009 04:25:00 GMThttp://m.tkk7.com/wangbbs2007/articles/299006.htmlhttp://m.tkk7.com/wangbbs2007/comments/299006.htmlhttp://m.tkk7.com/wangbbs2007/articles/299006.html#Feedback0http://m.tkk7.com/wangbbs2007/comments/commentRss/299006.htmlhttp://m.tkk7.com/wangbbs2007/services/trackbacks/299006.htmlZ减轻服务器压力,原来的文章理pȝ由JSP文g的从数据库中取数据显C改为由jsp生成静态html文g后直接访问html文g。首先应创徏一个模板文Ӟ文g名和文g后缀可以随意Q但我一般常用的q是 *.template Q因此,q里׃ template.template Z( 模板文件放?/WEB-INF/templates/ 文g夹下 )Q下面是一个简单的CZ

1.buildhtml.jsp

Jsp代码
<%@ page contentType="text/html; charset=gb2312" import="java.util.*,java.io.*"%>   
<%   
try{   
     //讄字符~码    
     request.setCharacterEncoding( "gb2312" );    
     response.setCharacterEncoding( "gb2312" );    
  
     String title="This is Title";   
     String content="This is Content Area";   
     String editer="LaoMao";   
     String filePath = "";   
     // 获得模板文g的\?nbsp;  
     filePath = request.getRealPath("/")+"test/template.htm";   
     //out.print(filePath+"<br>");   
     String templateContent="";   
     //d模块文g   
   FileInputStream fileinputstream = new FileInputStream(filePath);   
     int lenght = fileinputstream.available();   
     byte bytes[] = new byte[lenght];   
     fileinputstream.read(bytes);   
     fileinputstream.close();   
     templateContent = new String(bytes);   
     //out.print(templateContent);   
     templateContent=templateContent.replaceAll("###title###",title);   
     templateContent=templateContent.replaceAll("###content###",content);   
     templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地?nbsp;  
   //out.print(templateContent);   
     // Ҏ旉得文件名   
   Calendar calendar = Calendar.getInstance();   
     String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";   
     //生成的html文g保存路径   
   fileame = request.getRealPath("/")+fileame;   
     //建立文g输出?nbsp;  
     FileOutputStream fileoutputstream = new FileOutputStream(fileame);   
   byte tag_bytes[] = templateContent.getBytes();   
     fileoutputstream.write(tag_bytes);   
     fileoutputstream.close();   
  
}catch(Exception e){   
     out.print(e.toString());   
}   
  
  
%>  
<%@ page contentType="text/html; charset=gb2312" import="java.util.*,java.io.*"%>
<%
try{
     //讄字符~码
     request.setCharacterEncoding( "gb2312" );
     response.setCharacterEncoding( "gb2312" );

     String title="This is Title";
     String content="This is Content Area";
     String editer="LaoMao";
     String filePath = "";
     // 获得模板文g的\?br />      filePath = request.getRealPath("/")+"test/template.htm";
     //out.print(filePath+"<br>");
     String templateContent="";
     //d模块文g
   FileInputStream fileinputstream = new FileInputStream(filePath);
     int lenght = fileinputstream.available();
     byte bytes[] = new byte[lenght];
     fileinputstream.read(bytes);
     fileinputstream.close();
     templateContent = new String(bytes);
     //out.print(templateContent);
     templateContent=templateContent.replaceAll("###title###",title);
     templateContent=templateContent.replaceAll("###content###",content);
     templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地?br />    //out.print(templateContent);
     // Ҏ旉得文件名
   Calendar calendar = Calendar.getInstance();
     String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
     //生成的html文g保存路径
   fileame = request.getRealPath("/")+fileame;
     //建立文g输出?br />      FileOutputStream fileoutputstream = new FileOutputStream(fileame);
   byte tag_bytes[] = templateContent.getBytes();
     fileoutputstream.write(tag_bytes);
     fileoutputstream.close();

}catch(Exception e){
     out.print(e.toString());
}


%>
2. template.template

Html代码
<html>  
<head>  
<title>###title###</title>  
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
<LINK href="../css.css" rel=stylesheet type=text/css>  
</head>  
  
  
<body>  
<table width="500" border="0" align="center" cellpadding="0" cellspacing="2">  
  <tr>    
    <td align="center">###title###</td>  
  </tr>  
  <tr>    
    <td align="center">authorQ?##author###&nbsp;&nbsp;</td>  
  </tr>  
  <tr>  
    <td>###content###   
 </td>  
    
  </tr>  
  
</table>  
</body>  
</html>  
<html>
<head>
<title>###title###</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="../css.css" rel=stylesheet type=text/css>
</head>


<body>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="2">
  <tr>
    <td align="center">###title###</td>
  </tr>
  <tr>
    <td align="center">authorQ?##author###&nbsp;&nbsp;</td>
  </tr>
  <tr>
    <td>###content###
 </td>
 
  </tr>

</table>
</body>
</html>
 Z应用进行国际化Q可以将面的编码设?UTF-8

1.buildhtml.jsp

<%@ page contentType="text/html; charset=gb2312" import="java.util.*,java.io.*"%>
<%
try{
 String title="This is Title";
 String content="This is Content Area";
 String editer="LaoMao";
 String filePath = "";
 filePath = request.getRealPath("/")+"test/template.htm";
 //out.print(filePath+"<br>");
 String templateContent="";
 FileInputStream fileinputstream = new FileInputStream(filePath);//d模块文g
 int lenght = fileinputstream.available();
 byte bytes[] = new byte[lenght];
 fileinputstream.read(bytes);
 fileinputstream.close();
 templateContent = new String(bytes);
 //out.print(templateContent);
 templateContent=templateContent.replaceAll("###title###",title);
 templateContent=templateContent.replaceAll("###content###",content);
 templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地?br />  //out.print(templateContent);
 // Ҏ旉得文件名
 Calendar calendar = Calendar.getInstance();
 String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
 fileame = request.getRealPath("/")+fileame;//生成的html文g保存路径
 FileOutputStream fileoutputstream = new FileOutputStream(fileame);//建立文g输出?br />  byte tag_bytes[] = templateContent.getBytes();
 fileoutputstream.write(tag_bytes);
 fileoutputstream.close();
}
catch(Exception e){
 out.print(e.toString());
}

%>

2. template.htm

<html>
<head>
<title>###title###</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="../css.css" rel=stylesheet type=text/css>
</head>

<body>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="2">
  <tr>
    <td align="center">###title###</td>
  </tr>
  <tr>
    <td align="center">authorQ?##author###&nbsp;&nbsp;</td>
  </tr>
  <tr>
    <td>###content###
 </td>
 
  </tr>

</table>
</body>
</html>

本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/fbysss/archive/2006/03/07/618041.aspx


本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/hitop0609/archive/2009/09/16/4555758.aspx



]]>
java jsp tomcat6 mysql q接池配|?/title><link>http://m.tkk7.com/wangbbs2007/articles/297504.html</link><dc:creator>狂淘|?/dc:creator><author>狂淘|?/author><pubDate>Fri, 09 Oct 2009 02:13:00 GMT</pubDate><guid>http://m.tkk7.com/wangbbs2007/articles/297504.html</guid><wfw:comment>http://m.tkk7.com/wangbbs2007/comments/297504.html</wfw:comment><comments>http://m.tkk7.com/wangbbs2007/articles/297504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/wangbbs2007/comments/commentRss/297504.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/wangbbs2007/services/trackbacks/297504.html</trackback:ping><description><![CDATA[最q在|上看到?font size="+0">java+<span id="acucckw" class="hilite1">jsp</span>+ tomcat6+ mysql q接池大多数是tomcat5 ?很多都说得不详细<br /> <br /> 1.需要的文g:<font size="+0">mysql-5.0.27-win32.zip(安装文g),<font size="+0">mysql-connector-java-5.0.4-bin.jar(q接驱动E序),<font size="+0">apache-tomcat-6.0.10.exe</font>(安装文g)</font></font> <p>2.配置tomcat下的conf下的<font size="+0">context.xml文g,?lt;context></context>之间dq接池如?</font> </p> <p class="alt"><span><span id="yweusmy" class="tag"><</span><span id="gcoqwwy" class="tag-name">Resource</span><span> </span><span id="akkiwcw" class="attribute">name</span><span>=</span><span id="mqkkooo" class="attribute-value">"jdbc/mysql"</span><span>  </span></span> </p> <p class=""><span>       </span><span id="suieuoo" class="attribute">auth</span><span>=</span><span id="akysywg" class="attribute-value">"Container"</span><span>  </span> </p> <p class="alt"><span> </span><span>     </span><span id="qcmgiqy" class="attribute">type</span><span>=</span><span id="gqmgckk" class="attribute-value">"javax.sql.DataSource"</span><span>  </span> </p> <p class="alt"><span>     </span><span id="ckykcki" class="attribute">driverClassName</span><span>=</span><span id="awgkmus" class="attribute-value">"com.mysql.jdbc.Driver"</span><span>  </span> <br /> <span>     </span><span id="sugkwuc" class="attribute">url</span><span>=</span><span id="meyaesi" class="attribute-value">"jdbc:mysql://localhost/test"</span><span>  </span> </p> <p class="alt"><span>     </span><span id="waueqwe" class="attribute">username</span><span>=</span><span id="mekeyuw" class="attribute-value">"root"</span><span>  </span> </p> <p class=""><span>     </span><span id="ewcmqwe" class="attribute">password</span><span>=</span><span id="iu64ike" class="attribute-value">"root"</span><span>  </span> </p> <p class="alt"><span>     </span><span id="mm444m4" class="attribute">maxActive</span><span>=</span><span id="46u4g44" class="attribute-value">"100"</span><span>  </span> </p> <p class=""><span>     </span><span id="mo2c4ko" class="attribute">maxIdle</span><span>=</span><span id="i4ceo4a" class="attribute-value">"30"</span><span>  </span> </p> <p class="alt"><span>     </span><span id="mk4omem" class="attribute">maxWait</span><span>=</span><span id="4m4sw4w" class="attribute-value">"10000"</span><span> </span><span id="iko44yc" class="tag">/></span><span>  </span> </p> <p class="alt">3.配置你的应用下的web.xml中的<font size="+0"><web-app><font size="+0"></web-app>之间</font></font>加入:  xml 代码<br /> <br /> </p> <p class="alt"><span><span id="saiey6s" class="tag"><</span><span id="yc6ugya" class="tag-name">resource-ref</span><span id="ak2g644" class="tag">></span><span>  </span></span> </p> <p class=""><span>    </span><span id="244awy6" class="tag"><</span><span id="qkqku2y" class="tag-name">description</span><span id="oiom24w" class="tag">></span><span>DB Connection</span><span id="kugscc4" class="tag"></</span><span id="gqsm4cw" class="tag-name">description</span><span id="e44c2y4" class="tag">></span><span>  </span> </p> <p class="alt"><span>    </span><span id="gmgim2q" class="tag"><</span><span id="oic444y" class="tag-name">res-ref-name</span><span id="2k444ew" class="tag">></span><span>jdbc/mysqlx</span><span id="644g6sc" class="tag"></</span><span id="444smm4" class="tag-name">res-ref-name</span><span id="u2g444y" class="tag">></span><span>  </span> </p> <p class=""><span>    </span><span id="qeqcwm4" class="tag"><</span><span id="2q4q4cg" class="tag-name">res-type</span><span id="ckqakic" class="tag">></span><span>javax.sql.DataSource</span><span id="kcysk4i" class="tag"></</span><span id="q2oy6a6" class="tag-name">res-type</span><span id="sci4gyy" class="tag">></span><span>  </span> </p> <p class="alt"><span>    </span><span id="24g44sy" class="tag"><</span><span id="64y4geg" class="tag-name">res-auth</span><span id="26csuqq" class="tag">></span><span>Container</span><span id="o4sw46w" class="tag"></</span><span id="oeg246i" class="tag-name">res-auth</span><span id="2qmqiia" class="tag">></span><span>  </span> </p> <p class=""><span>  </span><span id="qsmy4ui" class="tag"></</span><span id="u24a4w4" class="tag-name">resource-ref</span><span id="qsoa4m4" class="tag">></span><span>  </span></p> <span> <p>4.大功告成,不用在原来的server.xml里面配置?下面可以编写测试程序了,q个|上很多了,主要的就上面,当然要把q接驱动E序都放?span style="color: #ff0000">tomcat6下的lib</span>下面.试代码如下:<br /> </p> <div id="smw2wk2" class="code_title"><br /> java 代码<br /> <br /> <br /> <li id="aikymi4" class="alt"><span><span><!doctype html </span><span id="2keogey" class="keyword">public</span><span> </span><span id="24e4yo6" class="string">"-//w3c//dtd html 4.0 transitional//en"</span><span>    </span></span> <li id="k4g46w4" class=""><span>  </span> <li id="kma24ui" class="alt"><span><span id="4sm2gw2" class="string">"http://www.w3.org/TR/REC-html40/strict.dtd"</span><span>>   </span> <li id="2yusgwk" class=""><span>  </span> <li id="644cqo4" class="alt"><span><%@ page </span><span id="yikao4q" class="keyword">import</span><span>=</span><span id="2agyg4i" class="string">"java.sql.*"</span><span>%>   </span> <li id="2646k4w" class=""><span>  </span> <li id="2w2444q" class="alt"><span><%@ page </span><span id="o2a4mmm" class="keyword">import</span><span>=</span><span id="u44u4oi" class="string">"javax.sql.*"</span><span>%>   </span> <li id="244myyk" class=""><span>  </span> <li id="44yeq2i" class="alt"><span><%@ page </span><span id="e426qqu" class="keyword">import</span><span>=</span><span id="skmiww4" class="string">"javax.naming.*"</span><span>%>   </span> <li id="wum2uss" class=""><span>  </span> <li id="me2wuaa" class="alt"><span><%@ page session=</span><span id="u4cwoeq" class="string">"false"</span><span> %>   </span> <li id="2m44u44" class=""><span>  </span> <li id="scy444k" class="alt"><span><html>   </span> <li id="4wse4iw" class=""><span>  </span> <li id="yog2k4g" class="alt"><span><head>   </span> <li id="wougma6" class=""><span>  </span> <li id="4wosc44" class="alt"><span><meta http-equiv=</span><span id="2g4q446" class="string">"Content-Type"</span><span> content=</span><span id="u444sei" class="string">"text/html; charset=gb2312"</span><span>>   </span> <li id="264y4oo" class=""><span>  </span> <li id="k4cacik" class="alt"><span><title></title>   </span> <li id="yaswca4" class=""><span>  </span> <li id="6ke4sii" class="alt"><span><%    </span> <li id="2qm6446" class=""><span>  </span> <li id="6ywy2c4" class="alt"><span>   out.print(</span><span id="ay2auum" class="string">"我的试开?</span><span>);   </span> <li id="cs4ucia" class=""><span>  </span> <li id="qsuee4o" class="alt"><span>   DataSource ds = </span><span id="4e4uoe4" class="keyword">null</span><span>;   </span> <li id="gic4qg4" class=""><span>  </span> <li id="u4wowuk" class="alt"><span>   </span><span id="264444i" class="keyword">try</span><span>{   </span> <li id="gg2a6ac" class=""><span>  </span> <li id="4c44kyy" class="alt"><span>   InitialContext ctx=</span><span id="ss4q6wu" class="keyword">new</span><span> InitialContext();   </span> <li id="iugk4ku" class=""><span>  </span> <li id="2s6u4o4" class="alt"><span>   ds=(DataSource)ctx.lookup(</span><span id="s4wo464" class="string">"java:comp/env/jdbc/mysql"</span><span>);   </span> <li id="s4e4k44" class=""><span>  </span> <li id="uw246c6" class="alt"><span>   Connection conn = ds.getConnection();   </span> <li id="wgsmgg2" class=""><span>  </span> <li id="2qg4ca4" class="alt"><span>   Statement stmt = conn.createStatement();   </span> <li id="ic246mq" class=""><span>  </span> <li id="2444i4w" class="alt"><span>     </span><span id="gkuqmka" class="comment">//提示Qusers必须是数据库已有的表Q?</span><span>  </span> <li id="ikcw2aa" class=""><span>  </span> <li id="2e4oywy" class="alt"><span><span id="24wmg42" class="comment">//q里的数据库前文提及的Data Source URL配置里包含的数据库?</span><span>  </span> <li id="mmqs2mk" class=""><span>  </span> <li id="6qc4w4i" class="alt"><span>   String strSql = </span><span id="2644gww" class="string">" select * from users"</span><span>;   </span> <li id="44cm44k" class=""><span>  </span> <li id="wgs462o" class="alt"><span>   ResultSet rs = stmt.executeQuery(strSql);   </span> <li id="2mwsoe4" class=""><span>  </span> <li id="4wse2gu" class="alt"><span>   </span><span id="wyu4mm4" class="keyword">while</span><span>(rs.next()){   </span> <li id="2osoyww" class=""><span>  </span> <li id="24mous6" class="alt"><span>      out.print(rs.getString(</span><span id="e22mouc" class="number">1</span><span>));                    </span> <li id="okc2ocs" class=""><span>  </span> <li id="cugawme" class="alt"><span>     }   </span> <li id="gymk44u" class=""><span>  </span> <li id="smgk4iu" class="alt"><span>out.print(</span><span id="ewycy4c" class="string">"我的试l束"</span><span>);   </span> <li id="c244yq4" class=""><span>  </span> <li id="2oic4ig" class="alt"><span>   }   </span> <li id="ga44kqc" class=""><span>  </span> <li id="yqmogga" class="alt"><span>   </span><span id="u2g6e62" class="keyword">catch</span><span>(Exception ex){   </span> <li id="2sws4kc" class=""><span>  </span> <li id="mk2oqqo" class="alt"><span>       out.print(“出现例外Q信息是:”+ex.getMessage());   </span> <li id="4keqssy" class=""><span>  </span> <li id="ooa4iq4" class="alt"><span>    ex.printStackTrace();   </span> <li id="ss4yq44" class=""><span>  </span> <li id="g4sqii4" class="alt"><span>   }   </span> <li id="woi244w" class=""><span>  </span> <li id="2wia4u4" class="alt"><span>%>   </span> <li id="ga44e4k" class=""><span>  </span> <li id="2mg6464" class="alt"><span></head>   </span> <li id="4icmgo6" class=""><span>  </span> <li id="u4m444g" class="alt"><span><body>   </span> <li id="o22iwue" class=""><span>  </span> <li id="c44a444" class="alt"><span></body>   </span> <li id="ssm4qm4" class=""><span>  </span> <li id="oyi44oq" class="alt"><span></html>   </span> </li> </span></span></div> </span></font><img src ="http://m.tkk7.com/wangbbs2007/aggbug/297504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/wangbbs2007/" target="_blank">狂淘|?/a> 2009-10-09 10:13 <a href="http://m.tkk7.com/wangbbs2007/articles/297504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HashMap和Hashtable的区?http://m.tkk7.com/wangbbs2007/articles/295800.html狂淘|?/dc:creator>狂淘|?/author>Mon, 21 Sep 2009 02:23:00 GMThttp://m.tkk7.com/wangbbs2007/articles/295800.htmlhttp://m.tkk7.com/wangbbs2007/comments/295800.htmlhttp://m.tkk7.com/wangbbs2007/articles/295800.html#Feedback0http://m.tkk7.com/wangbbs2007/comments/commentRss/295800.htmlhttp://m.tkk7.com/wangbbs2007/services/trackbacks/295800.html1 HashMap不是U程安全?


            hastmap是一个接?是map接口的子接口Q是键映射到值的对象Q其中键和值都是对象,q且不能包含重复键,但可以包含重复倹{HashMap允许null key和null valueQ而hashtable不允许?/p>

2   HashTable是线E安全的一个Collection?/p>

HashMap是Hashtable的轻量实现Q非U程安全的实玎ͼQ他们都完成了Map接口Q主要区别在于HashMap允许I(nullQ键|keyQ?׃非线E安全,效率上可能高于Hashtable?br /> HashMap允许null作ؓ一个entry的key或者valueQ而Hashtable不允许?br /> HashMap把Hashtable的containsҎL了,Ҏcontainsvalue和containsKey。因为containsҎҎ让h引v误解?
Hashtablel承自Dictionaryc,而HashMap是Java1.2引进的Map interface的一个实现?br /> 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是Q在多个U程讉KHashtableӞ不需要自׃ؓ它的Ҏ实现同步Q而HashMap 必Mؓ之提供外同步?
Hashtable和HashMap采用的hash/rehash法都大概一P所以性能不会有很大的差异?/p>

public static void main(String args[])
{
HashTable h=new HashTable();
h.put("用户1",new Integer(90));
h.put("用户2",new Integer(50));
h.put("用户3",new Integer(60));
h.put("用户4",new Integer(70));
h.put("用户5",new Integer(80));
Enumeration e=h.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}


map 的方法:


clear()?Map 中删除所有映?/p>

remove(Object key)?Map 中删除键和关联的?/p>

       put(Object key, Object value)指定g指定键相兌

get(Object key)q回与指定键兌的?/p>

containsKey(Object key)如果 Map 包含指定键的映射Q则q回 true

 


 


containsValue(Object value)如果?Map 一个或多个键映到指定|则返?true


isEmpty()如果 Map 不包含键-值映,则返?true size()q回 Map 中的?值映的数目





q些都代表了Java中的集合Q这里主要从其元素是否有序,是否可重复来q行区别记忆Q以便恰当地使用Q当然还存在同步斚w的差异,见上一相x章?/span>





有序?/font>


允许元素重复?/font>


Collection


?/font>


?/font>


List


?/font>


?/font>


Set


AbstractSet


?/font>


?/font>


HashSet


TreeSet


是(用二叉树排序Q?/font>


Map


AbstractMap


?/font>


使用key-value来映和存储数据Q?/span>Key必须惟一Q?/span>value可以重复


HashMap


TreeMap


是(用二叉树排序Q?/font>


 

 


 


List 接口对Collectionq行了简单的扩充Q它的具体实现类常用的有ArrayList和LinkedList。你可以Q何东西放C个List容器中,q在需要时从中取出。ArrayList从其命名中可以看出它是一U类似数l的形式q行存储Q因此它的随问速度极快Q而LinkedList的内部实现是链表Q它适合于在链表中间需要频J进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,?ListIterator则承了Iterator的思想Qƈ提供了对Listq行双向遍历的方法?

Set接口也是 Collection的一U扩展,而与List不同的时Q在Set中的对象元素不能重复Q也是说你不能把同L东西两次攑օ同一个Set容器中。它的常用具体实现有HashSet和TreeSetcRHashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()ҎQ它使用了前面说q的哈希码的法。而TreeSet则将攑օ其中的元素按序存放,q就要求你放入其中的对象是可排序的,q就用到了集合框架提供的另外两个实用cComparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类h相同的排序算法,那就不需要在每分别重复定义相同的排序法Q只要实现Comparator接口卛_。集合框架中q有两个很实用的公用c:Collections?Arrays。Collections提供了对一个Collection容器q行诸如排序、复制、查扑֒填充{一些非常有用的ҎQArrays则是对一个数l进行类似的操作?


            Map是一U把键对象和值对象进行关联的容器Q而一个值对象又可以是一个MapQ依ơ类推,q样可形成一个多U映。对于键对象来说Q像Set一P一个Map容器中的键对象不允许重复Q这是ؓ了保持查扄果的一致?如果有两个键对象一P那你惛_到那个键对象所对应的值对象时有问题了,可能你得到的q不是你想的那个值对象,l果会造成混ؕQ所以键的唯一性很重要Q也是符合集合的性质的。当然在使用q程中,某个键所对应的值对象可能会发生变化Q这时会按照最后一ơ修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以Q意多个键都映到一个值对象上Q这不会发生M问题Q不q对你的使用却可能会造成不便Q你不知道你得到的到底是那一个键所对应的值对象)。Map有两U比较常用的实现Q?HashMap和TreeMap。HashMap也用C哈希码的法Q以便快速查找一个键QTreeMap则是寚w按序存放Q因此它便有一些扩展的ҎQ比如firstKey(),lastKey(){,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的兌很简单,用pub (Object key,Object value)Ҏ卛_一个键与一个值对象相兌。用get(Object key)可得C此key对象所对应的值对象?/p>

 



]]>
jspq问题http://m.tkk7.com/wangbbs2007/articles/294918.html狂淘|?/dc:creator>狂淘|?/author>Sun, 13 Sep 2009 02:49:00 GMThttp://m.tkk7.com/wangbbs2007/articles/294918.htmlhttp://m.tkk7.com/wangbbs2007/comments/294918.htmlhttp://m.tkk7.com/wangbbs2007/articles/294918.html#Feedback0http://m.tkk7.com/wangbbs2007/comments/commentRss/294918.htmlhttp://m.tkk7.com/wangbbs2007/services/trackbacks/294918.html1.JSP与页面参C间的q

  JSP获取面参数时一般采用系l默认的~码方式Q如果页面参数的~码cd和系l默认的~码cd不一_很可能就会出Cؕ码。解册cMؕ码问题的基本Ҏ是在面获取参数之前Q强制指?/p>

request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")?

 servlet  如果在JSP变量输出到面时出CqQ可以通过讄response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解决?/p>


----------------------------------
2、数据库q
  q种q会你插入数据库的中文变成ؕ码,或者读出显C时也是qQ解x法如下:
  在数据库q接字符串中加入~码字符?br />   String Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
  q在面中用如下代码:
  response.setContentType("text/html;charset=gb2312");
  request.setCharacterEncoding("gb2312");

3.中文作ؓ参数传递ؕ?br />   当我们把一D中文字W作为参C递个另一面Ӟ也会出现q情况Q解x法如下:
  在参C递时对参数编码,比如
  RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
  然后在接收参数页面用如下语句接?br />   keywords=new String(request.getParameter("keywords").getBytes("8859_1"));

4.JSP中文q问题之四QGet方式表单传递和URI方式传递参Cؕ?/p>

解决Ҏ

apache-tomcat-6.0.18\conf\server.xml

在这个内加入一?/p>

< Connector port="8080" protocol="HTTP/1.1"     connectionTimeout="20000"     redirectPort="8443"  URIEncoding="GBK" />

5.在b.jsp中把String name=request.getParameter("name");修改?/p>

            String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312");

6.JSP中文q问题更好的解x法是使用qo器技?/p>

Encodingqo?/p>

package com.htt;   import java.io.IOException;   import javax.servlet.Filter;   import javax.servlet.FilterChain;   import javax.servlet.FilterConfig;   import

javax.servlet.ServletException;   import javax.servlet.ServletRequest;   import javax.servlet.ServletResponse;   public class Encoding implements Filter {       public void

destroy() {  }       public void doFilter(ServletRequest request, ServletResponse response,   FilterChain chain) throws IOException, ServletException {      

request.setCharacterEncoding("GBK");       chain.doFilter(request, response);       }       public void init(FilterConfig filterConfig) throws ServletException { }   }      

Web.xml文g中的讄

< filter>     < filter-name>encoding< /filter-name>     < filter-class>com.htt.Encoding< /filter-class>  < /filter>  < filter-mapping>     < filter-name>encoding< /filter-name> 

   < url-pattern>/ToCh_zn< /url-pattern>  < /filter-mapping>



]]>
怎么用ONCLICK写提交表单表http://m.tkk7.com/wangbbs2007/articles/293972.html狂淘|?/dc:creator>狂淘|?/author>Sat, 05 Sep 2009 02:29:00 GMThttp://m.tkk7.com/wangbbs2007/articles/293972.htmlhttp://m.tkk7.com/wangbbs2007/comments/293972.htmlhttp://m.tkk7.com/wangbbs2007/articles/293972.html#Feedback0http://m.tkk7.com/wangbbs2007/comments/commentRss/293972.htmlhttp://m.tkk7.com/wangbbs2007/services/trackbacks/293972.html 2.
如果是提交当前的form,直接写成onclick=submit()卛_,如果是提交其他form,则用:
document.forms[n].submit()或document.forms('formName').submit()都行


]]>
上传下蝲全攻略jspSmartUpload http://m.tkk7.com/wangbbs2007/articles/293908.html狂淘|?/dc:creator>狂淘|?/author>Fri, 04 Sep 2009 09:04:00 GMThttp://m.tkk7.com/wangbbs2007/articles/293908.htmlhttp://m.tkk7.com/wangbbs2007/comments/293908.htmlhttp://m.tkk7.com/wangbbs2007/articles/293908.html#Feedback0http://m.tkk7.com/wangbbs2007/comments/commentRss/293908.htmlhttp://m.tkk7.com/wangbbs2007/services/trackbacks/293908.html 
一、安装篇 

  jspSmartUpload是由www.jspsmart.com|站开发的一个可免费使用的全功能的文件上传下载组Ӟ适于嵌入执行上传下蝲操作的JSP文g中。该lg有以下几个特点: 

1、用简单。在JSP文g中仅仅书写三五行JAVA代码可以搞定文件的上传或下载,方便?nbsp;

2、能全程控制上传。利用jspSmartUploadlg提供的对象及其操作方法,可以获得全部上传文g的信息(包括文g名,大小Q类型,扩展名,文g数据{)Q方便存取?nbsp;

3、能对上传的文g在大、类型等斚w做出限制。如此可以o掉不W合要求的文件?nbsp;

4、下载灵zR仅写两行代码,p把Web服务器变成文件服务器。不文件在Web服务器的目录下或在其它Q何目录下Q都可以利用jspSmartUploadq行下蝲?nbsp;

5、能文件上传到数据库中Q也能将数据库中的数据下载下来。这U功能针对的是MYSQL数据库,因ؓ不具有通用性,所以本文不准备举例介绍q种用法?nbsp;

  jspSmartUploadlg可以从www.jspsmart.com|站上自׃载,压羃包的名字是jspSmartUpload.zip。下载后Q用WinZip或WinRAR其解压到Tomcat的webapps目录下(本文以Tomcat服务器ؓ例进行介l)。解压后Q将webapps/jspsmartupload目录下的子目录Web-inf名字改ؓ全大写的WEB-INFQ这样一改jspSmartUploadcL能用。因为TomcatҎ件名大小写敏感,它要求Web应用E序相关的类所在目录ؓWEB-INFQ且必须是大写。接着重新启动TomcatQ这样就可以在JSP文g中用jspSmartUploadlg了?nbsp;

  注意Q按上述Ҏ安装后,只有webapps/jspsmartupload目录下的E序可以使用jspSmartUploadlgQ如果想让Tomcat服务器的所有Web应用E序都能用它Q必d如下工作Q?nbsp;

1Q进入命令行状态,目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下?nbsp;

2Q运行JAR打包命oQjar cvf jspSmartUpload.jar com 

Q也可以打开资源理器,切换到当前目录,用WinZipcom目录下的所有文件压~成jspSmartUpload.zipQ然后将jspSmartUpload.zip换名为jspSmartUpload.jar文g卛_。) 

3Q将jspSmartUpload.jar拯到Tomcat的shared/lib目录下?nbsp;

二、相关类说明?nbsp;

?nbsp;Filec?nbsp;

  q个cd装了一个上传文件的所有信息。通过它,可以得到上传文g的文件名、文件大、扩展名、文件数据等信息?nbsp;

  FilecM要提供以下方法: 

1、saveAs作用Q将文g换名另存?nbsp;

原型Q?nbsp;

public void saveAs(java.lang.String destFilePathName) 

?nbsp;

public void saveAs(java.lang.String destFilePathName, int optionSaveAs) 

其中QdestFilePathName是另存的文g名,optionSaveAs是另存的选项Q该选项有三个|分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUALQSAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系l的根目录ؓ文g根目录另存文ӞSAVEAS_VIRTUAL表明以Web应用E序的根目录为文件根目录另存文gQSAVEAS_AUTO则表Clg军_Q当Web应用E序的根目录存在另存文g的目录时Q它会选择SAVEAS_VIRTUALQ否则会选择SAVEAS_PHYSICAL?nbsp;

例如QsaveAs("/upload/sample.zip",SAVEAS_PHYSICAL)执行后若Web服务器安装在C盘,则另存的文g名实际是c:uploadsample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)执行后若Web应用E序的根目录是webapps/jspsmartuploadQ则另存的文件名实际是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)执行时若Web应用E序根目录下存在upload目录Q则其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)Q否则同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)?nbsp;

Q对于WebE序的开发来_最好用SAVEAS_VIRTUALQ以便移植?nbsp;

2、isMissing 

作用Q这个方法用于判断用h否选择了文Ӟ也即对应的表单项是否有倹{选择了文件时Q它q回false。未选文件时Q它q回true?nbsp;

原型Qpublic boolean isMissing() 

3、getFieldName 

作用Q取HTML表单中对应于此上传文件的表单的名字?nbsp;

原型Qpublic String getFieldName() 

4、getFileName 

作用Q取文g名(不含目录信息Q?nbsp;

原型Qpublic String getFileName() 

5、getFilePathName 

作用Q取文g全名Q带目录Q?nbsp;

原型Qpublic String getFilePathName 

6、getFileExt 

作用Q取文g扩展名(后缀Q?nbsp;

原型Qpublic String getFileExt() 

7、getSize 

作用Q取文g长度Q以字节计) 

原型Qpublic int getSize() 

8、getBinaryData 

作用Q取文g数据中指定位Ud的一个字节,用于文件等处理?nbsp;

原型Qpublic byte getBinaryData(int index)。其中,index表示位移Q其值在0到getSize()-1之间?nbsp;

?nbsp;Filesc?nbsp;

  q个c表C所有上传文件的集合Q通过它可以得C传文件的数目、大等信息。有以下ҎQ?nbsp;

1、getCount 

作用Q取得上传文件的数目?nbsp;

原型Qpublic int getCount() 

2、getFile 

作用Q取得指定位Ud的文件对象FileQ这是com.jspsmart.upload.FileQ不是java.io.FileQ注意区分)?nbsp;

原型Qpublic File getFile(int index)。其中,index为指定位U,其值在0到getCount()-1之间?nbsp;

3、getSize 

作用Q取得上传文件的总长度,可用于限制一ơ性上传的数据量大?nbsp;

原型Qpublic long getSize() 

4、getCollection 

作用Q将所有上传文件对象以Collection的Ş式返回,以便其它应用E序引用Q浏览上传文件信息?nbsp;

原型Qpublic Collection getCollection() 

5、getEnumeration 

作用Q将所有上传文件对象以EnumerationQ枚举)的Ş式返回,以便其它应用E序览上传文g信息?nbsp;

原型Qpublic Enumeration getEnumeration() 

?nbsp;Requestc?nbsp;

  q个cȝ功能{同于JSP内置的对象request。只所以提供这个类Q是因ؓ对于文g上传表单Q通过request对象无法获得表单的|必须通过jspSmartUploadlg提供的Request对象来获取。该cL供如下方法: 

1、getParameter 

作用Q获取指定参C倹{当参数不存在时Q返回gؓnull?nbsp;

原型Qpublic String getParameter(String name)。其中,name为参数的名字?nbsp;

2、getParameterValues 

作用Q当一个参数可以有多个值时Q用此方法来取其倹{它q回的是一个字W串数组。当参数不存在时Q返回gؓnull?nbsp;

原型Qpublic String[] getParameterValues(String name)。其中,name为参数的名字?nbsp;

3、getParameterNames 

作用Q取得Request对象中所有参数的名字Q用于遍历所有参数。它q回的是一个枚丑֞的对象?nbsp;

原型Qpublic Enumeration getParameterNames() 

?nbsp;SmartUploadc这个类完成上传下蝲工作?nbsp;

AQ上传与下蝲q的方法: 

只有一个:initialize?nbsp;

作用Q执行上传下载的初始化工作,必须W一个执行?nbsp;

原型Q有多个Q主要用下面这个: 

public final void initialize(javax.servlet.jsp.PageContext pageContext) 

其中QpageContext为JSP面内置对象Q页面上下文Q?nbsp;

BQ上传文件用的ҎQ?nbsp;

1、upload 

作用Q上传文件数据。对于上传操作,W一步执行initializeҎQ第二步p执行q个Ҏ?nbsp;

原型Qpublic void upload() 

2、save 

作用Q将全部上传文g保存到指定目录下Qƈq回保存的文件个数?nbsp;

原型Qpublic int save(String destPathName) 

和public int save(String destPathName,int option) 

其中QdestPathName为文件保存目录,optionZ存选项Q它有三个|分别是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同FilecȝsaveAsҎ的选项之值类|SAVE_PHYSICAL指示lg文件保存到以操作系l根目录为文件根目录的目录下QSAVE_VIRTUAL指示lg文件保存到以Web应用E序根目录ؓ文g根目录的目录下,而SAVE_AUTO则表C由lg自动选择?nbsp;

注:save(destPathName)作用{同于save(destPathName,SAVE_AUTO)?nbsp;

3、getSize 

作用Q取上传文g数据的总长?nbsp;

原型Qpublic int getSize() 

4、getFiles 

作用Q取全部上传文gQ以Files对象形式q回Q可以利用Filescȝ操作Ҏ来获得上传文件的数目{信息?nbsp;

原型Qpublic Files getFiles() 

5、getRequest 

作用Q取得Request对象Q以便由此对象获得上传表单参C倹{?nbsp;

原型Qpublic Request getRequest() 

6、setAllowedFilesList 

作用Q设定允怸传带有指定扩展名的文Ӟ当上传过E中有文件名不允许时Q组件将抛出异常?nbsp;

原型Qpublic void setAllowedFilesList(String allowedFilesList) 

其中QallowedFilesList为允怸传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想允许上传那些没有扩展名的文gQ可以用两个逗号表示。例如:setAllowedFilesList("doc,txt,,")允怸传带doc和txt扩展名的文g以及没有扩展名的文g?nbsp;

7、setDeniedFilesList 

作用Q用于限制上传那些带有指定扩展名的文件。若有文件扩展名被限Ӟ则上传时lg抛出异常?nbsp;

原型Qpublic void setDeniedFilesList(String deniedFilesList) 

其中QdeniedFilesList为禁止上传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想止上传那些没有扩展名的文gQ可以用两个逗号来表C。例如:setDeniedFilesList("exe,bat,,")禁止上传带exe和bat扩展名的文g以及没有扩展名的文g?nbsp;

8、setMaxFileSize 

作用Q设定每个文件允怸传的最大长度?nbsp;

原型Qpublic void setMaxFileSize(long maxFileSize) 

其中QmaxFileSizeZؓ每个文g允许上传的最大长度,当文件超出此长度Ӟ不被上传?nbsp;

9、setTotalMaxFileSize 

作用Q设定允怸传的文g的总长度,用于限制一ơ性上传的数据量大?nbsp;

原型Qpublic void setTotalMaxFileSize(long totalMaxFileSize) 

其中QtotalMaxFileSize为允怸传的文g的总长度?br />


1、setContentDisposition 

作用Q将数据q加到MIME文g头的CONTENT-DISPOSITION域。jspSmartUploadlg会在q回下蝲的信息时自动填写MIME文g头的CONTENT-DISPOSITION域,如果用户需要添加额外信息,L此方法?nbsp;

原型Qpublic void setContentDisposition(String contentDisposition) 

其中QcontentDispositiond的数据。如果contentDisposition为nullQ则lg自动添?attachment;"Q以表明下载的文g作ؓ附gQ结果是IE览器将会提C另存文Ӟ而不是自动打开q个文gQIE览器一般根据下载的文g扩展名决定执行什么操作,扩展名ؓdoc的将用wordE序打开Q扩展名为pdf的将用acrobatE序打开Q等{)?nbsp;

2、downloadFile 

作用Q下载文件?nbsp;

原型Q共有以下三个原型可用,W一个最常用Q后两个用于Ҏ情况下的文g下蝲Q如更改内容cdQ更改另存的文g名)?nbsp;

?nbsp;public void downloadFile(String sourceFilePathName) 

其中QsourceFilePathName下蝲的文件名Q带目录的文件全名) 

?nbsp;public void downloadFile(String sourceFilePathName,String contentType) 

其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别)?nbsp;

?nbsp;public void downloadFile(String sourceFilePathName,String contentType,String destFileName) 

其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别),destFileNameZ载后默认的另存文件名?nbsp;

三、文件上传篇 

?nbsp;表单要求 

对于上传文g的FORM表单Q有两个要求Q?nbsp;

1、METHOD应用POSTQ即METHOD="POST"?nbsp;

2、增加属性:ENCTYPE="multipart/form-data" 

下面是一个用于上传文件的FORM表单的例子: 



<FORM METHOD="POST" ENCTYPE="multipart/form-data" 
ACTION="/jspSmartUpload/upload.jsp">
<INPUT TYPE="FILE" NAME="MYFILE">
<INPUT TYPE="SUBMIT">
</FORM>
 


?nbsp;上传的例?nbsp;

1、上传页面upload.html 

本页面提供表单,让用户选择要上传的文gQ点?上传"按钮执行上传操作?nbsp;

面源码如下Q?nbsp;

<!--
    文g名:upload.html
?nbsp; 者:U|软g制作中心雨亦?zhsoft88@sohu.com)
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文g上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<p> </p>
<p align="center">上传文g选择</p>
<FORM METHOD="POST" ACTION="jsp/do_upload.jsp"
ENCTYPE="multipart/form-data">
<input type="hidden" name="TEST" value="good">
  <table width="75%" border="1" align="center">
    <tr> 
      <td><div align="center">1?nbsp;
          <input type="FILE" name="FILE1" size="30">
        </div></td>
    </tr>
    <tr> 
      <td><div align="center">2?nbsp;
          <input type="FILE" name="FILE2" size="30">
        </div></td>
    </tr>
    <tr> 
      <td><div align="center">3?nbsp;
          <input type="FILE" name="FILE3" size="30">
        </div></td>
    </tr>
    <tr> 
      <td><div align="center">4?nbsp;
          <input type="FILE" name="FILE4" size="30">
        </div></td>
    </tr>
    <tr> 
      <td><div align="center">
          <input type="submit" name="Submit" value="上传它!">
        </div></td>
    </tr>
  </table>
</FORM>
</body>
</html>
 


2、上传处理页面do_upload.jsp 

本页面执行文件上传操作。页面源码中详细介绍了上传方法的用法Q在此不赘述了?nbsp;

面源码如下Q?nbsp;

<%--
文g名:do_upload.jsp
?nbsp; 者:U|软g制作中心雨亦?zhsoft88@sohu.com)
--%>
<%@ page contentType="text/html; charset=gb2312" language="java" 
import="java.util.*,com.jspsmart.upload.*" errorPage="" %>
<html>
<head>
<title>文g上传处理面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<%
// 新徏一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 上传初始?br /> su.initialize(pageContext);
// 讑֮上传限制
// 1.限制每个上传文g的最大长度?br /> // su.setMaxFileSize(10000);
// 2.限制M传数据的长度?br /> // su.setTotalMaxFileSize(20000);
// 3.讑֮允许上传的文Ӟ通过扩展名限Ӟ,仅允许doc,txt文g?br /> // su.setAllowedFilesList("doc,txt");
// 4.讑֮止上传的文Ӟ通过扩展名限Ӟ,止上传带有exe,bat,
jsp,htm,html扩展名的文g和没有扩展名的文件?br /> // su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
// 上传文g
su.upload();
// 上传文件全部保存到指定目录
int count = su.save("/upload");
out.println(count+"个文件上传成功!<br>");

// 利用Request对象获取参数之?br /> out.println("TEST="+su.getRequest().getParameter("TEST")
+"<BR><BR>");

// 逐一提取上传文g信息Q同时可保存文g?br /> for (int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i);

// 若文件不存在则l?br /> if (file.isMissing()) continue;

// 昄当前文g信息
out.println("<TABLE BORDER=1>");
out.println("<TR><TD>表单名QFieldNameQ?lt;/TD><TD>"
+ file.getFieldName() + "</TD></TR>");
out.println("<TR><TD>文g长度QSizeQ?lt;/TD><TD>" + 
file.getSize() + "</TD></TR>");
out.println("<TR><TD>文g名(FileNameQ?lt;/TD><TD>" 
+ file.getFileName() + "</TD></TR>");
out.println("<TR><TD>文g扩展名(FileExtQ?lt;/TD><TD>" 
+ file.getFileExt() + "</TD></TR>");
out.println("<TR><TD>文g全名QFilePathNameQ?lt;/TD><TD>"
+ file.getFilePathName() + "</TD></TR>");
out.println("</TABLE><BR>");

// 文件另?br /> // file.saveAs("/upload/" + myFile.getFileName());
// 另存CWEB应用E序的根目录为文件根目录的目录下
// file.saveAs("/upload/" + myFile.getFileName(), 
su.SAVE_VIRTUAL);
// 另存到操作系l的根目录ؓ文g根目录的目录?br /> // file.saveAs("c:temp" + myFile.getFileName(), 
su.SAVE_PHYSICAL);

}
%>
</body>
</html>
 


四、文件下载篇 

1、下载链接页面download.html 

面源码如下Q?nbsp;

<!--
文g名:download.html
?nbsp; 者:U|软g制作中心雨亦?zhsoft88@sohu.com)
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>下蝲</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<a href="jsp/do_download.jsp">点击下蝲</a>
</body>
</html>
 


2、下载处理页面do_download.jsp do_download.jsp展示了如何利用jspSmartUploadlg来下载文Ӟ从下面的源码中就可以看到Q下载何其简单?nbsp;

源码如下Q?nbsp;

<%@ page contentType="text/html;charset=gb2312" 
import="com.jspsmart.upload.*" %><%
// 新徏一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始?br /> su.initialize(pageContext);
// 讑֮contentDisposition为null以禁止浏览器自动打开文gQ?br /> //保证点击链接后是下蝲文g。若不设定,则下载的文g扩展名ؓ
//docӞ览器将自动用word打开它。扩展名为pdfӞ
//览器将用acrobat打开?br /> su.setContentDisposition(null);
// 下蝲文g
su.downloadFile("/upload/如何赚取我的W一桉.doc");
%>
 


注意Q执行下载的面Q在Java脚本范围外(?lt;% ... %>之外Q,不要包含HTML代码、空根{回车或换行{字W,有的话将不能正确下蝲。不信的话,可以在上q源码中%><%之间加入一个换行符Q再下蝲一下,保证出错。因为它影响了返回给览器的数据,D解析出错?nbsp;

3、如何下载中文文?nbsp;

jspSmartUpload虽然能下载文Ӟ但对中文支持不。若下蝲的文件名中有汉字Q则览器在提示另存的文件名Ӟ昄的是一堆ؕ码,很扫人兴。上面的例子是q样。(q个问题也是众多下蝲lg所存在的问题,很少有h解决Q搜索不到相兌料,可叹Q) 

ZljspSmartUploadlg增加下蝲中文文g的支持,我对该组件进行了研究Q发现对q回l浏览器的另存文件名q行UTF-8~码后,览器便能正显CZ文名字了。这是一个o人高兴的发现。于是我对jspSmartUploadlg的SmartUploadcd了升U处理,增加了toUtf8Stringq个ҎQ改动部分源码如下: 

public void downloadFile(String s, String s1, String s2, int i)
throws ServletException, IOException, SmartUploadException
    {
if(s == null)
    throw new IllegalArgumentException("File ''" + s +
    "'' not found (1040).");
if(s.equals(""))
    throw new IllegalArgumentException("File ''" + s +
    "'' not found (1040).");
if(!isVirtual(s) && m_denyPhysicalPath)
    throw new SecurityException("Physical path is
    denied (1035).");
if(isVirtual(s))
    s = m_application.getRealPath(s);
java.io.File file = new java.io.File(s);
FileInputStream fileinputstream = new FileInputStream(file);
long l = file.length();
boolean flag = false;
int k = 0;
byte abyte0[] = new byte[i];
if(s1 == null)
    m_response.setContentType("application/x-msdownload");
else
if(s1.length() == 0)
    m_response.setContentType("application/x-msdownload");
else
    m_response.setContentType(s1);
m_response.setContentLength((int)l);
m_contentDisposition = m_contentDisposition != null ?
m_contentDisposition : "attachment;";
if(s2 == null)
    m_response.setHeader("Content-Disposition", 
    m_contentDisposition + " filename=" + 
    toUtf8String(getFileName(s)));
else
if(s2.length() == 0)
    m_response.setHeader("Content-Disposition", 
    m_contentDisposition);
else
    m_response.setHeader("Content-Disposition", 
    m_contentDisposition + " filename=" + toUtf8String(s2));
while((long)k < l)
{
    int j = fileinputstream.read(abyte0, 0, i);
    k += j;
    m_response.getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
    }

    /**
     * 文件名中的汉字转ؓUTF8~码的串,以便下蝲时能正确昄另存的文件名.
     * U|软g制作中心雨亦?003.08.01
     * @param s 原文件名
     * @return 重新~码后的文g?br />      */
    public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i=0;i<s.length();i++) {
    char c = s.charAt(i);
    if (c >= 0 && c <= 255) {
sb.append(c);
    } else {
byte[] b;
try {
    b = Character.toString(c).getBytes("utf-8");
} catch (Exception ex) {
    System.out.println(ex);
    b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
    int k = b[j];
    if (k < 0) k += 256;
    sb.append("%" + Integer.toHexString(k).
    toUpperCase());
}
    }
}
return sb.toString();
    }
 


注意源码中粗体部分,原jspSmartUploadlg对返回的文g未作M处理Q现在做了编码的转换工作Q将文g名{换ؓUTF-8形式的编码Ş式。UTF-8~码对英文未作Q何处理,对中文则需要{换ؓ%XX的Ş式。toUtf8StringҎ中,直接利用Java语言提供的编码{换方法获得汉字字W的UTF-8~码Q之后将其{换ؓ%XX的Ş式?nbsp;

源码编译后打包成jspSmartUpload.jarQ拷贝到Tomcat的shared/lib目录下(可ؓ所有WEB应用E序所׃nQ,然后重启Tomcat服务器就可以正常下蝲含有中文名字的文件了。另QtoUtf8StringҎ也可用于转换含有中文的超U链接,以保证链接的有效Q因为有的WEB服务器不支持中文链接?nbsp;

结QjspSmartUploadlg是应用JSPq行B/SE序开发过E中l常使用的上传下载组Ӟ它用简单,方便。现在我又ؓ其加上了下蝲中文名字的文件的支持Q真个是如虎ȝQ必赢得更多开发者的青睐?


]]>
JSPq接MYSQL5的中文问题解x?http://m.tkk7.com/wangbbs2007/articles/293906.html狂淘|?/dc:creator>狂淘|?/author>Fri, 04 Sep 2009 09:02:00 GMThttp://m.tkk7.com/wangbbs2007/articles/293906.htmlhttp://m.tkk7.com/wangbbs2007/comments/293906.htmlhttp://m.tkk7.com/wangbbs2007/articles/293906.html#Feedback0http://m.tkk7.com/wangbbs2007/comments/commentRss/293906.htmlhttp://m.tkk7.com/wangbbs2007/services/trackbacks/293906.html 

用JAVA/JSP做开发很久了,也见q许多朋友做q?有很大一部分用的是MYSQL的数据库,现在MYSQL数据库版?.0及以上的都已l被用的很广泛了,但一直有一个问?使刚入门的朋友费劲心?是JSPq接MYSQL5数据库的时候的一些中文问?于是|络上也出现了很多相关的帖子.׃大家对MYSQL5数据库的配制文gMY.INI也有了些了解.甚至一些朋友就直接?你们的MYSQL是什么编码的?你们的TOMCAT是什么样的编?可能不是很规范的问法,但说明了~码问题的确影响了大家的使用.

下面的讲解是在MYSQL5.0.18,TOMCAT5.0.28,驱动为mysql-connector-java-3.2.0-alpha-bin.jar及以上版本的情况下测试的

JSPq接数据库的q问题,分两部分来看

1 数据库中是不是ؕ?

我们需要保证数据库保存的不??????"形式的ؕ?如何保证?

我们在管理MYSQL数据库的时?需要用一个客L,无论你用MYSQL-FRONT,EMS SQL Manager for MySQL,q是MYSQL命o?q些都是客户?也是E序q接了数据库,我们现在用客LEMS SQL Manager for MySQLq接数据?q接的时候一定要讄客户端字W集为GBK或者GB2312,q样你才能知道数据库里面是不是ؕ?q一~码讄很重?不然,q数据库里是中?你看到的q是q

q样q接?我们看下我们做测试的表格,里面的汉字就是正常的,q个时候也可以直接在上面的记录中进入中文的修改

若这里没有选择~码的话,一般默认的是UTF8的了,q接后再看这个表?׃出现q

而这个时候就会出C能插入中文的问题,若您插入中文的话,׃出现下列错误

q个时候大家什么不要误?不是不能插入中文,也不是你插入的字W太?

更改下连接编码就OK?下面是这个表格的SQL语句

CREATE TABLE `test` (
`name` varchar(100) default NULL,
`adesc` varchar(100) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

?E序q接数据?也要讄好连接时候的~码,JSPq接MYSQL数据库时?有个URL参数,jdbc:mysql://localhost:3307/sssdb?user=demoUser&password=demoPwd&useUnicode=true&characterEncoding=UTF-8,在这里需要设|成UTF-8,

下面是连接数据库的程序代?/p>

<%@ page contentType="text/html;charset=GB2312" language="java"%>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>

<%
out.println("您的数据库某表格中的内容如下<br>");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url ="jdbc:mysql://localhost:3307/sssdb?user=demoUser&password=demoPwd&useUnicode=true&characterEncoding=UTF-8";
//testDBZ的数据库?
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {
out.println("W一个字D内容:<font color=red>"+rs.getString(1)+"</font> W二个字D内容:<font color=red>"+rs.getString(2)+"</font><br>");
}
out.print("数据库操作成功,恭喜?);

sql = "insert into test (name,adesc) values ('中文','汉字')";
stmt.execute(sql);


rs.close();
stmt.close();
conn.close();
}
catch(Exception e){
System.out.println("数据库连接不成功"+e.toString());
}
%>

上面的经验是l过多次试ȝ出来?不管是MYSQL的客Lq是E序q接MYSQL数据?在本质上都是E序q接数据?可以自己在本地多试验?有时候有可能是驱动太?/p>



]]>
web.xml 详细配置解析http://m.tkk7.com/wangbbs2007/articles/293710.html狂淘|?/dc:creator>狂淘|?/author>Thu, 03 Sep 2009 02:48:00 GMThttp://m.tkk7.com/wangbbs2007/articles/293710.htmlhttp://m.tkk7.com/wangbbs2007/comments/293710.htmlhttp://m.tkk7.com/wangbbs2007/articles/293710.html#Feedback0http://m.tkk7.com/wangbbs2007/comments/commentRss/293710.htmlhttp://m.tkk7.com/wangbbs2007/services/trackbacks/293710.html部v描述W实际上是一个XML文gQ包含了很多描述servlet/JSP应用的各个方面的元素Q如servlet注册、servlet映射以及监听器注册。部|描q符从下面的XML头开始:

<?xml version="1.0" encoding="ISO-8859-1"?>

q个头指定了XML的版本号以及所使用的编码。头的下面是DOCTYPE声明Q?/p>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

q段代码指定文gcd定义(DTD)Q可以通过它检查XML文档的有效性。下面显C的<!DOCTYPE>元素有几个特性,q些Ҏ告诉我们关于DTD的信息:
?web-app定义该文?部v描述W,不是DTD文g)的根元素
?PUBLIC意味着DTD文g可以被公开使用
?"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"意味着DTD由Sun Microsystems, Inc.l护?br /> 该信息也表示它描q的文档cd是DTD Web Application 2.3Q而且DTD是用英文书写的?br /> ?URL"

注意Q?br /> 在部|描q符中, <!--…-->用于注释?br /> 部v描述W的根元素是web-app。DTD文g规定Qweb-app元素的子元素的语法如下:

<!ELEMENT web-app (icon?, display-name?, description?,
distributable?, context-param*, filter*, filter-mapping*,
listener*, servlet*, servlet-mapping*, session-config?,
mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*,
security-constraint*, login-config?, security-role*,env-entry*,
ejb-ref*, ejb-local-ref*)>

正如您所看到的,q个元素含有23个子元素Q而且子元素都是可选的。问?Q?表示子元素是可选的Q而且只能出现一ơ。星?*)表示子元素可在部|描q符中出现零ơ或多次。有些子元素q可以有它们自己的子元素?br /> web.xml文g中web-app元素声明的是下面每个子元素的声明。下面的章节讲述部v描述W中可能包含的所有子元素?br /> 注意Q?br /> 在Servlet 2.3中,子元素必L照DTD文g语法描述中指定的序出现。比如,如果部v描述W中的web-app元素有servlet和servlet-mapping两个子元素,则servlet子元素必d现在servlet-mapping子元素之前。在Servlet 2.4中,序q不重要?br /> 下面对web.xml文g各元素进行详?/p>

1. icon元素
icon元素用来指定GIF格式或JPEG格式的小图标(16×16)或大图标(32×32)的文件名?/p>

<!ELEMENT icon (small-icon?, large-icon?)>
<!ELEMENT small-icon (#PCDATA)>
<!ELEMENT large-icon (#PCDATA)>

icon元素包括两个可选的子元素:small-icon子元素和large-icon子元素。文件名是Web应用归档文g(WAR)的根的相对\径?br /> 部v描述Wƈ没有使用icon元素。但是,如果使用XML工具~辑部v描述W,XML~辑器可以用icon元素?/p>

2. display-name元素
如果使用工具~辑部v描述W,display-name元素包含的就是XML~辑器显C的名称?/p>

<!ELEMENT display-name (#PCDATA)>

下面是一个含有display-name元素的部|描q符Q?/p>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<display-name>Online Store Application</display-name>
</web-app>

3. description元素
可以使用description元素来提供有关部|描q符的信息。XML~辑器可以用description元素的倹{?/p>

<!ELEMENT description (#PCDATA)>

4. distributable元素
可以使用distributable元素来告诉servlet/JSP容器Q编写将在分布式Web容器中部|的应用Q?/p>

<!ELEMENT distributable EMPTY>

例如Q下面是一个含有distributable元素的部|描q符的例子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<distributable/>
</web-app>

5. context-param元素
context-param元素含有一对参数名和参数|用作应用的servlet上下文初始化参数。参数名在整个Web应用中必L惟一的?/p>

<!ELEMENT context-param (param-name, param-value, description?)>
<!ELEMENT param-name (#PCDATA)>
<!ELEMENT param-value (#PCDATA)>
<!ELEMENT description (#PCDATA)>

param-name 子元素包含有参数名,而param-value子元素包含的是参数倹{作为选择Q可用description子元素来描述参数?/p>

下面是一个含有context-param元素的有效部|描q符Q?/p>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<context-param>
<param-name>jdbcDriver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
</web-app>

6. filter元素
filter元素用于指定Web容器中的qo器。在h和响应对象被servlet处理之前或之后,可以使用qo器对q两个对象进行操作。利用下一节介l?的filter-mapping元素Q过滤器被映到一个servlet或一个URL模式。这个过滤器的filter元素和filter-mapping 元素必须h相同的名U?/p>

<!ELEMENT filter (icon?, filter-name, display-name?, description?,
filter-class, init-param*)>
<!ELEMENT filter-name (#PCDATA)>
<!ELEMENT filter-class (#PCDATA)>

icon、display-name和description元素的用法和上一节介l的用法相同。init-param元素与context-param 元素h相同的元素描q符。filter-name元素用来定义qo器的名称Q该名称在整个应用中都必L惟一的。filter-class元素指定qo 器类的完全限定的名称?/p>

下面是一个用filter元素的部|描q符的例子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<filter>
<filter-name>Encryption Filter</filter-name>
<filter-class>com.branysoftware.EncryptionFilter</filter-class>
</filter>
</web-app>

7. filter-mapping元素
filter-mapping元素用来声明Web应用中的qo器映。过滤器可被映射C个servlet或一个URL模式。将qo器映到一?servlet中会造成qo器作用于servlet上。将qo器映到一个URL模式中则可以过滤器应用于Q何资源,只要该资源的URL与URL模式?配。过滤是按照部v描述W的filter-mapping元素出现的顺序执行的?/p>

<!ELEMENT filter-mapping (filter-name, (url-pattern | servlet-name))>
<!ELEMENT filter-name (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT servlet-name (#PCDATA)>

filter-name值必d应filter元素中声明的其中一个过滤器名称。下面是一个含有filter-mapping元素的部|描q符Q?/p>

<?xml version="1.0" encoding="ISO-8859-1">
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<filter>
<filter-name>Encryption Filter</filter-name>
<filter-class>com.brainysoftware.EncryptionFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Encryption Filter</filter-name>
<servlet-name>EncryptionFilteredServlet</servlet-name>
</filter-mapping>
</web-app>

8. listener元素
listener元素用来注册一个监听器c,可以在Web应用中包含该cR用listener元素Q可以收C件什么时候发生以及用什么作为响应的通知?/p>

<!ELEMENT listener (listener-class)>
<!ELEMENT listener-class (#PCDATA)>

下面是一个含有listener元素的有效部|描q符Q?/p>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<listener>
<listener-class>MyAppListener</listener-class>
</listener>
</web-app>

9. servlet元素
servlet元素用来声明一个servlet?/p>

<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
(servlet-class|jsp-file), init-param*, load-on-startup?, run-as?,
security-role-ref*)>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT jsp-file (#PCDATA)>
<!ELEMENT init-param (param-name, param-value, description?)>
<!ELEMENT load-on-startup (#PCDATA)>
<!ELEMENT run-as (description?, role-name)>
<!ELEMENT role-name (#PCDATA)>

icon、display-name和description元素的用法和上一节介l的用法相同。init-param元素与context-param元素h相同的元素描q符。可以用init-param子元素将初始化参数名和参数g递给servlet?/p>

(1) servlet-name、servlet-class和jsp-file元素

servlet元素必须含有servlet-name元素和servlet-class元素Q或者servlet-name元素和jsp-file元素。描q如下:
?servlet-name元素用来定义servlet的名Uͼ该名U在整个应用中必L惟一的?br /> ?servlet-class元素用来指定servlet的完全限定的名称?br /> ?jsp-file元素用来指定应用中JSP文g的完整\径。这个完整\径必ȝa/开始?/p>

(2) load-on-startup元素

当启动Web容器Ӟ用load-on-startup元素自动servlet加入内存。加载servlet意味着实例化这个servletQƈ调用 它的initҎ。可以用这个元素来避免W一个servleth的响应因为servlet载入内存所D的Q何gq。如果load-on- startup元素存在Q而且也指定了jsp-file元素Q则JSP文g会被重新~译成servletQ同时生的servlet也被载入内存?br /> load-on-startup元素的内容可以ؓI,或者是一个整数。这个DC由Web容器载入内存的顺序。D个例子,如果有两个servlet元素?含有load-on-startup子元素,则load-on-startup子元素D的servlet先被加载。如果load-on- startup子元素gؓI或负|则由Web容器军_什么时候加载servlet。如果两个servlet的load-on-startup子元素值相 同,则由Web容器军_先加载哪一个servlet?/p>

(3) run-as元素

如果定义了run-as元素Q它会重写用于调用Web应用中servlet所讑֮的Enterprise JavaBean(EJB)的安全n份。Role-name是ؓ当前Web应用定义的一个安全角色的名称?/p>

(4) security-role-ref元素

security-role-ref元素定义一个映,该映在servlet中用isUserInRole (String name)调用的角色名与ؓWeb应用定义的安全角色名之间q行。security-role-ref元素的描q如下:
<!ELEMENT security-role-ref (description?, role-name, role-link)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT role-name (#PCDATA)>
<!ELEMENT role-link (#PCDATA)>

role-link元素用来安全角色引用链接到已定义的安全角色。role-link元素必须含有已经在security-role元素中定义的一个安全角色的名称?/p>

(5) Faces Servlet的servlet元素

?JSF应用中,需要ؓFaces Servlet定义一个servlet元素Q如下所C:

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>

<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>

<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>

</web-app>

10. seervlet-mapping 元素
seervlet-mapping 元素URL模式映射到某个servlet?/p>

<!ELEMENT servlet-mapping (servlet-name, url-pattern)>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>

在前面的“servlet元素”一节中已经介绍了用servlet-mapping元素的例子?/p>

11. session-config元素
session-config元素为Web应用中的javax.servlet.http.HttpSession对象定义参数?/p>

<!ELEMENT session-config (session-timeout?)>
<!ELEMENT session-timeout (#PCDATA)>

session-timeout元素用来指定默认的会话超时时间间隔,以分钟ؓ单位。该元素值必Mؓ整数。如果session-timeout元素的gؓ零或负数Q则表示会话永q不会超时?/p>

下面是一个部|描q符Q在用户最q访问HttpSession对象30分钟后,HttpSession对象默认为无效:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>

12. mime-mapping元素
mime-mapping元素mimecd映射到扩展名?/p>

<!ELEMENT mime-mapping (extension, mime-type)>
<!ELEMENT extension (#PCDATA)>
<!ELEMENT mime-type (#PCDATA)>

extension元素用来描述扩展名。mime-type元素则ؓMIMEcd?/p>

举个例子Q下面的部v描述W将扩展名txt映射为text/plainQ?/p>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<web-app>
<mime-mapping>
<extension>txt</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
</web-app>

13. welcome-file-list元素
当用户在览器中输入的URL不包含某个servlet名或JSP面Ӟwelcome-file-list元素可指定显C的默认文g?/p>

<!ELEMENT welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)>

举个例子说明Q假讄户在览器的地址框中输入http://www.mycompany.com/appName/{地址。如果在Web应用的部|描q符中指定welcome-file-list元素Q用户就会看C个权限错误消息,或者是应用目录下的文g和目录列表。如果定义了welcome-file-list元素Q用户就能看到由该元素指定的具体文g?br /> welcome-file子元素用于指定默认文件的名称。welcome-file-list元素可以包含一个或多个welcome-file子元素。如果在W一个welcome-file元素中没有找到指定的文gQWeb容器׃试昄W二个,以此cL?br /> 下面是一个包含welcome-file-list元素的部|描q符。该元素包含两个welcome-file元素Q第一个指定应用目录中的main.html文gQ第二个定义jsp目录下的welcom.jsp文gQjsp目录也在应用目录下?/p>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<welcome-file-list>
<welcome-file>main.html</welcome-file>
<welcome-file>jsp/welcome.jsp</welcome-file>
</welcome-file-list>
</web-app>

如果用户键入的URL不包含servlet名称、JSP面或其他资源,则不会在应用目录中找到main.html文gQ这时就会显Cjsp目录下的welcome.jsp文g?/p>

14. error-page元素
error-page元素用于一D错误代码或一个异常类型映到Web应用中的资源路径Q从而在产生Ҏ的HTTP错误或指定的Java异常Ӟ显C相关的资源?/p>

<!ELEMENT error-page ((error-code | exception-type), location)>
<!ELEMENT error-code (#PCDATA)>
<!ELEMENT exception-type (#PCDATA)>
<!ELEMENT location (#PCDATA)>

error-code元素包含HTTP错误代码。exception-type是Java异常cd的完全限定的名称。location元素是Web应用中的资源相对于应用目录的路径。location的值必Ma/开始?/p>

举个例子Q每ơ生HTTP 404错误代码Ӟ下面的部|描q符可Web容器昄error404.html面Q?/p>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app>
<error-page>
<error-code>404</error-code>
<location>/error404.html</location>
</error-page>
</web-app>

15. taglib元素
taglib元素描述JSP定制标记库?/p>

<!ELEMENT taglib (taglib-uri, taglib-location)>
<!ELEMENT taglib-uri (#PCDATA)>
<!ELEMENT taglib-location (#PCDATA)>

taglib-uri元素是用于Web应用中的标记库的URI。taglib-uri元素的gWEB-INF目录相对应?br /> taglib-location元素包含一个位|,其中可以扑ֈ标记库的标记库描q符(TLD)文g?/p>

16. resource-env-ref元素
可以使用resource-env-ref元素来指定对理对象的servlet引用的声明,该对象与servlet环境中的资源相关联?/p>

<!ELEMENT resource-env-ref (description?, resource-env-ref-name,
resource-env-ref-type)>
<!ELEMENT resource-env-ref-name (#PCDATA)>
<!ELEMENT resource-env-ref-type (#PCDATA)>

resource-env-ref-name元素是资源环境引用的名称Q其gؓservlet代码中用的环境的入口名U。该名称是一个与java:comp/env相对应的Java命名和目录接?JNDI)名称Q该名称在整个Web应用中必L惟一的?/p>

17. resource-ref元素
resource-ref元素用于指定对外部资源的servlet引用的声明?/p>

<!ELEMENT resource-ref (description?, res-ref-name,
res-type, res-auth, res-sharing-scope?)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT res-ref-name (#PCDATA)>
<!ELEMENT res-type (#PCDATA)>
<!ELEMENT res-auth (#PCDATA)>
<!ELEMENT res-sharing-scope (#PCDATA)>

resource-ref子元素的描述如下Q?br /> ?res-ref-name是资源工厂引用名的名U。该名称是一个与java:comp/env上下文相对应的JNDI名称Qƈ且在整个Web应用中必L惟一的?br /> ?res-auth表明Qservlet代码通过~程注册到资源管理器Q或者是容器代表servlet注册到资源管理器。该元素的值必MؓApplication或Container?br /> ?res-sharing-scope表明Q是否可以共享通过l定资源理器连接工厂引用获得的q接。该元素的值必MؓShareable(默认?或Unshareable?/p>

18. security-constraint元素
部v描述W中的security-constraint元素允许不通过~程可以限制对某个资源的访问?/p>

<!ELEMENT security-constraint (display-name?,
web-resource-collection+,
auth-constraint?, user-data-constraint?)>
<!ELEMENT display-name (#PCDATA)>
<!ELEMENT web-resource-collection (web-resource-name, description?,
url-pattern*, http-method*)>
<!ELEMENT auth-constraint (description?, role-name*)>
<!ELEMENT user-data-constraint (description?, transport-guarantee)>

(1) web-resource-collection元素

web-resource-collection元素标识需要限制访问的资源子集。在web-resource-collection元素中,可以定义URL模式和HTTPҎ。如果不存在HTTPҎQ就安全约束应用于所有的Ҏ?/p>

<!ELEMENT web-resource-collection (web-resource-name, description?,
url-pattern*, http-method*)>
<!ELEMENT web-resource-name (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT http-method (#PCDATA)>

web-resource-name是与受保护资源相兌的名U。http-method元素可被赋予一个HTTPҎQ比如GET和POST?/p>

(2) auth-constraint元素

auth-constraint元素用于指定可以讉K该资源集合的用户角色。如果没有指定auth-constraint元素Q就安全约束应用于所有角艌Ӏ?/p>

<!ELEMENT auth-constraint (description?, role-name*)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT role-name (#PCDATA)>

role-name元素包含安全角色的名U?/p>

(3) user-data-constraint元素

user-data-constraint元素用来昄怎样保护在客L和Web容器之间传递的数据?/p>

<!ELEMENT user-data-constraint (description?, transport-guarantee)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT transport-guarantee (#PCDATA)>

transport-guarantee元素必须h如下的某个|
?NONEQ这意味着应用不需要传输保证?br /> ?INTEGRALQ意味着服务器和客户端之间的数据必须以某U方式发送,而且在传送中不能改变?br /> ?CONFIDENTIALQ这意味着传输的数据必L加密的数据?/p>

在大多数情况下,安全套接字层(SSL)用于INTEGRAL或CONFIDENTIAL?/p>

19. login-config元素
login-config元素用来指定所使用的验证方法、领域名和表单验证机制所需的特性?/p>

<!ELEMENT login-config (auth-method?, realm-name?,
form-login-config?)>
<!ELEMENT auth-method (#PCDATA)>
<!ELEMENT realm-name (#PCDATA)>
<!ELEMENT form-login-config (form-login-page, form-error-page)>

login-config子元素的描述如下Q?br /> ?auth-method指定验证Ҏ。它的gؓ下面的一个:BASIC、DIGEST、FORM?CLIENT-CERT
?realm-name指定HTTP Basic验证中用的领域名?br /> ?form-login-config指定Z表单的登录中应该使用的登录页面和出错面。如果没有用基于表单的验证Q则忽略q些元素。这个元素的定义如下Q其中form-login-page用于指定昄d面的资源\径, form-error-page则用于指定用L录失败时昄出错面的资源\径。这两个面路径都必Ma/开始,q与应用目录相对应?br /> <!ELEMENT form-login-config (form-login-page, form-error-page)>
<!ELEMENT form-login-page (#PCDATA)>
<!ELEMENT form-error-page (#PCDATA)>

20. security-role元素
security-role元素指定用于安全U束中的安全角色的声明?/p>

<!ELEMENT security-role (description?, role-name)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT role-name (#PCDATA)>

21. env-entry元素
env-entry元素用于指定应用环境入口?/p>

<!ELEMENT env-entry (description?, env-entry-name, env-entry-value?,
env-entry-type)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT env-entry-name (#PCDATA)>
<!ELEMENT env-entry-value (#PCDATA)>
<!ELEMENT env-entry-type (#PCDATA)>

env-entry-name元素包含Web应用环境入口的名U。该名称是一个与java:comp/env相对应的JNDI名称Qƈ且在整个应用中必L惟一的?br /> env-entry-value元素包含Web应用环境入口的倹{该值必L一个字W串cd的|q且对于指定cd的构造函数是有效的,该函数获得一?String参数Q或者对于java.lang.Character是有效的Qjava.lang.Character对象是一个字W?br /> env-entry-type元素包含环境入口值的完全限定的JavacdQ该环境入口值是Web应用代码所期望的。这个env-entry-type元素的值必L如下之一Q?/p>

java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.String
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double

22. ejb-ref元素
ejb-ref元素用于指定EJB的home接口的引用?/p>

<!ELEMENT ejb-ref (description?, ejb-ref-name, ejb-ref-type, home,
remote, ejb-link?)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT ejb-ref-name (#PCDATA)>
<!ELEMENT ejb-ref-type (#PCDATA)>
<!ELEMENT home (#PCDATA)>
<!ELEMENT remote (#PCDATA)>
<!ELEMENT ejb-link (#PCDATA)>

ejb-ref-name包含EJB引用的名U。EJB引用是servlet环境中的一个入口,它与java:comp/env相对应。这个名U在Web应用中必L惟一的。ؓ求一致性,推荐您的ejb-ref-name元素名称以ejb/开始?br /> ejb-ref-name元素包含引用的EJB的期望类型。这个值必LEntity或Session?br /> home元素包含EJB的home接口的完全限定的名称。remote元素包含EJB的remote接口的完全限定的名称?br /> ejb-ref或ejb-local-ref元素中用到的ejb-link元素可指定EJB 引用被链接到另一个EJB。Ejb-link元素的值必L同一个J2EE应用单元中某个EJB的ejb-name。Ejb-link元素中的名称可以由指定ejb-jar的\径名l成Q该ejb-jar包含引用的EJB。目标bean的名U添加在后面Q用字符a# 与\径名分隔。\径名与包含引用EJB的Web应用的WAR相对应。这允许我们惟一标识h相同ejb-name的多个企业bean?/p>

23. ejb-local-ref元素
ejb-local-ref元素用于声明对EJB的本地home的引用?/p>

<!ELEMENT ejb-local-ref (description?, ejb-ref-name, ejb-ref-type,
local-home, local, ejb-link?)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT ejb-ref-name (#PCDATA)>
<!ELEMENT ejb-ref-type (#PCDATA)>
<!ELEMENT local-home (#PCDATA)>
<!ELEMENT local (#PCDATA)>
<!ELEMENT ejb-link (#PCDATA)>

local元素包含EJB本地接口的完全限定的名称。Local-home元素包含EJB本地home接口的完全限定的名称?/p>

]]>
վ֩ģ壺 һ˿wwwѸĻ| ޹ŷۺ997þ| ߹ۿѹۿ| Ʒѹһ| ޿ƬƵ | ٸ36P| òѸԴվ| AVһ | ޾Ʒһþ| 337Pձŷ޴󵨾Ʒ| ѹۿƵ| ɫav| av2019| վ| ʥһ| Ӱȷѹۿ| վɫƵѹۿ45| ձһһһ | ij˾þþþӰԺѹۿ| lƷ߹ۿ| žƷƵվ | 91ۺ| Ʒר| ŮƵվ| ޾Ʒ뾫ƷmV߹ۿ| þƵ| ɫվWWW| VAۺVAVA| þerƷѹۿ2| У԰ɫ༤| ޾ƷywӰԺ | Ƶѹۿ| ȫAһëƬ| ձvaҹĻһ| žžžƷƵ| һһ60Ƶ| ޴ɫС˵| ޸Ƶ| 91ѹԲ| һɫëƬѿ| ޳avƬ|