[Logo]
文章發表人是: andowson
討論區首頁 » 個人資料 andowson » 文章發表人是 andowson
內容
lionsgogo您好:
您應該是直接打download.jsp這樣子去執行吧?正確的使用方式是需要提供一個參數file來指定要下載的檔案名稱(位於WEB-INF/export目錄下),例如:download.jsp?file=test.csv
lionsgogo wrote:org.apache.jasper.JasperException: Exception in JSP: /fileupload.jsp:74

71: fileName= FilenameUtils.getName(fileName);
72: out.println("fileName saved="+fileName+"<br>");
73: File uploadedFile = new File(saveDirectory, fileName);
74: item.write(uploadedFile);
75: }
76: }
77: }

為什麼會有錯誤??

lionsgogo您好:
請您檢查一下在您網頁的根目錄下有沒有/upload這個目錄?
如果沒有的話跑出來的錯誤訊息應該會類似這樣子
HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /fileupload.jsp at line 74

71: fileName= FilenameUtils.getName(fileName);
72: out.println("fileName saved="+fileName+"<br>");
73: File uploadedFile = new File(saveDirectory, fileName);
74: item.write(uploadedFile);
75: }
76: }
77: }


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:404)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause

java.io.FileNotFoundException: D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\examples\upload\2009蓮藕粉訂單.txt (系統找不到指定的路徑。)
java.io.FileOutputStream.open(Native Method)
java.io.FileOutputStream.<init>(Unknown Source)
java.io.FileOutputStream.<init>(Unknown Source)
org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:416)
org.apache.jsp.fileupload_jsp._jspService(fileupload_jsp.java:133)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.20


請手動建立它,如果是在Linux上請設定為可寫入的權限(chmod 777 upload)。
victer0327您好:
這個問題我看不是很懂,於是我請教了我們公司資深的網頁設計師,他的回答如下:

不懂 ~~~
http://www.ilc.edu.tw/main/index.aspx 他這個
底下背景透著圖片 就只是個 background 而已啊
他所謂的字 是指 宜蘭縣教育處 營造快樂、成長 那些字?
還是底下那些文字?
如果是上面那些字 就做成圖就可以啦
如果是下面文字 就是秀在background上的文字
實在不太懂他的意思


所以要請您再確認一下您的問題是什麼或多舉幾個例子了。
如果對怎麼自己做出這種拋棄式信箱服務有興趣的話,也可以參考這篇
透過cPanel+IMAP&POP3實作10分鐘時效的電子信箱
http://fishyes.tw/2009/06/howto/php-10min-mail/
今天發現有會員用這個來註冊本站的會員帳號,可能是廣告信滿天飛的年代,大家都要避免留下電子郵件信箱給不可靠的網站。如果有需要的人就參考一下吧,網址如下:
http://10minutemail.com/10MinuteMail/

詳細使用方法請參考這篇:
http://matisblog.com/?p=586

最後,重申一次,本站目前並未寄送任何廣告信給會員。您所註冊的電子郵件信箱最多只會收到本站每週的討論區週報。由於目前使用Gmail作為發信機制,只有500位會員可以收到,如果您對本站還沒有任何信任之前,建議您不要註冊成為本站之會員,以免佔用名額。為維護其他會員的權益,站長還是秉持一樣的原則,凡是使用這種拋棄式之帳號一律立即封鎖。

參考資料:
http://jinnsblog.blogspot.com/2008/10/temporary-disposable-email.html
NetScreen的文件--概念與範例 ScreenOS 參考指南 第3卷 管理下面兩個章節中提到了一些不錯的資訊:
管理
-- 透過指令行介面進行管理
----安全 Shell
----安全副本
範例: SSHv1 使用 PKA 進行自動登入
在此範例中,請您 ( 作為根管理員) 為自動執行指令碼的遠端主機設定 SSHv1 公開
金鑰確認 (PKA)。此遠端主機存取裝置的唯一目的是每天晚上下載設定檔。由於驗
證是自動進行的,因此 SSH 用戶端登入到裝置時不需要人員操作


