模擬 form 送出的 HTTP 請求和所代之參數,最後在取得回傳網頁的內容。
先來介紹一下 URLConnection 這個抽象類別,首先
它針對了與伺服器(HTTP伺服器)的互動提供了更多的方法和一些控制
通常都是透過 URL 的 openConnection() 取得 URLConnection,例如以下:
try{
URL url = new URL("http://tw.yahoo.com");
URLConnection conn = url.openConnection();
}
catch(MalformedURLException e){...}
catch(IOException e){...}
以上只是取得一個建構好的 URLConnection,並不是取得連線
要取得連線必須呼叫 connect() 方法,會拋出 IOException
接下來看一下程式:
import java.io.*;
import java.net.*;
public class useHttpURLConnection {
public static void main(String[] args) throws IOException{
URL myUrl = new URL("http://localhost:8084/Practices/login.jsp");
//取得 URLConnection
HttpURLConnection conn = (HttpURLConnection)myUrl.openConnection();
conn.setDoInput(true); //設定為可從伺服器讀取資料
conn.setDoOutput(true); //設定為可寫入資料至伺服器
conn.setRequestMethod("GET"); //設定請求方式為 GET
//以下是設定 MIME 標頭中的 Content-type
conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
conn.connect(); //開始連接
//透過 URLConnection 的 getOutputStream() 取的 OutputStream, 並建立以UTF-8 為編碼的 OutputStreamWriter
PrintWriter out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"), true);
//username和password為請求參數的名稱, args[0]和args[1]為參數值
out.print("username=" + URLEncoder.encode(args[0]) + "&password=" + URLEncoder.encode(args[1]));
out.flush(); //記得要清除緩衝區或關閉
//印出伺服器回應訊息
System.out.println("Response status : " + conn.getResponseMessage());
System.out.println("************************************");
String inputLine = "";
//利用 URLConnection 的 getInputStream() 取得 InputStream
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
while ((inputLine = reader.readLine()) != null){
System.out.println(inputLine); //印出結果
}
reader.close();
}
}
最後再撰寫一份 JSP,以form 的GET送出請求給本頁,並以本頁進行處理,大致內容如下:
//JSP 省略部份.....
<% //這邊是 JSP 的 Scriptlets
if(request.getParameter("username") != null && request.getParameter("password") != null)
{
String user = request.getParameter("username");
String pawd = request.getParameter("password");
response.setContentType("text/html;charset=UTF-8");
PrintWriter pout = null;
try{
pout = response.getWriter();
//以下是回應的訊息
pout.println("<p>帳號 : " + user +"</p>");
pout.println("<p>密碼 : " + pawd +"</p>");
}catch(Exception e){}
finally{
pout.close();
}
}
%>
//使用GET //action="" 表示以本頁處理請求
<form action="" method="GET" >
帳號 : <input type="text" name="username" /><br/>
密碼 : <input type="text" name="password" /><br/>
<input type="submit" value="送出" />
</form>
//JSP 省略部份.....
最後在CMD 下輸入 java useHttpURLConnection ayu780129 123456789
即可看到印出的結果
以下可以看到回傳的文件 將它印出
<p>帳號 :ayu780129</p>
<p>密碼 :123456789</p>
以上 你可以將請求送到另一張 JSP (我是將請求給本頁處理)
或是去網路上找找比較簡單的網站並觀察他的請求參數
並用上述方法模擬也可以
沒有留言:
張貼留言