2006年12月7日
錯誤信息如下:
java.lang.NoClassDefFoundError: sun.management.ManagementFactory
處理:
把sun.management.ManagementFactory替換成java.lang.management.ManagementFactory
因為ibm的jdk沒有sun.management.ManagementFactory這個對象
錯誤信息如下:
超過最大長度限制
處理:
只能插入666個中文字符。
或者更新到最新的oracle驅動包
1:derby.jar包可能沖突,需刪除項目中的該包
2:MBean調用問題
Websphere的MBean注冊路徑包括cell,nodeName和processName,具體可以銅鼓jconsole連接來查看MBean注冊的全路徑。這三個值可以通過Websphere的com.ibm.websphere.management.AdminServiceFactory這個對象來獲取,spring中的配置如下:
<!--
用于獲取websphere的MBean名稱的cell,node,process -->
<bean id="adminService" class="com.ibm.websphere.management.AdminServiceFactory" factory-method="getAdminService"/>
<bean id="adminService.cellName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
<bean id="adminService.nodeName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
<bean id="adminService.processName" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
<bean id="websphereNamingStrategy" class="com.des.engine.mbean.WebsphereNamingStrategy">
<property name="cellName" ref="adminService.cellName"/>
<property name="nodeName" ref="adminService.nodeName"/>
<property name="processName" ref="adminService.processName"/>
</bean>
WebsphereNamingStrategy為自己創(chuàng)建的對象就包括那三個屬性
3:安全問題
出現(xiàn)如下錯誤,Caused by: javax.management.JMRuntimeException: ADMN0022E: 由于憑證不足或憑證為空,無法對 org.apache.servicemix:Name=ServiceMgtImpl,cell=dvpbNode02Cell,Type=SystemService,ContainerName=ServiceMix,node=dvpbNode02,process=server1 MBean 的 retrieveServiceList 操作進行訪問。
該問題是因為設置了安全控制,把控制臺的【安全性->安全管理、應用程序和基礎結構】里面的所以安全配置都去掉,然后重新啟動服務器主機(注意是重啟主機,不然安全設置不起作用),再啟動websphere服務應該就可以了,還有就是servicemix的應用要跟websphere一起啟動,不要等websphere啟動后再到控制臺啟動
錯誤信息如下:
jdbc在操作oracle海量數(shù)據(jù)的時候用ResultSet獲取所有的返回數(shù)據(jù)出現(xiàn)內存溢出
處理:
出錯的原因是ResultSet用的是可滾動結果集,正常情況下ResultSet是指針指向數(shù)據(jù)庫的數(shù)據(jù),本身是不存儲數(shù)據(jù)庫的數(shù)據(jù)的,默認情況下就算是提交的sql能查詢處上億條的數(shù)據(jù)也是不消耗內存的,但是如果用的是可滾動結果集的ResultSet情況就不一樣了,ORACLE 是不支持可滾動結果集的,那么我們用JDBC得到一個可滾動的結果集就是由JDBC自己支持的,也就是說結果集是要存放在內存中的,所以在海量數(shù)據(jù)的情況下也就是要消耗大量內存的,因此造成內存溢出也就是正常的了,所以如果是海量數(shù)據(jù)的話就不要用可滾動結果集就可以了。
錯誤信息如下:
com.ibm.websphere.ce.cm.StaleConnectionException: [ibm][db2][jcc][t4][2030][11211]
檢測到了通信錯誤。所使用的通信協(xié)議:TCP/IP。"n所使用的通信 API:SOCKETS。
檢測到錯誤的位置:Reply.fill()。"n用于檢測錯誤的通信功能:InputStream.read()。
特定于協(xié)議的錯誤代碼數(shù)據(jù)不足、* 和 0。消息:null"n
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)"n
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)"n at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:45)"n
at java.lang.reflect.Constructor.newInstance(Constructor.java:522)"n
at com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapExceptionHelper
(GenericDataStoreHelper.java:523)"n
at com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapException(GenericDataStoreHelper.java:578)"n
at com.ibm.ws.rsadapter.jdbc.WSJdbcUtil.mapException(WSJdbcUtil.java:909)"n
at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.executeQuery(WSJdbcStatement.java:898)"n
at com.newland.bi.util.db.DBUtil.executeQuery(Unknown Source)"n
at com.newland.bi.util.db.DBUtil.executeSql(Unknown Source)"n
at com.newland.bi.dao.jdbc.DaoImpl.executeQuery(DaoImpl.java:64)"n
at com.newland.bi.service.report.exp.dao.ReportExpDao.getExpList(ReportExpDao.java:72)"n
at com.newland.bi.service.report.exp.manage.ReportExpMgt.runExport(ReportExpMgt.java:91)"n
at com.newland.bi.service.report.exp.servlet.ReportExp1Servlet$1.run(ReportExp1Servlet.java:97)"n
at java.util.TimerThread.mainLoop(Timer.java:537)"n at java.util.TimerThread.run(Timer.java:487)"n
處理:
出錯的原因可能是防火墻問題,在websphere應用服務器和數(shù)據(jù)庫服務器之間是否存在防火墻
防火墻是否會設置多久沒活動的連接就自動斷開掉,如果是這樣的話就會有問題,因為websphere上面的數(shù)據(jù)庫連接池可能有一段時間沒連接而被防火墻斷掉了
但對于連接池本身根本就不知道該連接是否還可用,所以web應用從連接池獲取的連接可能就是已經斷開的了,所以就可能會出現(xiàn)日記中的錯誤問題
schedule和scheduleAtFixedRate的區(qū)別在于,如果指定開始執(zhí)行的時間在當前系統(tǒng)運行時間之前,scheduleAtFixedRate會把已經過去的時間也作為周期執(zhí)行,而schedule不會把過去的時間算上。
錯誤信息如下:
Caused by: java.lang.ClassNotFoundException: org.apache.axis.soap.MessageFactoryImpl
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:50)
... 10 more
處理:
原因是調用了axis的 soap.MessageFactoryImpl,cxf應該用的是sun的
在注冊安全攔截器之前執(zhí)行下面代碼就可以了
System.setProperty("javax.xml.soap.MessageFactory", "com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl");
我們寫程序的時候可能會想用open或者<a>來下載一個txt文件,但我們會發(fā)現(xiàn)我們用瀏覽器下載這個txt文件的時候老是在瀏覽器里面直接打開了,而不是提示下載,這樣的話如果txt文件的內容非常多的話肯定是不行的,可能就會導致瀏覽器掛掉,客戶機器死機的問題
現(xiàn)整理了個解決辦法,代碼如下:
1.下載頁面
open(action執(zhí)行頁面,'iframeName','');
2.action執(zhí)行頁面
<a id="tempB" style="display:none" href="#" onclick=""> </a>
<iframe width=0 height=0 id="hideIframe" name="hideIframe"></iframe>