安全副本 (SCP) 提供了一個途徑,使遠端用戶端能使用 SSH 通訊協定與安全性裝
置交換檔案。(SSH 通訊協定為 SCP 連接提供驗證、加密和資料完整性。) 裝置作
為一個 SCP 伺服器,接受來自遠端主機上的 SCP 用戶端的連接。
SCP 要求在開始檔案傳輸之前對遠端用戶端進行驗證。SCP 驗證程序與用於驗證
SSH 用戶端的程序完全相同。可以用密碼或 PKA 金鑰來驗證 SCP 用戶端。一旦驗
證該 SCP 用戶端後,就可以向裝置傳輸或從中傳輸一個或多個檔案。SCP 用戶端
應用程式確定用於指定來源和目的地檔案名稱的準確方法;請參閱 SCP 用戶端應
用程式文件。
在裝置上預設為停用 SCP。若要啟用 SCP,還必須啟用 SSH。

下面是一個 SCP 用戶端指令的範例,該指令將組態檔案從 NetScreen 裝置 ( 管理員
名稱是 "juniper",IP 位址是 10.1.1.1)上的快閃記憶體中複製到用戶端系統的
"ns_sys_config_backup" 檔案
中:
scp juniper@10.1.1.1:ns_sys_config ns_sys_config_backup

我們可以用Linux 上的scp的指令來取得NS500的config
scp netscreen@192.168.1.254:ns_sys_config ns500_20100226.cfg

然後只要再完成讓由Linux 透過SSH連線防火牆時不需再輸入帳號密碼就可以達到自動備份的目的了。

