今天演示EL表達(dá)式的時(shí)候發(fā)現(xiàn)自己jsp的基礎(chǔ)實(shí)在是薄弱,在這個(gè)很簡(jiǎn)單的問題上迷惑了很久。
首先在看遇到的問題:
在瀏覽器地址輸入,表示傳入一個(gè)參數(shù)test,值為123
http://localhost:8888/Test/index.jsp?test=123
在index.jsp中嘗試使用EL表達(dá)式取出,代碼如下:
發(fā)現(xiàn)毫無(wú)結(jié)果,再使用requestScope嘗試取出:
<body>
${requestScope.test}
</body>
發(fā)現(xiàn)還是毫無(wú)結(jié)果,感到非常詫異,遂干脆使用java腳本嘗試取出。
<body>
<%request.getAttribute("test"); %>
</body>
依然無(wú)解。
之后發(fā)現(xiàn),若使用已下代碼向request作用域賦值,則用上面代碼可以取出
<%
request.setAttribute("test", "123");
%>
查詢資料后發(fā)現(xiàn),使用以下代碼可以取出之前的請(qǐng)求參數(shù):
EL:
<body>
${param.test}
</body>
JAVA腳本:
<body>
<%=request.getParameter("test") %>
</body>
結(jié)論就是:${param.name} 等價(jià)于 request.getParamter("name"),這兩種方法一般用于服務(wù)器從頁(yè)面或者客戶端獲取的內(nèi)容。
${requestScope.name} 等價(jià)于 request.getAttribute("name"),一般是從服務(wù)器傳遞結(jié)果到頁(yè)面,在頁(yè)面中取出服務(wù)器保存的值。
參考資料:
el表達(dá)式中的${param}
http://topic.csdn.net/u/20090103/15/779af9b8-c3a7-4f3e-82fe-b08bf2630996.html
JavaScript
<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"); //通過表達(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"?> <earth> <number id='1'> <name>213211212213213</name> <Longitude>26.577014</Longitude> <Latitude>104.877977</Latitude></number> <number id='2'> <name>112312332131212</name> <Longitude>26.586685</Longitude> <Latitude>104.863815</Latitude></number> <number id='3'> <name>123123121323112</name> <Longitude>26.572101</Longitude> <Latitude>104.866905</Latitude></number> <number id='4'> <name>123132123123321</name> <Longitude>26.572254</Longitude> <Latitude>104.891624</Latitude></number> </earth>
第一步是要?jiǎng)?chuàng)建一個(gè)可以遠(yuǎn)程連接的 MySQL 用戶
mysql> GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'%' IDENTIFIED BY 'userPWD' WITH GRANT OPTION;
mysql> flush privileges;
### "%"表示任意IP,如果要為特定的user指定從特定的IP訪問,方法如下:
mysql> GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'ip' IDENTIFIED BY 'userPWD' WITH GRANT OPTION;
mysql> flush privileges;
第二步是要修改 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
以上方法只完成了外網(wǎng)訪問的配置,它只允許從主機(jī)上訪問MYSQL,如果要完全從外網(wǎng)訪問則需要將主機(jī)的3306端口映射到虛擬機(jī)的3306上(當(dāng)然其它的端口也是可以的)
虛擬機(jī)端口映射:
http://wenku.baidu.com/view/b01c2ccca1c7aa00b52acb62.html###
這兩天在搭建struts2+spring+hibernate框架的過程中遇到如題的錯(cuò)誤,在百度和谷歌上查了兩天,以致快到了崩潰的邊緣。最后還是解決了。這個(gè)問題的出現(xiàn),原因有很多,在這總結(jié)如下,以供分享:
框架搭建好后,啟動(dòng)服務(wù)器出現(xiàn)如下的信息:
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).
log4j:WARN Please initialize the log4j system properly.
2009-11-6 21:39:17 org.apache.catalina.core.StandardContext start
嚴(yán)重: Error listenerStart
2009-11-6 21:39:17 org.apache.catalina.core.StandardContext start
嚴(yán)重: Context startup failed due to previous errors
2009-11-6 21:39:17 org.apache.catalina.core.StandardHostDeployer install
信息: Installing web application at context path /tomcat-docs from URL file:D:/server/Tomcat 5.0/webapps/tomcat-docs
2009-11-6 21:39:17 org.apache.catalina.core.StandardHostDeployer install
信息: Installing web application at context path /webdav from URL file:D:/server/Tomcat 5.0/webapps/webdav
。。。。
可能出錯(cuò)的地方:
1.web.xml文件 web應(yīng)用部署描述符,里面的部署的xml文件或者類,如果這些找不到就會(huì)發(fā)生startup failed due to previous errors錯(cuò)誤。
2.如果在應(yīng)用spring的話,在配置文件applicationContext.xml中定義的類、xml文件找不到也會(huì)報(bào)這個(gè)錯(cuò)誤。
3.在web.xml,struts.xml,applicationContext.xml文件中自身有任何一點(diǎn)錯(cuò)誤都可能引起上面的這個(gè)問題,而不僅僅是附帶的文件錯(cuò)誤導(dǎo)致。
4.如果使用ibatis的話,在SqlMapConfig.xml中定義的xml文件找不到也會(huì)報(bào)這個(gè)錯(cuò)誤。(hibernate的配置在整合spring的時(shí)候使用spring的配置文件)
5.JDK的版本問題,最好使用JDK5.0 或者更高的版本。
6.Eclipse和tomcat的版本兼容問題
7.框架整合的過程中在導(dǎo)入到lib下的jar包沖突也可能產(chǎn)生該錯(cuò)誤。
8.jar包的缺少以及jar包的版本也可產(chǎn)生該錯(cuò)誤。
9.其他的原因
解決該問題的途徑:
由于上面問題可能已經(jīng)是web服務(wù)器內(nèi)部產(chǎn)生了錯(cuò)誤,而且IDE中的Log信息較少,問題的解決很難入手。
而該問題的產(chǎn)生經(jīng)常會(huì)導(dǎo)致頁(yè)面跳轉(zhuǎn)尋找不到文件的 Http 404 錯(cuò)誤。。。。。
可以通過在tomcat中添加log文件來(lái)讓log信息提示的更精確一些,即設(shè)置log輸出的等級(jí)。
1.tomcat的安裝路徑下tomcat home下的common文件夾下的classes文件夾中創(chuàng)建log4j.properties文件,即
。。。Apache Software Foundation/Tomcat 5.5/common/classes
log4j.properties配置如下(配置是轉(zhuǎn)載):
log4j.rootLogger=info,Console,R
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/tomcat.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L):? %m%n
log4j.logger.org.apache=info,R
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R
log4j.logger.org.apache.catalina.core=info,R
log4j.logger.org.apache.catalina.session=info,R
2.將log4j-1.2.15.jar和commons-logging.jar包拷貝到。。。Apache Software Foundation/Tomcat 5.5/common/lib下即可。
做好上面兩步,啟動(dòng)服務(wù)器的時(shí)候,會(huì)在tomcat的安裝路徑下的。。Apache Software Foundation/Tomcat 5.5/logs下自動(dòng)的
生成tomcat.log文件以記錄日志信息。
注:tomcat.log文件中的日志信息會(huì)記載很多,如果過大就可能產(chǎn)生磁盤空間不足的問題,建議定時(shí)的清除日志信息。
通過上面的日志文件信息可以定位到比較具體的問題根源,在仔細(xì)的查看問題一一攻破即可解決。
我在搭建框架之后,在web.xml文件中配置的歡迎頁(yè)面顯示的時(shí)候報(bào)404的錯(cuò)誤,通過上面的途徑找到了兩個(gè)錯(cuò)誤,雖然花了兩天的時(shí)間,最終還是解決了。
在hibernate2.0中hibernate.dialect的包路徑是net.sf.hibernate.dialect.OracleDialect,
CREATE TABLE orders (
id number(11) NOT NULL ,
username varchar(22) NOT NULL ,
kind varchar(22) NOT NULL ,
phone varchar(11) DEFAULT '',
email varchar(22) DEFAULT '',
qq varchar(12) DEFAULT '',
name varchar(30) DEFAULT '',
address clob,
state varchar(30) DEFAULT '未處理',
time date DEFAULT '',
comname varchar(50) DEFAULT '',
comadd varchar(50) DEFAULT '',
PRIMARY KEY (id)
)
create sequence member_SEQ
minvalue 1
maxvalue 9999999
start with 21
increment by 1
cache 20;
CREATE OR REPLACE TRIGGER "member_trig"
BEFORE INSERT ON admin
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
SELECT member_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
END member_trig;
配置一:XML方法
1、下載proxool 地址:http://proxool.sourceforge.net
2、解壓縮proxool-0.9.0RC2.zip,拷貝lib/proxool-0.9.0RC2.jar到web-info/lib
拷貝jdbc驅(qū)動(dòng)到web-info/lib
3、在web-info下建立文件:proxool.xml
文件內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Develop</alias>
<driver-url>jdbc:oracle:thin:@192.168.100.18:1521:RNMS</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="scmlp"/>
<property name="password" value="scmlpscmlp"/>
</driver-properties>
<maximum-connection-count>500</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
4、在web.xml文件內(nèi)加入以下內(nèi)容:
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- proxool提供的管理監(jiān)控工具,可查看當(dāng)前數(shù)據(jù)庫(kù)連接情況。如果運(yùn)行不成功,請(qǐng)刪除本行 -->
<servlet>
<servlet-name>Admin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
5、在調(diào)用數(shù)據(jù)庫(kù)連接代碼:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Develop");
6、利用proxool監(jiān)控工具查看數(shù)據(jù)庫(kù)運(yùn)行狀態(tài)。地址:./admin
配置二:properties方法
1,下載proxool-0.8.3.jar并放到相應(yīng)的目錄,這個(gè)應(yīng)該比較簡(jiǎn)單了
2,寫一個(gè)配置文件放到web-inf目錄下,配置文件內(nèi)容如下:
jdbc-0.proxool.alias=bidding
jdbc-0.proxool.driver-url=jjdbc:oracle:thin:@127.0.0.1:1521:dbname
jdbc-0.proxool.driver-class=oracle.jdbc.driver.oracledriver
jdbc-0.user=name
jdbc-0.password=pass
jdbc-0.proxool.maximum-connection-count=200
jdbc-0.proxool.house-keeping-test-sql=select *
3,在web-inf/web.xml中添加如下代碼:
<servlet>
<servlet-name>servletconfigurator</servlet-name>
<servlet-lass>org.logicalcobwebs.proxool.configuration.servletconfigurator</servlet-class>
<init-param>
<param-name>propertyfile</param-name>
<param-value>web-inf/proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4,配置就這么簡(jiǎn)單,下面給你一段怎么得到一個(gè)連接代碼,其他的應(yīng)該就比較簡(jiǎn)單了
public connection getconnection() {
try {
conn = drivermanager.getconnection("proxool.bidding");
}catch(sqlexception ex){
ex.printstacktrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (sqlexception e) {
e.printstacktrace();
log("problem closing connection");
}
}
return conn;
}
最近在學(xué)習(xí)Struts2的時(shí)候,總是無(wú)法啟動(dòng)Tomcat服務(wù)器,報(bào)錯(cuò)如下,用6.0、7.0都不行,起初以為是環(huán)境的問題,弄了一下午還是不行。我用的Strtus jar是2.16但是前幾天做項(xiàng)目還是好好,可切換個(gè)工作空間卻就老是報(bào)如下的錯(cuò)誤,甚是煩人。在網(wǎng)上轉(zhuǎn)了好久,用試用了他的很多方法都不能解決問題。
1.strtus.xml
在struts.xml中配置了<constant name="struts.devMode" value="true"/> (據(jù)說(shuō)配置了<constant name="struts.configuration.xml.reload" value="true"/>也會(huì)報(bào)錯(cuò),這個(gè)我沒試過)
時(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模式是開發(fā)模式,開啟它則默認(rèn)開啟了i18n.reload、 configuration.xml.reload。這個(gè)錯(cuò)誤是由于configuration.xml.reload設(shè)置為true倒置的,但是網(wǎng)上的資料沒有說(shuō)明原因及解決辦法,倒是一個(gè)國(guó)外的apache相關(guān)BBS上有人說(shuō)這是216版本的BUG,并且附上了一個(gè).patch修正文件,說(shuō)217版本會(huì)修正。。。可我不會(huì)用也不知道是不是這個(gè)原因,這個(gè)問題就一直擱置在這里了。過了幾個(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ò)誤是開始那個(gè)引起的,把tomcat中相應(yīng)項(xiàng)目刪除了,重新部署就沒問題了
下面是4個(gè)開發(fā)模式常用配置的簡(jiǎn)介---(來(lái)自http://hi.baidu.com/12261016/blog/item/1d7f6ccaded7248ec91768ec.html)
<!-- 開啟使用開發(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"/>-->
解決辦法移掉項(xiàng)目屬性中classpath里面報(bào)錯(cuò)的包,可能包不存在,在本地中
重新編譯項(xiàng)目.
可以將自己寫的java文件打包成a.jar形式,由export導(dǎo)出,引入時(shí)候之間引入到lib目錄下即可.與原來(lái)形式一樣..
例.png)