今天在學習BBS的回覆頁面的過程當中,但願將待回覆的父貼的標題傳遞到回覆頁面,可是一直都出現問題,在解決問題的過程當中順便複習了一下頁面傳遞以及jsp的編碼問題。javascript
首先,jsp中傳遞參數有四種方法:
一、form表單
二、request.setAttribute();和request.getAttribute();
三、超連接:<a herf="index.jsp"?a=a&b=b&c=c>name</a>
四、經過forward進行request轉發java
<jsp:forward page="URL,flush="true"> <jsp:param name="Paramname" value="paramvalue"> </jsp:forward>
其中form表單通常須要submit提交,可是通過查閱資料發現,form能夠嵌套一個超連接,將須要提交的參數用隱藏域的方式提交過去,達到post點擊提交的目的。分兩種狀況:
A.超連接的提交地址和form表單的提交地址是一致的:chrome
<form name='form1' action='MyJsp2.jsp' method='post'> <input type='hidden' name='page' value='1'/> <input type='hidden' name='hiddenA' value='A'/> <a href='javascript:document.form1.submit();'>首頁</font></a> ... </form>
B.超連接的提交地址和form表單的提交地址不一致的:瀏覽器
<form name='form1' action='MyJsp2.jsp' method='post' id="form1"> <input type='hidden' name='page' value='1'/> <input type='hidden' name='hiddenA' value='A'/> <a href="javascript:post('index.jsp')">首頁</a> ... </form>
除此以外,jsp要通過3次的「編碼」,第1階段會用 pageEncoding
,第2階段會用utf-8至utf-8,第3階段就是由Tomcat出來的網頁, 用的是contentType
app
第1階段, 是jsp編譯成.java,它會根據pageEncoding的設定編碼jsp,結果是由指定的編碼方案翻譯JAVA源碼(即.java).
第2階段, 是由JAVAC的JAVA源碼至java byteCode的編譯,不論JSP編寫時候用的是什麼編碼方案,通過這個階段的結果所有是Unicode的編碼的.class文件
第3階段, 是Tomcat(或其的application container)載入和執行階段二的來的JAVA二進制碼,輸出的結果,也就是在客戶端見到的,這時隱藏在階段一和階段二的參數contentType中charset的設置就發揮了功效.jsp
最初的構想是,經過超連接url,使用get方式傳遞帖子的id,父貼pid以及父貼title三個參數,最終發現id和pid能夠正常傳遞,可是title是null或者亂碼。經過修改pageEncoding和contentType爲utf-8解決問題。可是utf8所佔位數較長,若是使用get方式傳遞參數容易遇到url過長的http400錯誤(不一樣瀏覽器能容許的長度不一樣,在ie中沒法打開,可是在chrome中卻能正常打開網頁)。
嘗試用form結合超連接以post方式傳遞字符串參數,注意form能夠包含 table 反之不成立
最後檢驗成功,方法可行。post