1、web應(yīng)用在tomcat上運(yùn)行,一切正常。
2、OS:windows XP sp3
3、weblogic version:8.1.3.0
二 、問(wèn)題及解決方法
1 、 weblogic.utils.ParsingException: nested TokenStreamException: antlr.TokenStreamIOException: 在web應(yīng)用的WEB-INF目錄下新增(如果沒(méi)有)weblogic.xml文件,寫(xiě)入下面內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<session-descriptor>
</session-descriptor>
<jsp-descriptor>
<jsp-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</jsp-param>
<jsp-param>
<param-name>pageCheckSeconds</param-name>
<param-value>-1</param-value>
</jsp-param>
<jsp-param>
<param-name>compilerSupportsEncoding</param-name>
<param-value>true</param-value>
</jsp-param>
<jsp-param>
<param-name>verbose</param-name>
<param-value>false</param-value>
</jsp-param>
</jsp-descriptor>
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>
</weblogic-web-app>
保存,重新deploy應(yīng)用
2、 sun.io.MalformedInputException:修改區(qū)域和語(yǔ)言選型。
控制面板->區(qū)域和語(yǔ)言選型->高級(jí)->代碼頁(yè)轉(zhuǎn)換表,去掉54936(GB18030簡(jiǎn)體中文)前面的對(duì)勾,保存更改。重新deploy應(yīng)用。
3 、weblogic.servlet.jsp.JspException: (line 1): page directive contentType at /unieap/ria3.3/pages/config.jsp:1 previously defined :修改jsp文件,不能重復(fù)定義:<%@ page contentType="text/html; charset=UTF-8"%>
在含有<%@ include file="/unieap/ria3.3/pages/config.jsp"%>這樣的代碼的JSP文件中,如果在文件頭部已經(jīng)定義了contentType,那么在被包含的文件中如果重復(fù)定義contentType,盡管相同,weblogoic也會(huì)報(bào)錯(cuò),只能改JSP文件,保證一個(gè)頁(yè)面中只有一個(gè)contentType的定義。這個(gè)問(wèn)題在tomcat中是不存在的,可能是兩個(gè)應(yīng)用服務(wù)器的解析機(jī)制不同。
首先下載 對(duì)應(yīng) eclipse 版本的 tomcat 插件版本,(這里要注意: Tomcat 插件是Tomcat 插件,Tomcat 是 Tomcat, 兩者不能混淆!)
下載地址:http://www.eclipsetotale.com/tomcatPlugin.html
然后將得到的壓縮包解壓,放入 eclipse 的 plugins 目錄中重啟 eclipse, Tomcat 插件安裝成功!
當(dāng)然安裝成功不并代表能使用,這里還要配置 Tomcat, 才能正常使用 Tomcat 插件,
配置過(guò)程:
首先下載當(dāng)前 Eclipse 能使用的 Tomcat 版本,
下載地址:http://tomcat.apache.org/
然后解壓到指定的目錄,然后配置
Eclipse - toolsbar -> Window -> Prefences -> Tomcat -> 指向剛才 Tomcat 解壓的目錄,
到此配置完成,使用 Tomcat 插件可以啟動(dòng)、關(guān)閉 Tomcat.
使用 Eclipse 建立 Dynamic Web Project 如:HelloProject
右鍵 Run As –> Run On Server -> 如圖:
彈出如圖界面配置:
配置完成,會(huì)在看到這樣效果項(xiàng)目目錄下會(huì)有 Servers 一個(gè)目錄,是專屬 HelloProject 項(xiàng)目的 Tomcat 配置,
還會(huì)在控制臺(tái)那塊看到 Servers 如圖:
這時(shí)已經(jīng)可以使用 Tomcat , Start、Stop、Restart 等.
重點(diǎn)要說(shuō)的,也是下邊要講的是:
對(duì)于上圖紅圈中的 server.xml 和 Tomcat/conf/server.xml 文件,
我們說(shuō)過(guò)了紅圈中的 server.xml 是針對(duì) HelloProject 生成的配置文件,當(dāng)然多個(gè)項(xiàng)目也可以共用 一個(gè) Servers 目錄下的配置!這個(gè)暫時(shí)先不講。
而 Tomcat/conf/server.xml 是 Tomcat 本身所有,有更大的通用性。
為了便于區(qū)分我們把紅圈中的 server.xml 叫 project.server.xml, 把 Tomcat/conf/server.xml 叫 tomcat.server.xml。
本次主要講 server.xml 中的 <Context … />
來(lái)看 project.server.xml 中的 <Context docBase="HelloProject" path="/HelloProject" reloadable="true" source="org.eclipse.jst.jee.server:HelloProject"/>
docBase 指的是 相對(duì) Servers 目錄 平級(jí)的 HelloProject 目錄 即項(xiàng)目目錄,如圖:
path 指的是 網(wǎng)站訪問(wèn)路徑,如:http://locahost:8080/HelloProject
像這樣生成的這個(gè) project.server.xml 我們一般不要?jiǎng)?
而對(duì)于 tomcat.server.xml 中 <Content … />
我們看這兩配置都是對(duì)的:
<!--<Context path="/HP" reloadable="true" docBase="C:\Documents and Settings\Administrator\workspace\HelloProject\WebContent" workDir=”D:\worDir” /> -->
<Context path="/HelloProject" reloadable="true" docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" workDir=”C:\workDir” />
<Context path="/HPT" reloadable="true" docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" workDir=”C:\workDir” />
網(wǎng)站訪問(wèn)路徑分別是
http://localhost:8080/HelloProject
對(duì)于上邊的 HPT 我們可以這樣訪問(wèn):
http://localhost:8080/HPT/WebContent
這樣可以看到 如果是 docBase 指到了 WebContent 下則可用自己定義的 path,
如果 docBase 指到的是項(xiàng)目目錄則必須使用項(xiàng)目原來(lái)的 path, 或者路徑訪問(wèn)做下修改
最后的 workDir 是部署后 jsp 發(fā)布的目錄,可以自己隨便指定,或不指定.
<script type="text/javascript">
//<![CDATA[
//嵌入CDATA段可以防止不兼容Javacript的瀏覽器不產(chǎn)生錯(cuò)誤信息
//增加正則表達(dá)式
String.prototype.getQueryString = function(name) {
var reg = new RegExp("(^|&|\\?)" + name + "=([^&]*)(&|$)"), r;
if (r = this.match(reg)) return unescape(r[2]);
return null;
};
var address = location.search.getQueryString("address"); //通過(guò)表達(dá)式獲得傳遞參數(shù)
//針對(duì)兩種瀏覽器,分別獲取xmlDocument對(duì)象// 讀取XML文件
function loadXML(xmlFile) {
var xmlDoc;
if (window.ActiveXObject) {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load(xmlFile);
}
else if (document.implementation && document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.async = false;
xmlDoc.load(xmlFile);
} else {
alert('您的瀏覽器不支持該系統(tǒng)腳本!');
}
return xmlDoc;
}
//調(diào)用地圖
var map; //全局GMap GOOGLE 地圖 API
function load() {
if (GBrowserIsCompatible()) //檢查瀏覽器兼容性
{
map = new GMap2(document.getElementById("map")); //地圖加栽到ID為map的DIV中。
map.addControl(new GSmallMapControl()); //添加Gcontrol控件//放大縮小的那個(gè)
map.setCenter(new GLatLng(26.577014, 104.877977), 15); //設(shè)置地圖中心
//創(chuàng)建多個(gè)坐標(biāo)點(diǎn)(從INFO.XML文件中讀取)
var xmlDoc = loadXML("Info.xml");
var members = xmlDoc.getElementsByTagName("number");
var maxRes = members.length;
for (var i = 0; i <= maxRes; i++) { //XML中記錄了多個(gè)坐標(biāo)點(diǎn),要每個(gè)點(diǎn)都標(biāo)記一下
var oName = members[i].getElementsByTagName("name");
var oLongitude = members[i].getElementsByTagName("Longitude");
var oLatitude = members[i].getElementsByTagName("Latitude");
var name = oName[0].firstChild.nodeValue
var Longitude = oLongitude[0].firstChild.nodeValue
var Latitude = oLatitude[0].firstChild.nodeValue
var marker = new GMarker(new GLatLng(Longitude, Latitude), { title: name }); //對(duì)每個(gè)點(diǎn)添加標(biāo)記
marker.openInfoWindowHtml("<div style=line-height:20px;text-align:center;font-size:12px;'><a href=Left.aspx?info=" + name + " target=framLeft>" + name + ",點(diǎn)擊查看信息</a></div>");
map.addOverlay(marker);
}
}
}
//]]>
</script>
XML文件
<?xml version="1.0" encoding="GB2312"?>第二步是要修改 mysql 的配置文件 /etc/mysql/my.cnf
在舊版本中找到 skip-networking,把它注釋掉就可以了
#skip-networking
在新版本中:
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
bind-address = 127.0.0.1 這一行要注釋掉
#bind-address = 127.0.0.1
或者把允許訪問(wèn)的ip 填上
bind-address = 192.168.1.100
然后重啟 MySQL
/etc/init.d/mysql restart
以上方法只完成了外網(wǎng)訪問(wèn)的配置,它只允許從主機(jī)上訪問(wèn)MYSQL,如果要完全從外網(wǎng)訪問(wèn)則需要將主機(jī)的3306端口映射到虛擬機(jī)的3306上(當(dāng)然其它的端口也是可以的)
在struts.xml中配置了<constant name="struts.devMode" value="true"/> (據(jù)說(shuō)配置了<constant name="struts.configuration.xml.reload" value="true"/>也會(huì)報(bào)錯(cuò),這個(gè)我沒(méi)試過(guò))
時(shí)啟動(dòng)tomcat報(bào)錯(cuò)。
org.apache.catalina.core.StandardContext filterStart
嚴(yán)重: Exception starting filter struts2
java.lang.NullPointerException
at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)
at com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168)
at com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61)
at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:191)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4363)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-2-4 22:40:54 org.apache.catalina.core.StandardContext start
嚴(yán)重: Error filterStart
2009-2-4 22:40:54 org.apache.catalina.core.StandardContext start
嚴(yán)重: Context [/Struts2Demo2] startup failed due to previous errors
網(wǎng)上解決辦法:devMode模式是開(kāi)發(fā)模式,開(kāi)啟它則默認(rèn)開(kāi)啟了i18n.reload、 configuration.xml.reload。這個(gè)錯(cuò)誤是由于configuration.xml.reload設(shè)置為true倒置的,但是網(wǎng)上的資料沒(méi)有說(shuō)明原因及解決辦法,倒是一個(gè)國(guó)外的apache相關(guān)BBS上有人說(shuō)這是216版本的BUG,并且附上了一個(gè).patch修正文件,說(shuō)217版本會(huì)修正。。。可我不會(huì)用也不知道是不是這個(gè)原因,這個(gè)問(wèn)題就一直擱置在這里了。過(guò)了幾個(gè)月,也就是最近網(wǎng)上查了下發(fā)現(xiàn)在apache的一個(gè)郵件列表中有關(guān)于這個(gè)的解釋,原因很簡(jiǎn)單,tomcat的安裝路徑包含空格我的成功的辦法:據(jù)說(shuō)這是struts2.1.6的bug,換新版本2.1.8就ok,當(dāng)然還要相應(yīng)的xwork版本,好像是xwork2.1.6,我將原來(lái)的2個(gè)舊jar包換成新的就ok了。。。。無(wú)語(yǔ)啊。。。一試果然如此。
注意:2個(gè)jar包換了之后重啟tomcat可能會(huì)報(bào)錯(cuò), Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar,這個(gè)錯(cuò)誤是開(kāi)始那個(gè)引起的,把tomcat中相應(yīng)項(xiàng)目刪除了,重新部署就沒(méi)問(wèn)題了
下面是4個(gè)開(kāi)發(fā)模式常用配置的簡(jiǎn)介---(來(lái)自http://hi.baidu.com/12261016/blog/item/1d7f6ccaded7248ec91768ec.html)
<!-- 開(kāi)啟使用開(kāi)發(fā)模式,詳細(xì)錯(cuò)誤提示 -->
<!-- <constant name="struts.devMode" value="true"/>-->
<!-- 指定每次請(qǐng)求到達(dá),重新加載資源文件 -->
<!-- <constant name="struts.i18n.reload" value="true"/>-->
<!-- 指定每次配置文件更改后,自動(dòng)重新加載 -->
<!-- <constant name="struts.configuration.xml.reload" value="true"/>-->
<!-- 指定XSLT Result使用樣式表緩存 -->
<!-- <constant name="struts.xslt.nocache" value="true"/>-->
一:準(zhǔn)備資源文件,資源文件的命名格式如下:
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是資源文件的基本名,我們可以自定義,但language和country必須是java支持的語(yǔ)言和國(guó)家。如:
中國(guó)大陸:baseName_zh_CN.properties
美國(guó):baseName_en_US.properties
現(xiàn)在為應(yīng)用添加兩個(gè)資源文件:
二:準(zhǔn)備好資源文件后:配置struts.xml文件
struts.custom.i18n.resources常量把資源文件定義為全局資源文件,
<constant name="struts.custom.i18n.resources" value="itcast"/>
Itcast為資源文件的基本名。
三:后面我們可以在頁(yè)面或action中訪問(wèn)國(guó)際化信息:
1在JSP頁(yè)面中使用<s:text name=””/>標(biāo)簽輸出國(guó)際化信息。
name為資源文件中的key。
2在action 類中,可以繼承ActionSupport,使用getText(“key”)方法得到國(guó)際
化信息,該方法的第一個(gè)參數(shù)用于指定資源文件中的key。
3在表單標(biāo)簽中,通過(guò)key屬性指定資源文件中的key,如:
<s:textfield name=”realname” key=”user”/>
修改這個(gè)文件里面的一個(gè)參數(shù)
<Connector port="8080" protocol="HTTP/1.1"
|