URL url = new URL(“http://localhost:8080/wappush/ServletTest”);
URLConnection uc = url.openConnection();
要读写连接,必须做相应设置:
uc.setDoInput(true);
uc.setDoOutput(true);
这两条语句的顺序可以随意。
如果本次连接既要发送数据也要获得响应,必须先调用了URLConnection的getOutputStream()方法,才能再调用getInputStream()方法,否则会产生异常:java.net.ProtocolException: Cannot write output after reading input.
只要调用了URLConnection的getOutputStream()方法,对应的Servlet就会执行doPost方法,如果只调用了getInputStream()方法,则对应的Servlet会执行doGet方法。如果不调用上述两个方法中的任何一个,则对应的Servlet不执行任何操作。
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletTest extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { System.out.println(getTimeString() + " doGet()"); } public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { System.out.println(getTimeString() + " doPost()"); } private String getTimeString() { return new SimpleDateFormat("HH:mm:ss").format(new Date()); } }
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(uc.getOutputStream())); StringBuffer sb = new StringBuffer(); sb.append("name=sam&age=26&phoneNumber=13632624392"); sb.append("&Text=test&url=http://wap.haoxi.com"); out.writeBytes(sb.toString()); out.flush(); out.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(uc.getInputStream())); reader.close();
对应的Servlet中,可以用以下方法
private void printParameters(HttpServletRequest req)
{
Enumeration e = req.getParameterNames();
String pName;
while (e.hasMoreElements())
{
pName = (String)e.nextElement();
System.out.println(pName + "=" + req.getParameter(pName));
}
}
得到输出结果:
name=sam
Text=test
url=http://wap.haoxi.com
phoneNumber=13632624392
age=26
<!--EndFragment-->