<script>
var n=0;

function go(url)
{
n==0?new function()

{
frames("hideIframe").location=url,n=1
}:null;
document.all("hideIframe").readyState!="complete"?setTimeout(go,10):so();
function so()

{
frames("hideIframe").document.execCommand("SaveAs"),n=0
};
}
var tempB = document.getElementById("tempB");
<%

if(path.toLowerCase().indexOf(".txt")>=0)
{
%>

tempB.attachEvent('onclick',function()
{go('<%=request.getContextPath()+"/tempfile/1.txt">');});
<%

}else
{
%>

tempB.attachEvent('onclick',function()
{open('<%=request.getContextPath()+"/tempfile/1.xls">','','');});
<%
}
%>
tempB.click();
</script>
websphere部署war應用失敗正常原因是web.xml的節(jié)點定義循序問題,或者一些空格,字符原因造成的
可能先定義完所有的servlet后再定義所有的servlet mapping就沒問題了
那個轉向后的頁面已經有用gb2312的編碼了
可能原因是在java類里面調用了((HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse()).getWriter().write("");
然后再轉向某個頁面,這樣可能導致編碼格式沖突,導致亂碼
可以先給resonse設置下編碼格式,然后在write
HttpServletResponse httpServletResponse = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
httpServletResponse.setContentType("text/html; charset=gb2312");
httpServletResponse.setCharacterEncoding("gb2312");
httpServletResponse.getWriter().write("");
這樣應該就可以解決了
C:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\config\cells\app-bi2Node01Cell\applications\appname.ear\deployments\appname\appname.war\WEB-INF\web.xml 該目錄下的web.xml的修改才是有效
應用程序發(fā)布的目錄下的那個web.xml添加的servlet配置是無效的
可能原因:
1: form表單中的控件沒有定義name屬性
2: form表單中的控件被設置成disabled
3: form表單的enctype="multipart/form-data"是一種用于上傳文件的表單
|
解決方法:
對于第三種情況我們直接request.getParameter來取參數(shù)值是取不到的
我們可以借用apache的上傳組件來解決
用到jar包commons-fileupload-1.1.1.jar
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import
org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
*獲取各種類型表單的表單參數(shù)
*@paramrequest HttpServletRequest請求對像
* @paramparamName 參數(shù)名
*@return
*@throwsFileUploadException
*/
publicstatic String
getParameterValue(HttpServletRequest request,String paramName) throws
FileUploadException{
boolean
isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart==true){
FileItemFactory
factory = new DiskFileItemFactory();
ServletFileUpload
upload = new ServletFileUpload(factory);
List
fileItemList = upload.parseRequest(request);
if(fileItemList!=null){
for(Iterator itr=fileItemList.iterator();itr.hasNext();){
FileItem fileItem = (FileItem)itr.next();
if(fileItem.getFieldName().equalsIgnoreCase(paramName)){
return new
String(fileItem.getString().getBytes("ISO8859-1"))//中文轉碼
}
}
}
}else{
return new String(request.getParameter(paramName).getBytes("ISO8859-1"))//中文轉碼
}
return"";
}
|
1.定義一個標簽要用到兩個java類,這個跟jsp的自定義標簽有點不一樣
第一個類繼承UIComponentTag, 用于定義標簽的屬性和設置標簽的所有屬性值到控件的map屬性attributes或valueBinding中
第二個類繼承UIInput或者UIOutput,用于渲染標簽的內容,真正打印標簽內容的地方就在這里
2.這兩個類是怎么聯(lián)系的
我們需要像定義jsf的bean的影射文件一樣,在faces-config.xml或者自己定義的xml文件里面定義第二個類
如:
<faces-config>
<!--分頁標簽-->
<component>
<component-type>pageTag</component-type>
<component-class>com.jsf.PageComponent</component-class>
</component>
</faces-config>
然后第一個類要實現(xiàn)父類的一個方法 public String getComponentType();從這里返回一個字符串pageTag,這樣就跟第二個類聯(lián)系起來了

