servlet为专门为后台调用而写的类,它由服务器容器调用,如tomcat
servlet生存周期:
1.servlet容器初始化时会加载该servlet
2.生成一个servlet对象,调用service的init方法进行初始化
3.当访问到达时,service会根据请求的类型选择调用doGet或者doPost方法
4.访问结束时,service调用destory,销毁该servlet对象
客户端访问时使用HttpURLConnection进行连接
下面是做的一个下载文件的demo:
服务器端:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletOutputStream outStream = response.getOutputStream();
File file = new File("D:\\workspace\\MyHttpTest\\src\\abc.txt");
FileInputStream fin = new FileInputStream(file);
int readData = -1;
while((readData = fin.read()) != -1){
outStream.write(readData);
}
outStream.close();
}
客户端:
public static void main(String[] args) throws IOException {
URL url = new URL("http://192.168.0.168:8088/MyHttpTest/servlet/MyHttp");
HttpURLConnection connect = (HttpURLConnection) url.openConnection();
connect.setRequestMethod("GET");
connect.setRequestProperty("Proxy-Connection", "Keep-Alive");
connect.setDoOutput(true);
connect.setDoInput(true);
InputStream inputs = connect.getInputStream();
DataInputStream din = new DataInputStream(inputs);
File file = new File("src\\abc.txt");
FileOutputStream fout = new FileOutputStream(file);
int readData = -1;
while((readData = din.read()) != -1){
fout.write(readData);
}
connect.disconnect();
}
HttpURLConnection请求时的参数配置
在发送POST请求时
URL url = new URL("http://192.168.0.168:8088/MyHttpTest/servlet/MyHttp");
HttpURLConnection connect = (HttpURLConnection) url.openConnection();
connect.setRequestMethod("POST");
connect.setRequestProperty( "charset", "utf-8");
connect.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connect.setDoOutput(true);
connect.setDoInput(true);
connect.setInstanceFollowRedirects( false );
String urlParameters = "param1=a¶m2=b¶m3=c";
byte[] postData = urlParameters.getBytes("UTF-8");
int postDataLength = postData.length;
connect.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
DataOutputStream wr = new DataOutputStream( connect.getOutputStream());
wr.write(postData);
postDataLength 需要设置正确,否则http服务会一直等待,最终会导致超时(没验证)。
在发送GET请求时
<pre name="code" class="java"><pre name="code" class="java">String u = "http://192.168.0.168:8088/MyHttpTest/servlet/MyHttp";
u+="?param1=a¶m2=b¶m3=c";
URL url = new URL(u);
服务端的参数获取:
String value = request.getParameter("param1");
servlet更加详细的流程可以参考这里