模擬 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 (我是將請求給本頁處理)
或是去網路上找找比較簡單的網站並觀察他的請求參數
並用上述方法模擬也可以
沒有留言:
張貼留言