3.標簽屬性的定義
標簽屬性的定義一般都是可轉化為字符串的類型的,除非你還是用<%=rowList%>這種jsp賦值的方式
別以為你定義的一個List類型的屬性可以用jsf的EL表達式可以直接賦值進來,EL表達式傳進來以后屬性接收的就是這一串EL表達式
所以就是說你的屬性就是要字符串類型的

4.那么jsf自定義標簽是怎么接收EL表達式綁定的列表的
先通過父類的isValueReference(屬性值),來判斷該屬性的值是否是一個EL的表達式
如果是則通過獲取綁定值得方式把真正的屬性的值設置到標簽父類的valueBinding對像中
否則直接把屬性的值添加到標簽父類的attributes對像中
if (isValueReference(屬性值)) {
javax.faces.el.ValueBinding vb = Util.getValueBinding(value.toString());
component.setValueBinding(name, vb); //component就是標簽對像,name就是標簽的屬性名稱
} else {
component.getAttributes().put(name, 屬性值);
}
這就是個設置屬性值的過程,可以在第1點說的第一個類里面的protected void setProperties(UIComponent component)方法
5.現(xiàn)在知道標簽屬性值的作用了嗎
是的標簽屬性值只不過是起個作用而已,而不是我們真正所要的值
也就是說我們是不能從這些屬性中直接取值的
6.那么我們怎么取屬性的真正的值呢
可以先從第4點說的標簽父類的attributes對像中取值
如果取不到值那就到標簽父類的valueBinding對像中取值
說白了就是,通過第4步我們屬性的真正的值不是放在attributes就是在valueBinding中
Object obj = component.getAttributes().get(name); //component就是標簽對像,name就是標簽的屬性名稱
if (obj == null) {
ValueBinding vb = component.getValueBinding(name);
if (vb != null) {
return vb.getValue(context);
} else {
return null;
}
}
這個過程就是取屬性值的過程,在第1點說的第二個類里面進行
7.現(xiàn)在屬性值也可以取到了,那么我們要怎么打印標簽的內容呢
我們可以在第二個類的encodeBegin或者encodeEnd中進行
public void encodeBegin(FacesContext context) throws IOException
public void encodeEnd(FacesContext context) throws IOException
取屬性值的過程也可以在這里進行,取完值后就是把值組裝到標簽內容的相應位置中就完了
基本上就是這幾點

