tomcat 架設
xml + xsl 轉成html
java 修改xml
java servlet 丟出網頁
xml + xsl 轉成html
java 修改xml
java servlet 丟出網頁
整學期內容一次解決~
其實一篇文章下東西不應該太雜~不過我好懶喔~
所以只好隨便記一記勒
預備知識的html 、xml、xsl、xpath該怎麼寫
請移駕去看w3cschool
這篇算是筆記比較大略的東西
以上~
之後又是要新增環境變數了
(以下請依照實際安裝目錄更改)
JAVA_HOME
C:\Program Files\Java\jdk1.7.0_02
Path
C:\Program Files\Java\jdk1.7.0_02\bin
ClassPath (不一定需要)
servlet-api.jar 的位置
﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍
新增好後就可以開啟
C:\apache-tomcat-6.0.35\bin下的
startup.bat 看能不能正常啟動勒
跳出一個java視窗成功
打開瀏覽器輸入
http://127.0.0.1:8080
or
http://localhost:8080
看看有沒有畫面
第二步:撰寫xml跟xsl轉出網頁
首先要把xml先寫出來~確認好後先寫一個html確認想轉成什麼樣子
再開始寫xsl比較好~這邊要一次考慮三個地方
1. xsl撰寫 2.html 撰寫 3. 之後post給java是否可行
xml不是重點所以~有需要再打開
首先要把xml先寫出來~確認好後先寫一個html確認想轉成什麼樣子
再開始寫xsl比較好~這邊要一次考慮三個地方
1. xsl撰寫 2.html 撰寫 3. 之後post給java是否可行
xml不是重點所以~有需要再打開
xml全文
先寫html決定排版跟如何post回傳~
一般來說要在不同網頁傳遞就是塞一個form包起來像這樣
<form action="form_action" method="post">
<p>First name: <input name="fname" /></p>
<p>Last name: <input name="lname" /></p>
<input value="Submit" />
</form>
但由於我的新增有一個是不定數量~所以只好改用javascript 動態新增表單
範例:
function postAddcon5(oid) //函數
{
var form = document.createElement("form");
form.setAttribute("method", "POST");
form.setAttribute("action", "Update"); //Update 為目標網頁
var text=prompt("請輸入新title?","");
//創造一個input,name丟資料
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "id");
hiddenField.setAttribute("value",oid);
form.appendChild(hiddenField);//掛在剛剛創的form
document.body.appendChild(form);//掛回網頁
form.submit(); //直接送出XD
}
一般來說要在不同網頁傳遞就是塞一個form包起來像這樣
<form action="form_action" method="post">
<p>First name: <input name="fname" /></p>
<p>Last name: <input name="lname" /></p>
<input value="Submit" />
</form>
但由於我的新增有一個是不定數量~所以只好改用javascript 動態新增表單
範例:
function postAddcon5(oid) //函數
{
var form = document.createElement("form");
form.setAttribute("method", "POST");
form.setAttribute("action", "Update"); //Update 為目標網頁
var text=prompt("請輸入新title?","");
//創造一個input,name丟資料
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "id");
hiddenField.setAttribute("value",oid);
form.appendChild(hiddenField);//掛在剛剛創的form
document.body.appendChild(form);//掛回網頁
form.submit(); //直接送出XD
}
JS全文(包含一些雜七雜八的)
確定好網頁後~就可以著手撰寫xsl了
雖然xsl的好處是資料導向~input可以比較有彈性~不過考量到這部份不是我來寫
所以直接叫他只創一條根的規則~直接比較程序導向即可
大致像這樣
<xsl:template match="/">
無腦打html語法
<xsl:for-each select="需要的節點xpath">
//創造html語法複雜版~需要的原因是" 跟 ' 只有兩個不夠用
<xsl:element name="input">
<xsl:attribute name="type">textbox</xsl:attribute>
<xsl:attribute name="name">text</xsl:attribute>
<xsl:attribute name="value"></xsl:attribute>
<xsl:attribute name="id">text_<xsl:value-of select="./@VI:id"/></xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:template>
那串複雜版會變成
<input type="textbox" id="author_L1BbJ0xVL4I" value="" name="author">
其中<xsl:value-of select="./@VI:id"/> 代表抓取該節點的屬性值~稍微對照一下應該很好懂
雖然xsl的好處是資料導向~input可以比較有彈性~不過考量到這部份不是我來寫
所以直接叫他只創一條根的規則~直接比較程序導向即可
大致像這樣
<xsl:template match="/">
無腦打html語法
<xsl:for-each select="需要的節點xpath">
//創造html語法複雜版~需要的原因是" 跟 ' 只有兩個不夠用
<xsl:element name="input">
<xsl:attribute name="type">textbox</xsl:attribute>
<xsl:attribute name="name">text</xsl:attribute>
<xsl:attribute name="value"></xsl:attribute>
<xsl:attribute name="id">text_<xsl:value-of select="./@VI:id"/></xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:template>
那串複雜版會變成
<input type="textbox" id="author_L1BbJ0xVL4I" value="" name="author">
其中<xsl:value-of select="./@VI:id"/> 代表抓取該節點的屬性值~稍微對照一下應該很好懂
xsl全文
第三部:Java Servlet程式部份
首先要寫servlet程式必須要有servlet-api.jar
要修改xml也需要另外的jar檔.....請自行想辦法抓並放到正確的路徑(lib裡面)
不然 import 一定會出錯
首先最簡單得把剛剛得xsl轉出的網頁顯示出來
首先要寫servlet程式必須要有servlet-api.jar
要修改xml也需要另外的jar檔.....請自行想辦法抓並放到正確的路徑(lib裡面)
不然 import 一定會出錯
首先最簡單得把剛剛得xsl轉出的網頁顯示出來
那一連串的import不解釋首先
protected void service(HttpServletRequest req, HttpServletResponse res )
是此程式的進入點請注意~
HttpServletRequest 剛剛post過來的東西要利用這個來獲得
HttpServletResponse 這個就是丟出什麼囉
factory.setNamespaceAware(true);//設定處理命名空間
factory.setValidating(true);//利用dtd驗證
關於更多DocumentBuilderFactory相關請移駕去看文件
值得注意的部份有如何取得檔案的正確路徑那邊~還有請務必開頭就try catch~
protected void service(HttpServletRequest req, HttpServletResponse res )
是此程式的進入點請注意~
HttpServletRequest 剛剛post過來的東西要利用這個來獲得
HttpServletResponse 這個就是丟出什麼囉
factory.setNamespaceAware(true);//設定處理命名空間
factory.setValidating(true);//利用dtd驗證
關於更多DocumentBuilderFactory相關請移駕去看文件
值得注意的部份有如何取得檔案的正確路徑那邊~還有請務必開頭就try catch~
之後是檔案該放在哪裡
首先整個專案檔應該放置再
apache-tomcat-6.0.35\webapps底下~那個地方的index.htm會被內定成首頁
也就是說再瀏覽器打上http://localhost:8080/專案名稱/
會自動顯示index.htm
.java的原始碼應該放在apache-tomcat-6.0.35\webapps\專案名稱\WEB-INF\src下
編譯好的.class應該放在apache-tomcat-6.0.35\webapps\oldnick\WEB-INF\classes下
整個網站用的web.xml 放在apache-tomcat-6.0.35\webapps\oldnick\WEB-INF下
另外虛擬路徑也是在上面得xml檔上設
<servlet>
<servlet-name>AddVideo</servlet-name>
<servlet-class>AddVideo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddVideo</servlet-name>
<url-pattern>/AddVideo</url-pattern>
</servlet-mapping>
像這樣~
首先整個專案檔應該放置再
apache-tomcat-6.0.35\webapps底下~那個地方的index.htm會被內定成首頁
也就是說再瀏覽器打上http://localhost:8080/專案名稱/
會自動顯示index.htm
.java的原始碼應該放在apache-tomcat-6.0.35\webapps\專案名稱\WEB-INF\src下
編譯好的.class應該放在apache-tomcat-6.0.35\webapps\oldnick\WEB-INF\classes下
整個網站用的web.xml 放在apache-tomcat-6.0.35\webapps\oldnick\WEB-INF下
另外虛擬路徑也是在上面得xml檔上設
<servlet>
<servlet-name>AddVideo</servlet-name>
<servlet-class>AddVideo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddVideo</servlet-name>
<url-pattern>/AddVideo</url-pattern>
</servlet-mapping>
像這樣~
繼續完成修改xml得部份~
先假設已經會再本地端修改xml了~而且是有好好分成幾個函數來方便處理
這樣改成網頁版只要實作protected void service(HttpServletRequest req, HttpServletResponse res )
會用
ServletContext context = getServletContext();
xml_file_name = context.getRealPath("youtube.xml"); 取得正確的路徑
會用
(String)req.getParameter("id");
取得剛剛post過來的資料
就直接把東西丟給原本本地端寫好的函數處理就可以了
最後修改好xml再把網頁導回顯示頁面
res.sendRedirect("home");
即可~大功告成
值得注意的是如果直接拿本地版本的java檔改的話記得不能有main函數
﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍
如果不會改xml ......就利用
Element root = doc.getDocumentElement(); 取得根元素
createElementNS //創造節點
setAttributeNS//創造屬性
createTextNode//創造純文字節點
appendChild //把節點相接~
removeChild //移除節點
自己亂試~應該還ok
而xml存檔只有這幾行
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
Source src = new DOMSource(doc);
Result dest = new StreamResult(new FileOutputStream(xml_file_name));
aTransformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, dtd_file_name);
aTransformer.transform(src, dest);
直接看原始碼最好理解~請依照進入點開始看~有呼叫函數再跳去
先假設已經會再本地端修改xml了~而且是有好好分成幾個函數來方便處理
這樣改成網頁版只要實作protected void service(HttpServletRequest req, HttpServletResponse res )
會用
ServletContext context = getServletContext();
xml_file_name = context.getRealPath("youtube.xml"); 取得正確的路徑
會用
(String)req.getParameter("id");
取得剛剛post過來的資料
就直接把東西丟給原本本地端寫好的函數處理就可以了
最後修改好xml再把網頁導回顯示頁面
res.sendRedirect("home");
即可~大功告成
值得注意的是如果直接拿本地版本的java檔改的話記得不能有main函數
﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍
如果不會改xml ......就利用
Element root = doc.getDocumentElement(); 取得根元素
createElementNS //創造節點
setAttributeNS//創造屬性
createTextNode//創造純文字節點
appendChild //把節點相接~
removeChild //移除節點
自己亂試~應該還ok
而xml存檔只有這幾行
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
Source src = new DOMSource(doc);
Result dest = new StreamResult(new FileOutputStream(xml_file_name));
aTransformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, dtd_file_name);
aTransformer.transform(src, dest);
直接看原始碼最好理解~請依照進入點開始看~有呼叫函數再跳去
addvideo.java全文
delete.java全文
以上~整學期內容完(絕對沒這回事!!)
其實我一直以為我之前應該有記一篇關於java如何去改xml的
結果居然沒有XD 那就算了反正照範例改一改很簡單
反正整個程式改完讓網站能跑也只花了一個晚上就完成了
包含改xsl 撰寫html 測試等等~
一開始本地端有寫成函式來個別處理改起來真輕鬆
更重要的是xml的內容決定得很單純程式就會變得超好寫的啦!!!
大致上應該就這樣~再次學術不經的得到一個技能勒(微妙)
還以為會順便學到jsp勒~看來是我想太多~以上