要免驗證自動登入的方法如下:
1. 在 SSH 用戶端上,使用金鑰產生程式來產生公開和私人金鑰對。( 該金鑰對是
用於 SSHv1 的 RSA 或用於 SSHv2 的 DSA。

參考http://www.andowson.com/posts/list/191.page的方法,產生public/private dsa key pair檔案
cd ~/.ssh
ssh-keygen -d


2. 將公開金鑰從本機 SSH 目錄移到 TFTP 伺服器上的目錄,然後啟動 TFTP 程式。

將id_dsa.pub上傳到Windows主機上的TFTP伺服器,例如放到上例中的C:\tftp目錄下

3. 登入到裝置,以便可透過 CLI 對其進行設定。


4. 要將公開金鑰從 TFTP 伺服器載入到裝置,請輸入以下的其中一個 CLI 指令:
對於 SSHv1:
exec ssh tftp pka-rsa [ username name ] file-name name_str ip-addr
tftp_ip_addr
對於 SSHv2:
exec ssh tftp pka-dsa [ user-name name ] file-name name_str ip-addr
tftp_ip_addr
username 或 user-name 選項僅用於根管理員,因此只有根管理員可以將 RSA
金鑰連結到另一個管理員。當您 ( 作為根管理或讀/ 寫管理) 只輸入指令而沒
有輸入使用者名稱時,裝置將金鑰連結到您自己的管理帳號;也就是將金鑰連
結到輸入指令的管理。

exec ssh tftp pka-dsa file-name id_dsa.pub ip-addr 172.16.34.14


完成後,在Linux主機上執行
scp netscreen@192.168.1.254:ns_sys_config ns500_20100226.cfg

看是否可以成功複製組態檔。如果防火牆不允許用netscreen這個帳號進行scp,則可另外建立一個帳號,例如cfg,然後將公鑰匯入到該帳號去。
exec ssh tftp pka-dsa user-name cfg file-name id_dsa.pub ip-addr 172.16.34.14

然後scp指令稍微改一下,變成:
scp cfg@192.168.1.254:ns_sys_config ns500_20100226.cfg

接下來就很簡單了,寫支shell script來自動取得系統日期並呼叫scp指令,然後到crontab去設定該shell script自動執行的時間即可。

參考資料
http://www.juniper.net/techpubs/software/screenos/screenos5.3.0/translated/Traditional/Ce_v3_tc.pdf
最近想要測試重複執行某個動作非常多次,結果是否一致時(例如發送100封信是否每封都有收到),需要能控制跑迴圈的次數,找到了下面的方法:
for /l %%i in (1 1 100) do (echo %%i)

參考資料:
我想寫一個做50,000次的DOS batch for loop
由於公司資安規定需要定期備份防火牆的組態設定檔,如果每個月都要進到Web介面去操作一次,點來點去也是滿花時間的;另外一個作法是登入命令列界面,然後手動去下 save config from flash to tftp x.x.x.x filename 這個指令,雖然是比較快速了些,但總是感覺多一件事情在身上,到時要是別的事忙起來,還是怕會忘記。

由於懶惰是人的天性,所以總是會想如何把事情自動化,於是我就想用ant的telnet task來自動登入Firewall並執行save config指令,方法大致如下:
1.在備份用的主機上架設TFTP Server
2.下載及安裝JRE、Ant 1.7.1及telnet task所需之commons-net套件。
3.編輯一個build.xml及一個build.properties檔案
4.執行 ant 看是否可正常備份
5.寫一個批次檔將該ant指令包裝起來
6.設定自動執行該批次檔

底下再簡單說明一下上述步驟
1.安裝TFTP Server可以參考這篇http://www.andowson.com/posts/list/184.page,去下載tftpd32 service edition (installer),安裝完成後,手動建立一個C:\tftp的目錄,並把tftp的根目錄(Base Directory)設定到C:\tftp(設定完成建議重開機測試看看,以免日後作WindowsUpdate重開機之後目錄的設定跑掉,造成備份失敗)

2.將把下載來的ant zip檔解壓縮到C:\底下,設定環境變數ANT_HOME指向安裝的目錄,並在Path變數加上%ANT_HOME%\bin。然後把commons-net的jar檔放到ANT_HOME的lib目錄下。

3.可以參考底下兩個範例,將這兩個檔案存到C:\下
build.xml範例如下:
<?xml version="1.0" encoding="Big5" ?>

<project name="backup" default="ns500" basedir=".">
	<description>Network Switch Config Backup</description>

	<!-- Enable access to build.properties variables -->
	<property file="build.properties" />
	<property name="backup.root.dir" value="C:\Documents and Settings\andowson\My Documents\config" />
	<property name="ns500.backup.dir" value="${backup.root.dir}\Firewall\${ns500.ip}" />
	<property name="tftp.root" value="C:\tftp" />

	<!-- Init -->
	<target name="init" description="Create backup directory">
		<tstamp>
			<format property="TODAY" pattern="yyyyMMdd" />
		</tstamp>

		<mkdir dir="${backup.root.dir}" />
		<mkdir dir="${backup.root.dir}\Firewall" />
		<mkdir dir="${backup.root.dir}\Firewall\${ns500.ip}" />
	</target>
	
  <!-- Backup NS500 Config -->
  <target name="ns500" depends="init" description="Backup ns500 config">
		<property name="ns500.cfg" value="ns500_${TODAY}.cfg" />

		<telnet server="${ns500.ip}">
     <read timeout="5">login: </read>
     <write>${firewall.username}</write>
     <read timeout="5">password: </read>
     <write>${firewall.password}</write>
     <read timeout="5">-> </read>
     <write>save config from flash to tftp ${tftp.host} ${ns500.cfg}</write>
     <read timeout="30">TFTP Succeeded</read>  
     <write>exit</write>     
    </telnet>
    <move file="${tftp.root}\${ns500.cfg}" todir="${ns500.backup.dir}" />
  </target>

</project>


build.properties範例如下:請視您真正的情況修改對應的參數值,下列例子中我們的TFTP主機IP是172.16.34.14,防火牆NS500的IP是192.168.1.254。
tftp.host=172.16.34.14
ns500.ip=192.168.1.254
firewall.username=netscreen
firewall.password=netscreen


4.開啟一個DOS命令列視窗,然後切換到build.xml及build.properties所存放的目錄下,接著執行
ant ns500

5.將上述動作編輯成一個backup_config.bat
@echo off
cd C:\
ant ns500


6.執行附屬應用程式>系統工具>排定的工作,然後選到C:\backup_config.bat這個檔案,並設定執行的條件及頻率。

要注意的地方:
NetScreen上要先啟動Telnet存取,並將備份主機的IP加入到防火牆允許的管理IP。
目前實際測試後發現Ant 1.8.0無法正常執行,請使用Ant 1.7.1。
依據Tomcat的網站上的說法http://wiki.apache.org/tomcat/FAQ/Logging#Q6
System.out 和 System.err 都被列印到 catalina.out。
catalina.out 不會 rotate。
如果您使用了 logging 機制,就不會有任何東西被寫到標準輸出了,所以這應該不會是個問題。

可是實際上發現,雖然有設了log4j之類的 logging 機制,但寫程式的人如果還是寫成System.out.println()或是遇到exception時都來個e.printStackTrace(),這些輸出最後還是通通送到catalina.out去了。日子久了,這個檔案還是會日漸變大起來,如果沒有加以管理最後就會長大成好幾GB的龐然大物。(這時千萬不要再用vi去開它了。)

網路上找了一下,針對在Linux環境下執行Tomcat的部份,發現有個不錯的工具軟體cronolog可以協助Web Server之類的做 log 檔的 rotate,詳細的運作原理可能大家得自己去這個網站上查,我的認知大致如下:
Tomcat先把輸出寫到 console(標準輸出) 然後透過 pipe (|) 轉為 cronolog 的輸入,由cronolog針對一個事先給定的檔名的命名規則,去過濾資料,定期關閉舊檔,然後再開啟新檔。如果我們將檔名的命名規則設為catalina.out.%Y-%m-%d,就可以做到每天開一個新的catalina.out.yyyy-mm-dd的檔案了。

以下是簡單的過程說明:
1.安裝cronolog
2.修改catalina.sh
3.重新啟動Tomcat

1.安裝cronolog
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make
make install

用which cronolog可以查到安裝的路徑,預設應該是/usr/local/sbin/cronolog,這個路徑待會在修改catalina.sh時會用到。

2.修改catalina.sh
以Tomcat 6.0.24的版本為例

if [ -z "$CATALINA_OUT" ] ; then
  CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi

修改為
if [ -z "$CATALINA_OUT" ] ; then
  CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d
fi


touch "$CATALINA_OUT"

改為
#touch "$CATALINA_OUT"


org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT"  2>&1 &

修改為
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &


3.重新啟動Tomcat
service tomcat restart
可以在Tomcat的logs目錄底下找到以系統日期為結尾的catalina.out.yyyy-mm-dd的檔案,這樣子就成功了。
後續就是持續觀察看看是不是每天都有產生一個新的catalina.out.yyyy-mm-dd檔案。然後再安排定期刪除這些較舊的log檔即可。

參考資料:
http://jiessiedyh.javaeye.com/blog/418316
http://www.camelrichard.org/rotating-catalina-out-tomcat-5-5-using-cronolog
使用 Gmail 的 SMTP 發信(通過TLS port: 587)
程式碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="org.apache.commons.mail.DefaultAuthenticator" %>
<%@ page import="org.apache.commons.mail.Email" %>
<%@ page import="org.apache.commons.mail.EmailException" %>
<%@ page import="org.apache.commons.mail.HtmlEmail" %>
<%
    String subject="測試使用 Gmail SMTP TLS發信";
    String message = "<html><head><title>測試</title></head><body>這是一封測試信,收到請自行刪除</body></html>"; 

    Email email = new HtmlEmail(); 
	String authuser = "username@gmail.com"; 
	String authpwd = "the_password";
	email.setHostName("smtp.gmail.com");
	email.setSmtpPort(587); 
	email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd));
	email.setDebug(true);
	email.setTLS(true);
	email.setSslSmtpPort("587");
	email.setCharset("UTF-8");
	email.setSubject(subject);
	try {
	    email.setFrom("username@gmail.com", "網站客服中心");
	    email.setMsg(message); 
	    email.addTo("somebody@30elite.com", "親愛的會員");
	    email.send();
	    out.println("郵件發送成功"); 
	} catch (EmailException e) {
	    e.printStackTrace();
	}	
