今天演示EL表達式的時候發現自己jsp的基礎實在是薄弱,在這個很簡單的問題上迷惑了很久。
首先在看遇到的問題:
在瀏覽器地址輸入,表示傳入一個參數test,值為123
http://localhost:8888/Test/index.jsp?test=123
在index.jsp中嘗試使用EL表達式取出,代碼如下:
發現毫無結果,再使用requestScope嘗試取出:
<body>
${requestScope.test}
</body>
發現還是毫無結果,感到非常詫異,遂干脆使用java腳本嘗試取出。
<body>
<%request.getAttribute("test"); %>
</body>
依然無解。
之后發現,若使用已下代碼向request作用域賦值,則用上面代碼可以取出
<%
request.setAttribute("test", "123");
%>
查詢資料后發現,使用以下代碼可以取出之前的請求參數:
EL:
<body>
${param.test}
</body>
JAVA腳本:
<body>
<%=request.getParameter("test") %>
</body>
結論就是:${param.name} 等價于 request.getParamter("name"),這兩種方法一般用于服務器從頁面或者客戶端獲取的內容。
${requestScope.name} 等價于 request.getAttribute("name"),一般是從服務器傳遞結果到頁面,在頁面中取出服務器保存的值。
參考資料:
el表達式中的${param}
http://topic.csdn.net/u/20090103/15/779af9b8-c3a7-4f3e-82fe-b08bf2630996.html
JavaScript
<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"?> <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>
第一步是要創建一個可以遠程連接的 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
以上方法只完成了外網訪問的配置,它只允許從主機上訪問MYSQL,如果要完全從外網訪問則需要將主機的3306端口映射到虛擬機的3306上(當然其它的端口也是可以的)
虛擬機端口映射:
http://wenku.baidu.com/view/b01c2ccca1c7aa00b52acb62.html###
這兩天在搭建struts2+spring+hibernate框架的過程中遇到如題的錯誤,在百度和谷歌上查了兩天,以致快到了崩潰的邊緣。最后還是解決了。這個問題的出現,原因有很多,在這總結如下,以供分享:
框架搭建好后,啟動服務器出現如下的信息:
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
嚴重: Error listenerStart
2009-11-6 21:39:17 org.apache.catalina.core.StandardContext start
嚴重: 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
。。。。
可能出錯的地方:
1.web.xml文件 web應用部署描述符,里面的部署的xml文件或者類,如果這些找不到就會發生startup failed due to previous errors錯誤。
2.如果在應用spring的話,在配置文件applicationContext.xml中定義的類、xml文件找不到也會報這個錯誤。
3.在web.xml,struts.xml,applicationContext.xml文件中自身有任何一點錯誤都可能引起上面的這個問題,而不僅僅是附帶的文件錯誤導致。
4.如果使用ibatis的話,在SqlMapConfig.xml中定義的xml文件找不到也會報這個錯誤。(hibernate的配置在整合spring的時候使用spring的配置文件)
5.JDK的版本問題,最好使用JDK5.0 或者更高的版本。
6.Eclipse和tomcat的版本兼容問題
7.框架整合的過程中在導入到lib下的jar包沖突也可能產生該錯誤。
8.jar包的缺少以及jar包的版本也可產生該錯誤。
9.其他的原因
解決該問題的途徑:
由于上面問題可能已經是web服務器內部產生了錯誤,而且IDE中的Log信息較少,問題的解決很難入手。
而該問題的產生經常會導致頁面跳轉尋找不到文件的 Http 404 錯誤。。。。。
可以通過在tomcat中添加log文件來讓log信息提示的更精確一些,即設置log輸出的等級。
1.tomcat的安裝路徑下tomcat home下的common文件夾下的classes文件夾中創建log4j.properties文件,即
。。。Apache Software Foundation/Tomcat 5.5/common/classes
log4j.properties配置如下(配置是轉載):
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下即可。
做好上面兩步,啟動服務器的時候,會在tomcat的安裝路徑下的。。Apache Software Foundation/Tomcat 5.5/logs下自動的
生成tomcat.log文件以記錄日志信息。
注:tomcat.log文件中的日志信息會記載很多,如果過大就可能產生磁盤空間不足的問題,建議定時的清除日志信息。
通過上面的日志文件信息可以定位到比較具體的問題根源,在仔細的查看問題一一攻破即可解決。
我在搭建框架之后,在web.xml文件中配置的歡迎頁面顯示的時候報404的錯誤,通過上面的途徑找到了兩個錯誤,雖然花了兩天的時間,最終還是解決了。
在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驅動到web-info/lib
3、在web-info下建立文件:proxool.xml
文件內容如下:
<?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文件內加入以下內容:
<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提供的管理監控工具,可查看當前數據庫連接情況。如果運行不成功,請刪除本行 -->
<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、在調用數據庫連接代碼:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Develop");
6、利用proxool監控工具查看數據庫運行狀態。地址:./admin
配置二:properties方法
1,下載proxool-0.8.3.jar并放到相應的目錄,這個應該比較簡單了
2,寫一個配置文件放到web-inf目錄下,配置文件內容如下:
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,配置就這么簡單,下面給你一段怎么得到一個連接代碼,其他的應該就比較簡單了
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;
}
最近在學習Struts2的時候,總是無法啟動Tomcat服務器,報錯如下,用6.0、7.0都不行,起初以為是環境的問題,弄了一下午還是不行。我用的Strtus jar是2.16但是前幾天做項目還是好好,可切換個工作空間卻就老是報如下的錯誤,甚是煩人。在網上轉了好久,用試用了他的很多方法都不能解決問題。
1.strtus.xml
在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"/>-->
解決辦法移掉項目屬性中classpath里面報錯的包,可能包不存在,在本地中
重新編譯項目.
可以將自己寫的java文件打包成a.jar形式,由export導出,引入時候之間引入到lib目錄下即可.與原來形式一樣..
