A. javaweb的跳轉問題
通俗來說,form表單是寫在前端頁面(如html、jsp)上的,<form>有一個『action』的參數,這里需要填寫目標地址,如果不填寫的話客戶端是不知道往哪裡發送信息的,因此form是由客戶端主動發送給伺服器(具體的地址就是action索要填的值)的。這屬於客戶端向伺服器發起請求,代碼表現為:
<form
action='10086.jsp' method='get' >
…………
</form>
就像你打10086,你問問題(提交表單),客服(伺服器)會根據你的問題(form)反饋答案。同理,正常來說,後台接收到前端發來的信息後,會進行一系列操作,最後發送結果回去。
====分割線====
而轉發和重定向的代碼是寫在後台代碼里的,因為並不是所有的業務都由同一個後台頁面處理(例如統一管理平台),前端form填的是頁面A,但實際上頁面A在接收到form後並不進行處理,而是通過轉發或者重定向的方式,發送給頁面B,頁面B處理後會把結果發送給A,然後A再反饋給前端。因此,這屬於伺服器向伺服器發起請求
轉發的代碼是request.getrequestdispatcher (10086-2.jsp).forward(request,response),特點是url不會變,客戶端無法判斷是form表單的後台頁面在處理還是別的頁面在處理(你在瀏覽器上是無法知道10086-2.jsp這個頁面的存在)。就像10086客戶有時候會讓你稍等,等待期間你是不知道他是在敲電腦還是找外援尋求答案。
重定向的代碼是response.sendRedirect("10086-2.jsp"),特點是url會變。瀏覽器的地址欄會明顯看到地址發生改變。就像10086客服告訴你該問題不是他負責的范圍,然後幫你轉接到其他相應的客戶。
至於怎麼判斷啥時候使用轉發,啥時候使用重定向,還請理解jsp的四大作用域之後再回頭思考。
B. Java解析 form 表單
Stringtemp="<formname='form1'method='post'action='null'><inputtype='hidden'name='Retdesc'value='parameterserror'></form><script>document.form1.submit();</script>";
Stringreg="name\s*\=\s*[\w'"&&[^\>]]+|value\s*\=\s*[\w'"\s&&[^\>]]+";
Patternpattern=Pattern.compile(reg);
Matchermatcher=pattern.matcher(temp);
while(matcher.find())
{
System.out.println(matcher.group());
}