%>
使用 Gmail 的 SMTP 發信(通過SSL port: 465)
程式碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="org.apache.commons.mail.DefaultAuthenticator" %>
<%@ page import="org.apache.commons.mail.Email" %>
<%@ page import="org.apache.commons.mail.EmailException" %>
<%@ page import="org.apache.commons.mail.HtmlEmail" %>
<%
    String subject="測試使用 Gmail SMTP SSL發信";
    String message = "<html><head><title>測試</title></head><body>這是一封測試信,收到請自行刪除</body></html>"; 

    Email email = new HtmlEmail(); 
	String authuser = "username@gmail.com"; 
	String authpwd = "the_password";
	email.setHostName("smtp.gmail.com");
	email.setSmtpPort(465); 
	email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd));
	email.setDebug(true);
	email.setSSL(true);
	email.setSslSmtpPort("465");
	email.setCharset("UTF-8");
	email.setSubject(subject);
	try {
	    email.setFrom("username@gmail.com", "網站客服中心");
	    email.setMsg(message); 
	    email.addTo("somebody@30elite.com", "親愛的會員");
	    email.send();
	    out.println("郵件發送成功"); 
	} catch (EmailException e) {
	    e.printStackTrace();
	}	
%>


參考資料:
http://stackoverflow.com/questions/1783710/sending-an-email-using-commons-email-to-gmail
teva您好:
請問你CentOS的語系用的是甚麼?
可以打locale指令查到
我的是LANG=zh_TW.UTF-8
如果你的不是,你可以修改/etc/sysconfig/i18n這個檔案,然後重開機。

