1、web應用在tomcat上運行,一切正常。
2、OS:windows XP sp3
3、weblogic version:8.1.3.0
二 、問題及解決方法
1 、 weblogic.utils.ParsingException: nested TokenStreamException: antlr.TokenStreamIOException: 在web應用的WEB-INF目錄下新增(如果沒有)weblogic.xml文件,寫入下面內容:
<?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應用
2、 sun.io.MalformedInputException:修改區域和語言選型。
控制面板->區域和語言選型->高級->代碼頁轉換表,去掉54936(GB18030簡體中文)前面的對勾,保存更改。重新deploy應用。
3 、weblogic.servlet.jsp.JspException: (line 1): page directive contentType at /unieap/ria3.3/pages/config.jsp:1 previously defined :修改jsp文件,不能重復定義:<%@ page contentType="text/html; charset=UTF-8"%>
在含有<%@ include file="/unieap/ria3.3/pages/config.jsp"%>這樣的代碼的JSP文件中,如果在文件頭部已經定義了contentType,那么在被包含的文件中如果重復定義contentType,盡管相同,weblogoic也會報錯,只能改JSP文件,保證一個頁面中只有一個contentType的定義。這個問題在tomcat中是不存在的,可能是兩個應用服務器的解析機制不同。
首先下載 對應 eclipse 版本的 tomcat 插件版本,(這里要注意: Tomcat 插件是Tomcat 插件,Tomcat 是 Tomcat, 兩者不能混淆!)
下載地址:http://www.eclipsetotale.com/tomcatPlugin.html
然后將得到的壓縮包解壓,放入 eclipse 的 plugins 目錄中重啟 eclipse, Tomcat 插件安裝成功!
當然安裝成功不并代表能使用,這里還要配置 Tomcat, 才能正常使用 Tomcat 插件,
配置過程:
首先下載當前 Eclipse 能使用的 Tomcat 版本,
下載地址:http://tomcat.apache.org/
然后解壓到指定的目錄,然后配置
Eclipse - toolsbar -> Window -> Prefences -> Tomcat -> 指向剛才 Tomcat 解壓的目錄,
到此配置完成,使用 Tomcat 插件可以啟動、關閉 Tomcat.
使用 Eclipse 建立 Dynamic Web Project 如:HelloProject
右鍵 Run As –> Run On Server -> 如圖:
彈出如圖界面配置:
配置完成,會在看到這樣效果項目目錄下會有 Servers 一個目錄,是專屬 HelloProject 項目的 Tomcat 配置,
還會在控制臺那塊看到 Servers 如圖:
這時已經可以使用 Tomcat , Start、Stop、Restart 等.
重點要說的,也是下邊要講的是:
對于上圖紅圈中的 server.xml 和 Tomcat/conf/server.xml 文件,
我們說過了紅圈中的 server.xml 是針對 HelloProject 生成的配置文件,當然多個項目也可以共用 一個 Servers 目錄下的配置!這個暫時先不講。
而 Tomcat/conf/server.xml 是 Tomcat 本身所有,有更大的通用性。
為了便于區分我們把紅圈中的 server.xml 叫 project.server.xml, 把 Tomcat/conf/server.xml 叫 tomcat.server.xml。
本次主要講 server.xml 中的 <Context … />
來看 project.server.xml 中的 <Context docBase="HelloProject" path="/HelloProject" reloadable="true" source="org.eclipse.jst.jee.server:HelloProject"/>
docBase 指的是 相對 Servers 目錄 平級的 HelloProject 目錄 即項目目錄,如圖:
path 指的是 網站訪問路徑,如:http://locahost:8080/HelloProject
像這樣生成的這個 project.server.xml 我們一般不要動.
而對于 tomcat.server.xml 中 <Content … />
我們看這兩配置都是對的:
<!--<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” />
網站訪問路徑分別是
http://localhost:8080/HelloProject
對于上邊的 HPT 我們可以這樣訪問:
http://localhost:8080/HPT/WebContent
這樣可以看到 如果是 docBase 指到了 WebContent 下則可用自己定義的 path,
如果 docBase 指到的是項目目錄則必須使用項目原來的 path, 或者路徑訪問做下修改
最后的 workDir 是部署后 jsp 發布的目錄,可以自己隨便指定,或不指定.
<script type="text/javascript">
//<![CDATA[
//嵌入CDATA段可以防止不兼容Javacript的瀏覽器不產生錯誤信息
//增加正則表達式
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"); //通過表達式獲得傳遞參數
//針對兩種瀏覽器,分別獲取xmlDocument對象// 讀取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('您的瀏覽器不支持該系統腳本!');
}
return xmlDoc;
}
//調用地圖
var map; //全局GMap GOOGLE 地圖 API
function load() {
if (GBrowserIsCompatible()) //檢查瀏覽器兼容性
{
map = new GMap2(document.getElementById("map")); //地圖加栽到ID為map的DIV中。
map.addControl(new GSmallMapControl()); //添加Gcontrol控件//放大縮小的那個
map.setCenter(new GLatLng(26.577014, 104.877977), 15); //設置地圖中心
//創建多個坐標點(從INFO.XML文件中讀取)
var xmlDoc = loadXML("Info.xml");
var members = xmlDoc.getElementsByTagName("number");
var maxRes = members.length;
for (var i = 0; i <= maxRes; i++) { //XML中記錄了多個坐標點,要每個點都標記一下
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 }); //對每個點添加標記
marker.openInfoWindowHtml("<div style=line-height:20px;text-align:center;font-size:12px;'><a href=Left.aspx?info=" + name + " target=framLeft>" + name + ",點擊查看信息</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
或者把允許訪問的ip 填上
bind-address = 192.168.1.100
然后重啟 MySQL
/etc/init.d/mysql restart
以上方法只完成了外網訪問的配置,它只允許從主機上訪問MYSQL,如果要完全從外網訪問則需要將主機的3306端口映射到虛擬機的3306上(當然其它的端口也是可以的)
在struts.xml中配置了<constant name="struts.devMode" value="true"/> (據說配置了<constant name="struts.configuration.xml.reload" value="true"/>也會報錯,這個我沒試過)
時啟動tomcat報錯。
org.apache.catalina.core.StandardContext filterStart
嚴重: 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
嚴重: Error filterStart
2009-2-4 22:40:54 org.apache.catalina.core.StandardContext start
嚴重: Context [/Struts2Demo2] startup failed due to previous errors
網上解決辦法:devMode模式是開發模式,開啟它則默認開啟了i18n.reload、 configuration.xml.reload。這個錯誤是由于configuration.xml.reload設置為true倒置的,但是網上的資料沒有說明原因及解決辦法,倒是一個國外的apache相關BBS上有人說這是216版本的BUG,并且附上了一個.patch修正文件,說217版本會修正。。。可我不會用也不知道是不是這個原因,這個問題就一直擱置在這里了。過了幾個月,也就是最近網上查了下發現在apache的一個郵件列表中有關于這個的解釋,原因很簡單,tomcat的安裝路徑包含空格我的成功的辦法:據說這是struts2.1.6的bug,換新版本2.1.8就ok,當然還要相應的xwork版本,好像是xwork2.1.6,我將原來的2個舊jar包換成新的就ok了。。。。無語啊。。。一試果然如此。
注意:2個jar包換了之后重啟tomcat可能會報錯, Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar,這個錯誤是開始那個引起的,把tomcat中相應項目刪除了,重新部署就沒問題了
下面是4個開發模式常用配置的簡介---(來自http://hi.baidu.com/12261016/blog/item/1d7f6ccaded7248ec91768ec.html)
<!-- 開啟使用開發模式,詳細錯誤提示 -->
<!-- <constant name="struts.devMode" value="true"/>-->
<!-- 指定每次請求到達,重新加載資源文件 -->
<!-- <constant name="struts.i18n.reload" value="true"/>-->
<!-- 指定每次配置文件更改后,自動重新加載 -->
<!-- <constant name="struts.configuration.xml.reload" value="true"/>-->
<!-- 指定XSLT Result使用樣式表緩存 -->
<!-- <constant name="struts.xslt.nocache" value="true"/>-->
一:準備資源文件,資源文件的命名格式如下:
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是資源文件的基本名,我們可以自定義,但language和country必須是java支持的語言和國家。如:
中國大陸:baseName_zh_CN.properties
美國:baseName_en_US.properties
現在為應用添加兩個資源文件:
二:準備好資源文件后:配置struts.xml文件
struts.custom.i18n.resources常量把資源文件定義為全局資源文件,
<constant name="struts.custom.i18n.resources" value="itcast"/>
Itcast為資源文件的基本名。
三:后面我們可以在頁面或action中訪問國際化信息:
1在JSP頁面中使用<s:text name=””/>標簽輸出國際化信息。
name為資源文件中的key。
2在action 類中,可以繼承ActionSupport,使用getText(“key”)方法得到國際
化信息,該方法的第一個參數用于指定資源文件中的key。
3在表單標簽中,通過key屬性指定資源文件中的key,如:
<s:textfield name=”realname” key=”user”/>
修改這個文件里面的一個參數
<Connector port="8080" protocol="HTTP/1.1"
|