在本地tomcat5中這樣沒問題
request.getRealPath("/")+"report/config/configFile/"+priv_id+".xml"
但是發(fā)布到websphere6后就出問題了
要改成
request.getRealPath("/")+"/report/config/configFile/"+priv_id+".xml"
就是report前要加個"/" 斜杠,加了后tomcat5下也是正確的
1.jdk環(huán)境問題
jdk環(huán)境要改為ibm 的jdk 5.0, 不然連接不上數(shù)據(jù)庫, 數(shù)據(jù)庫連接池的連接失敗,c3p0連接池的連接失敗,目前還是默認的方式采用應用服務器的連接池,像tomcat就采用tomcat配置的連接池
eclipse 的開發(fā)時用的jre如果修改為ibm的以后,有可能會導致編譯不了,這要修改編輯器java類型的編碼為gb2312就可以了,genaral->content type –java file
2. 程序中編寫sql時的用戶模式問題
用戶模式要用公共常量,以便修改
不同用戶模式之間的表的訪問通過授權來解決
3. db2數(shù)據(jù)庫的函數(shù)問題
程序中的添加和修改時間的地方的日期函數(shù)都要修改成
Date(“2007-01-01”)就是字符串中間有帶中杠的
日期轉字符串要把原先的to_char改成char(int(2007-01-01))
Kpi的消息串在配置中在取權限priv_id的字符串要加上char(int(priv_id)),如果直接char(priv_id)會多出一個點號
4. oracle樹形結構的查詢移植到db2存在問題
菜單查詢中,有存在層次level的沒實現(xiàn),目前我先通過自己寫的函數(shù)實現(xiàn),但存在問題跟沒有層次的實現(xiàn)方式一樣存在問題
因為通過in的方式,in的存在字段是有限的到時候數(shù)據(jù)量變多了,sql就會執(zhí)行失敗,可以考慮臨時表來解決
5. 序列表seq的長度問題
所有的序列表的序列長度db2是有限制的,好像不能大于8位,這樣序列的字段都要做修改,而且不能重復,要進一步確認修改
7. 系統(tǒng)權限移植問題
地區(qū)編碼的字段從數(shù)值型改為字符串類型,很辛苦,建議以后程序的bean的屬性都用字符串來定義,避免程序移植的類型修改的問題
8. erwin數(shù)據(jù)模型問題
數(shù)據(jù)模型中的部分表沒有及時更新,跟開發(fā)時用的表有出入,以后數(shù)據(jù)模型要及時更新
9. 建表的sql語句問題
建表的sql中
number(12) 這樣的都要改成decimal(12,0)
varchar2都要改成varchar
有時候我們在表單提交后卻獲取不到控件的值
可能原因:
1. 控件少了name屬性
2.控件被設置成disabled
后臺數(shù)據(jù)處理完成的時候設置一個處理完成的session標志
前臺通過發(fā)送ajax請求設置成功標志的session的頁面,如果session的成功標志為true則數(shù)據(jù)處理完成,關閉正在處理的進度條圖片,否則繼續(xù)發(fā)送ajax請求,顯示正在處理的進度條圖片,當然也可以通過后臺返回數(shù)據(jù)處理完成的百分比,來制作精確的進度條
當我們在做動態(tài)生成checkbox和動態(tài)設置checkbox的checked屬性的時候要注意
只有checkbox在頁面生成以后設置checkbox的checked屬性才有效,否則是無效的
也就是說不要在create checkbox后就設置checked屬性,要等到該checkbox已經append到頁面中了在來設置checked屬性這樣才可以
1) 使用response.sendredirect重定向是沒辦法通過request.setAttribute來傳遞對象到另外一個頁面的
但我們可以通過轉發(fā)的方式來實現(xiàn)request.getRequestDispatcher("test2.jsp").forward(request,response)
這也是struts默認的頁面跳轉方式,這就是為什么我們可以在action里面request.setAttribute然后在頁面里request.getAttribute
2) 使用response.sendredirect重定向要記得在后面加上return不然后面的語句還是會繼續(xù)往下執(zhí)行的,還有就是response.sendredirect之前最好不要有任何的輸出語句包括html不然可能會重定向失敗
最近我還遇到一個比較奇怪的問題就是response.sendredirect失敗,因為我的端口是通過交換機來轉換的所以可能就是在這里重定向不過去了,所以建議以后大家都使用request.getRequestDispatcher("test2.jsp").forward(request,response)這種方式就不會錯了,當然也可以用jsp標簽的forward
摘要: 1) ICache.java 緩存接口
package com.jgao.cache;/** *//** * 緩存接口 * @author jgao * */public interface ICache {  ...
閱讀全文
??? 基本的思想和步驟都在了,主要就是遞歸
??? /**
???? * 傳入級數(shù)返回存放該級數(shù)下所有組織列表的列表
???? * @param lever int 組織級數(shù)
???? * @return List<List> 存放組織列表
???? */
??? public List<List> getTreeLeverNode(int lever) {
??????? String sqlstr = "select? ID from?table1 where PARENT_ID=0";
??????? Result ret = Dao.executeQuery(sqlstr);
??????? List<List> list = new Vector<List>();
??????? List rslist = new Vector();
??????? List<String> nodeList = new Vector<String>();
??????? for (int i = 0; i < ret.Length(); i++) {
??????????? rslist = getNextNode(Integer.parseInt(ret[i]
??????????????????????? .toString()), lever - 1, nodeList);
??????????????? list.add(rslist);
??????? }
??????? return list;
??? }
??? /**
???? * 返回存放該級數(shù)下所有組織的列表
???? * @param reqParentid 請求傳入的父節(jié)點ID
???? * @param lever 組織級數(shù)
???? * @param list 存放該級數(shù)下所有組織的列表
???? * @return List<String> 存放組織
???? */
??? public List<String> getNextNode(int reqParentid, int lever, List list) {
??????? String sqlstr = "select? ID from?table1 where PARENT_ID="
??????????????? + reqParentid;
??????? DBResult ret = super.executeQuery(sqlstr);
??????? List rslist = new Vector();
??????? lever = lever - 1;
??????? if (lever > 0) {
???????????for (int i = 0; i < ret.Length(); i++) {
?????????????????rslist = getNextNode(Integer.parseInt(ret[i]
??????????????????????? .toString()), lever , nodeList);
??????????????? list.add(rslist);
???????????}
??????? } else {
??????????? for (int i = 0; i < ret.Length(); ; i++) {
????????????????list.add(ret[i].toString());
??????????? }
??????? }
??????? return list;
??? }
剛使用erwin時在連接oracle9i數(shù)據(jù)庫時的那個連接串我一直用jdbc連接oracle的那個格式,所以一直連都連不上
一直出現(xiàn)“內部錯誤,hostdef擴展名不存在”,很是郁悶,不知大家有沒遇到
后來查了一下,才知道本地的話要進行本地的Net服務名配置
配置工具在開始->oracle->Configuration and Migration Tools->NET CONFIGUATION ASSISTANT
然后選擇本地的Net服務名配置,在配置到服務名的時候把你的數(shù)據(jù)庫名稱添進去,然后往下到完成就行了
也可以直接編輯tnsnames.ora,如下圖:

接下來在erwin進行正向或者反向工程的操作界面,提示連接數(shù)據(jù)庫的那個連接字符串里輸入你的那個服務名就行了,當然用戶名密碼還是要跟之前的一樣,如下圖:

/**
*臨時寫的偽代碼
*/
//獲取第N級的所有節(jié)點
public list getTreeLeverNode(int lever)
??rs0 = select id from menu where parentid is null;? //先從數(shù)據(jù)庫取出第一級的所有節(jié)點
??if(lever<=1)
? return rs0
? //循環(huán)第一級的節(jié)點遞歸取下面的節(jié)點
??for(int i=0; i<rs0.length; i++){
???rslist = getNextNode(rs0[i],lever-1);
???list.add(rslist);
??}
??return rs1;
}
public list getNextNode(int reqParentid,int lever){
??rs2 = select id from menu where parentid = reqParentid;
??lever = lever -1;
??if(lever>0){
???for(int i=0; i<rs2.length; i++){
????rs2 = getNextNode(rs2[i],lever);
????list.add(rs2);
???}
??}
??return rs2;
}
??????1.當執(zhí)行一個功能的時候需要執(zhí)行多個更新操作,如:插入多個對象,刪除多個對象等,就可能存在執(zhí)行一個更新操作成功之后下一個更新操作失敗,那么這個功能的執(zhí)行就算是失敗的,可是卻向數(shù)據(jù)庫添加或刪除了不完全的相關數(shù)據(jù),所以就會出現(xiàn)臟數(shù)據(jù)
??????解決方法:
??????1) 通過事物控制讓多個執(zhí)行語句一起提交commit,commit失敗的話就回滾rollback,做到事物的原子性原則
??????2) 在數(shù)據(jù)庫設置一個操作成功或失敗的字段(或者本地臨時文件里存放相關的控制數(shù)據(jù)),通過該字段進行控制,在執(zhí)行出錯后刪除所有含有操作失敗字段的數(shù)據(jù)
???????
??????2.數(shù)據(jù)庫同步訪問控制:比如說一條記錄有兩個以上的用戶同時訪問,他們讀取出來的是相同的數(shù)據(jù),但寫入時有先后,如果不做控制就會出現(xiàn)后來寫入的數(shù)據(jù)把原來做了更新的數(shù)據(jù)覆蓋,使原來做的更新操作丟失就是無效,因為他們都是在最原始讀取出來的數(shù)據(jù)上做的修改,而不是在別人做了修改后的數(shù)據(jù)上做修改
??????解決方法:
??????1) 可以在數(shù)據(jù)庫多設置一個版本字段來控制該數(shù)據(jù)的歷史版本號(或者本地臨時文件里存放相關的控制數(shù)據(jù)),就是沒個人做了修改以后都要更新一下這個版本字段,同時更新之前也要做一下版本的比較,如果現(xiàn)在的版本和之前取出來的數(shù)據(jù)的版本不一樣,那么就要從新讀取數(shù)據(jù)再寫入,這樣就可以保證不會丟失修改
?????
錯誤如下:
Servlet: "Faces" failed to preload on startup in Web application
我的方法是修改web.xml如下:
<?xml version="1.0" encoding="gb2312"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee?? http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
?<context-param>
??<param-name>javax.faces.CONFIG_FILES</param-name>
??<param-value>/WEB-INF/faces-config.xml</param-value>
?</context-param>
?
? //listener節(jié)點是新加的
?<listener>
??<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
?</listener>
?
?<servlet>
??<servlet-name>Faces Servlet</servlet-name>
??<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
??<load-on-startup>-1</load-on-startup>//本來是0先在改為-1
?</servlet>
?
?<servlet-mapping>
??<servlet-name>Faces Servlet</servlet-name>
??<url-pattern>*.faces</url-pattern>
?</servlet-mapping>
</web-app>
tomcat要同時開多個端口只要配置conf文件夾下面的server.xml增加Service節(jié)點就可以了,如下我多開了個8083端口,同時我把Catalina文件夾多拷貝了一份另存為Catalina2
<Server port="8005" shutdown="SHUTDOWN" debug="0">
? <!-- Comment out these entries to disable JMX MBeans support -->
? <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
??????????? debug="0"/>
? <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
??????????? debug="0"/>
? <!-- Global JNDI resources -->
? <GlobalNamingResources>
??? <!-- Test entry for demonstration purposes -->
??? <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
??? <!-- Editable user database that can also be used by
???????? UserDatabaseRealm to authenticate users -->
??? <Resource name="UserDatabase" auth="Container"
????????????? type="org.apache.catalina.UserDatabase"
?????? description="User database that can be updated and saved">
??? </Resource>
??? <ResourceParams name="UserDatabase">
????? <parameter>
??????? <name>factory</name>
??????? <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
????? </parameter>
????? <parameter>
??????? <name>pathname</name>
??????? <value>conf/tomcat-users.xml</value>
????? </parameter>
??? </ResourceParams>
? </GlobalNamingResources>
? <!-- Define the Tomcat Stand-Alone Service -->
? <Service name="Catalina">
??? <!-- Define a non-SSL Coyote HTTP/1.1 Connector on the port specified
???????? during installation -->
??? <Connector
port="8081"?????????????? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
?????????????? enableLookups="false" redirectPort="8443" acceptCount="100"
?????????????? debug="0" connectionTimeout="20000"
?????????????? disableUploadTimeout="true" />
??? <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
??? <Connector port="8009"
?????????????? enableLookups="false" redirectPort="8443" debug="0"
?????????????? protocol="AJP/1.3" />
????????
??? <!-- Define the top level container in our container hierarchy -->
??? <Engine name="Catalina" defaultHost="localhost" debug="0">
????? <!--
????? <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
????? -->
????? <!-- Global logger unless overridden at lower levels -->
????? <Logger className="org.apache.catalina.logger.FileLogger"
????????????? prefix="catalina_log." suffix=".txt"
????????????? timestamp="true"/>
????? <!-- This Realm uses the UserDatabase configured in the global JNDI
?????????? resources under the key "UserDatabase".? Any edits
?????????? that are performed against this UserDatabase are immediately
?????????? available for use by the Realm.? -->
????? <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
???????????????? debug="0" resourceName="UserDatabase"/>
????? <!-- Define the default virtual host -->
????? <Host name="localhost" debug="0" appBase="webapps"
?????? unpackWARs="true" autoDeploy="true">
??????? <Logger className="org.apache.catalina.logger.FileLogger"
???????????????? directory="logs"? prefix="localhost_log." suffix=".txt"
??????????? timestamp="true"/>
??????? <!--
????????? <Context path="" docBase="ROOT" debug="0">
??????? -->
????? </Host>
??? </Engine>
? </Service>
?
??? <Service name="Catalina2">
??? <Connector
port="8083"?????????????? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
?????????????? enableLookups="false" redirectPort="8443" acceptCount="100"
?????????????? debug="0" connectionTimeout="20000"
?????????????? disableUploadTimeout="true" />
??? <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
??? <Connector port="8010"
?????????????? enableLookups="false" redirectPort="8443" debug="0"
?????????????? protocol="AJP/1.3" />
????????
??? <!-- Define the top level container in our container hierarchy -->
??? <Engine name="Catalina2" defaultHost="localhost" debug="0">
????? <!-- Global logger unless overridden at lower levels -->
????? <Logger className="org.apache.catalina.logger.FileLogger"
????????????? prefix="catalina_log." suffix=".txt"
????????????? timestamp="true"/>
????? <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
???????????????? debug="0" resourceName="UserDatabase"/>
????? <Host name="localhost" debug="0" appBase="webapps"
?????? unpackWARs="true" autoDeploy="true">
??????? <Logger className="org.apache.catalina.logger.FileLogger"
???????????????? directory="logs"? prefix="localhost_log." suffix=".txt"
??????????? timestamp="true"/>
????? </Host>
??? </Engine>
? </Service>
</Server>