另外要看OpenMeetings的log檔,您可以看一下/var/red5/nohup.out這個檔案及/var/red5/log底下的檔案。
今天把升級OpenMeetings的shell script整理了一下,這樣子以後要更新就更快了,需要注意的地方就是
有關REVISION的版本數字要自己從Nightly Build網站http://i4demo.com/openmeetings/builds/去觀察,
找出其最新日期的目錄的數字DIR,例如2010年2月6日對應到目錄104,然後切換進去就可以查到openmeetings_r2886.zip,這個2886就是我們要的REVISION。

openmeetings-upgrade.sh:
#!/bin/bash
# Name: openmeetings-upgrade.sh
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 1.0
# Since: 2010-02-07
# Last Modified: 2010-02-07
#
# install OpenMeetings with Red5
#
REVISION=2886
DIR=104
TARGET=openmeetings_r${REVISION}
FILENAME=${TARGET}.zip
TODAY=`date +%Y%m%d`
cd /root/setup/openmeetings
if [ ! -r ${FILENAME} ]; then
   wget http://i4demo.com/openmeetings/builds/${DIR}/${FILENAME}
fi
unzip ${FILENAME} -d ${TARGET}

# modify hibernate.cfg.xml
cd ${TARGET}/webapps/openmeetings/conf
cp -fp postgres_hibernate.cfg.xml hibernate.cfg.xml
sed -i -e '7c\  <session-factory>' hibernate.cfg.xml
sed -i -e '9c\  <property name="connection.username">openmeetings</property>' hibernate.cfg.xml
sed -i -e '10c\  <property name="connection.password">openmeetings</property>' hibernate.cfg.xml

cd /var/red5
./red5-shutdown.sh
cd ..
mv /var/red5 /var/red5_${TODAY}
mv /root/setup/openmeetings/${TARGET} /var/red5
#
# start up red5
#
chmod 755 /var/red5/red5*.sh
cd /var/red5
nohup ./red5.sh &


使用方式:
如果沒有,請先建立一個目錄/root/setup/openmeetings
將openmeetgins-upgrade.sh下載後至上述目錄並變更權限為可執行
chmod 755 /root/setup/openmeetings/openmeetings-upgrade.sh
然後執行下列指令即可
/root/setup/openmeetings/openmeetings-upgrade.sh
執行完會將先前版本的/var/red5更名為/var/red5_yyyymmdd
teva您好:
針對您的問題,我有自己測試了一下在我網站上安裝的版本(openmeetings_1_0_r2688.zip實際運作的情形
Q1:上傳ppt,可以上傳成功,轉換成pdf,但是pdf轉換成jpg時,如果檔案頁數較多,有遇到timeOut的問題。這個問題已經有網友反應了:
http://code.google.com/p/openmeetings/issues/detail?id=1074
目前作者表示已經將Timeout時間由一分鐘調整為20分鐘。這部份我安裝了新的版本(Nightly Builds),實測發現,確實已經解決了。
Q2:註冊時沒遇到無效的電子郵件問題
如果您需要,可以在我的網站上測試您有問題的那個ppt,及註冊帳號問題。網址如下:
http://www.andowson.com:5080/openmeetings/

另外您提供的資訊過少,一般通常需要提供您安裝系統環境資訊跟軟體版本,以及log file,最好包含引發障礙的那個ppt檔,才能更精確的找出原因。
http://developer.spikesource.com/wiki/index.php/Projects:TestGen4J

http://www.testingfaqs.org/
 
討論區首頁 » 個人資料 andowson » 文章發表人是 andowson
前往:   

交換連結乌托邦博客 
在本站刊登廣告
練功房推薦書單
這一生,至少當一次傻瓜─木村阿公的奇蹟蘋果 Learning jQuery中文版 SCJP Java 6專業認證手冊 Java認證SCJP 6.0/5.0--猛虎出閘 人月神話:軟體專案管理之道(20週年紀念版) SCWCD專業認證手冊 Head First Servlets and JSP
[版權說明] 歡迎部分引用本站文章但不歡迎全文轉載,請遵守本站授權方式:創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款。換句話說,您可以轉載、轉寄、引用本站文章,但請附上作者、出處與原文的超連結。除個人收藏外,請勿全文轉載,感謝大家!
Creative Commons License
Powered by JForum 2.1.9 © JForum Team