??xml version="1.0" encoding="utf-8" standalone="yes"?>
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" />
]]>
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### </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### </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### </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
2.配置tomcat下的conf下的context.xml文g,?lt;context></context>之间dq接池如?
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
username="root"
password="root"
maxActive="100"
maxIdle="30"
maxWait="10000" />
3.配置你的应用下的web.xml中的<web-app></web-app>之间加入: xml 代码
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysqlx</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4.大功告成,不用在原来的server.xml里面配置?下面可以编写测试程序了,q个|上很多了,主要的就上面,当然要把q接驱动E序都放?span style="color: #ff0000">tomcat6下的lib
下面.试代码如下: 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>
get(Object key)q回与指定键兌的?/p>
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>
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>
用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语句
?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>
<?xml version="1.0" encoding="ISO-8859-1"?>
q个头指定了XML的版本号以及所使用的编码。头的下面是DOCTYPE声明Q?/p>
<!DOCTYPE web-app q段代码指定文gcd定义(DTD)Q可以通过它检查XML文档的有效性。下面显C的<!DOCTYPE>元素有几个特性,q些Ҏ告诉我们关于DTD的信息: 注意Q?br />
在部|描q符中, <!--…-->用于注释?br />
部v描述W的根元素是web-app。DTD文g规定Qweb-app元素的子元素的语法如下: <!ELEMENT web-app (icon?, display-name?, description?, 正如您所看到的,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元素 <!ELEMENT icon (small-icon?, large-icon?)> icon元素包括两个可选的子元素:small-icon子元素和large-icon子元素。文件名是Web应用归档文g(WAR)的根的相对\径?br />
部v描述Wƈ没有使用icon元素。但是,如果使用XML工具~辑部v描述W,XML~辑器可以用icon元素?/p>
2. display-name元素 <!ELEMENT display-name (#PCDATA)> 下面是一个含有display-name元素的部|描q符Q?/p>
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app> 3. description元素 <!ELEMENT description (#PCDATA)> 4. distributable元素 <!ELEMENT distributable EMPTY> 例如Q下面是一个含有distributable元素的部|描q符的例子: <?xml version="1.0" encoding="ISO-8859-1"?> <web-app> 5. context-param元素 <!ELEMENT context-param (param-name, param-value, description?)> param-name 子元素包含有参数名,而param-value子元素包含的是参数倹{作为选择Q可用description子元素来描述参数?/p>
下面是一个含有context-param元素的有效部|描q符Q?/p>
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app> 6. filter元素 <!ELEMENT filter (icon?, filter-name, display-name?, description?, 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"?> <web-app> 7. filter-mapping元素 <!ELEMENT filter-mapping (filter-name, (url-pattern | servlet-name))> filter-name值必d应filter元素中声明的其中一个过滤器名称。下面是一个含有filter-mapping元素的部|描q符Q?/p>
<?xml version="1.0" encoding="ISO-8859-1"> <web-app> <filter-mapping> 8. listener元素 <!ELEMENT listener (listener-class)> 下面是一个含有listener元素的有效部|描q符Q?/p>
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app> 9. servlet元素 <!ELEMENT servlet (icon?, servlet-name, display-name?, description?, 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如下: (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如下: role-link元素用来安全角色引用链接到已定义的安全角色。role-link元素必须含有已经在security-role元素中定义的一个安全角色的名称?/p>
(5) Faces Servlet的servlet元素 ?JSF应用中,需要ؓFaces Servlet定义一个servlet元素Q如下所C: <?xml version="1.0"?> <web-app> <!-- Faces Servlet --> <!-- Faces Servlet Mapping --> </web-app> 10. seervlet-mapping 元素 <!ELEMENT servlet-mapping (servlet-name, url-pattern)> 在前面的“servlet元素”一节中已经介绍了用servlet-mapping元素的例子?/p>
11. session-config元素 <!ELEMENT session-config (session-timeout?)> session-timeout元素用来指定默认的会话超时时间间隔,以分钟ؓ单位。该元素值必Mؓ整数。如果session-timeout元素的gؓ零或负数Q则表示会话永q不会超时?/p>
下面是一个部|描q符Q在用户最q访问HttpSession对象30分钟后,HttpSession对象默认为无效: <?xml version="1.0" encoding="ISO-8859-1"?> <web-app> 12. mime-mapping元素 <!ELEMENT mime-mapping (extension, mime-type)> extension元素用来描述扩展名。mime-type元素则ؓMIMEcd?/p>
举个例子Q下面的部v描述W将扩展名txt映射为text/plainQ?/p>
<?xml version="1.0" encoding="ISO-8859-1"?> 13. welcome-file-list元素 <!ELEMENT welcome-file-list (welcome-file+)> 举个例子说明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"?> <web-app> 如果用户键入的URL不包含servlet名称、JSP面或其他资源,则不会在应用目录中找到main.html文gQ这时就会显Cjsp目录下的welcome.jsp文g?/p>
14. error-page元素 <!ELEMENT error-page ((error-code | exception-type), location)> error-code元素包含HTTP错误代码。exception-type是Java异常cd的完全限定的名称。location元素是Web应用中的资源相对于应用目录的路径。location的值必Ma/开始?/p>
举个例子Q每ơ生HTTP 404错误代码Ӟ下面的部|描q符可Web容器昄error404.html面Q?/p>
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
?
?
?
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*)>
icon元素用来指定GIF格式或JPEG格式的小图标(16×16)或大图标(32×32)的文件名?/p>
<!ELEMENT small-icon (#PCDATA)>
<!ELEMENT large-icon (#PCDATA)>
如果使用工具~辑部v描述W,display-name元素包含的就是XML~辑器显C的名称?/p>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<display-name>Online Store Application</display-name>
</web-app>
可以使用description元素来提供有关部|描q符的信息。XML~辑器可以用description元素的倹{?/p>
可以使用distributable元素来告诉servlet/JSP容器Q编写将在分布式Web容器中部|的应用Q?/p>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<distributable/>
</web-app>
context-param元素含有一对参数名和参数|用作应用的servlet上下文初始化参数。参数名在整个Web应用中必L惟一的?/p>
<!ELEMENT param-name (#PCDATA)>
<!ELEMENT param-value (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<context-param>
<param-name>jdbcDriver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
</web-app>
filter元素用于指定Web容器中的qo器。在h和响应对象被servlet处理之前或之后,可以使用qo器对q两个对象进行操作。利用下一节介l?的filter-mapping元素Q过滤器被映到一个servlet或一个URL模式。这个过滤器的filter元素和filter-mapping 元素必须h相同的名U?/p>
filter-class, init-param*)>
<!ELEMENT filter-name (#PCDATA)>
<!ELEMENT filter-class (#PCDATA)>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<filter>
<filter-name>Encryption Filter</filter-name>
<filter-class>com.branysoftware.EncryptionFilter</filter-class>
</filter>
</web-app>
filter-mapping元素用来声明Web应用中的qo器映。过滤器可被映射C个servlet或一个URL模式。将qo器映到一?servlet中会造成qo器作用于servlet上。将qo器映到一个URL模式中则可以过滤器应用于Q何资源,只要该资源的URL与URL模式?配。过滤是按照部v描述W的filter-mapping元素出现的顺序执行的?/p>
<!ELEMENT filter-name (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT servlet-name (#PCDATA)>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<filter>
<filter-name>Encryption Filter</filter-name>
<filter-class>com.brainysoftware.EncryptionFilter</filter-class>
</filter>
<filter-name>Encryption Filter</filter-name>
<servlet-name>EncryptionFilteredServle
</filter-mapping>
</web-app>
listener元素用来注册一个监听器c,可以在Web应用中包含该cR用listener元素Q可以收C件什么时候发生以及用什么作为响应的通知?/p>
<!ELEMENT listener-class (#PCDATA)>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<listener>
<listener-class>MyAppListener</listener-class>
</listener>
</web-app>
servlet元素用来声明一个servlet?/p>
(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)>
?
<!ELEMENT security-role-ref (description?, role-name, role-link)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT role-name (#PCDATA)>
<!ELEMENT role-link (#PCDATA)>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
seervlet-mapping 元素URL模式映射到某个servlet?/p>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
session-config元素为Web应用中的javax.servlet.http.HttpSession对象定义参数?/p>
<!ELEMENT session-timeout (#PCDATA)>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
mime-mapping元素mimecd映射到扩展名?/p>
<!ELEMENT extension (#PCDATA)>
<!ELEMENT mime-type (#PCDATA)>
<!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>
当用户在览器中输入的URL不包含某个servlet名或JSP面Ӟwelcome-file-list元素可指定显C的默认文g?/p>
<!ELEMENT welcome-file (#PCDATA)>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
<welcome-file-list>
<welcome-file>main.html</welcome-file>
<welcome-file>jsp/welcome.jsp</welcome-file>
</welcome-file-list>
</web-app>
error-page元素用于一D错误代码或一个异常类型映到Web应用中的资源路径Q从而在产生Ҏ的HTTP错误或指定的Java异常Ӟ显C相关的资源?/p>
<!ELEMENT error-code (#PCDATA)>
<!ELEMENT exception-type (#PCDATA)>
<!ELEMENT location (#PCDATA)>