1. 服务端
doPost(){
doGet(request,response);
}
2. Post方式不在URL后面加数据,而是用流的方式传递;GET在URL后传输数据
3. 是否传递---请求头:setRequestProperty();
MainActivity中:
- public void doPost(View v) {
- final String userName = etUserName.getText().toString();
- final String password = etPassword.getText().toString();
- new Thread(new Runnable() {
- @Override
- public void run() {
- final String state = NetUtils.loginOfPost(userName, password);
- // 执行任务在主线程中
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- // 就是在主线程中操作
- Toast.makeText(MainActivity.this, state, 0).show();
- }
- });
- }
- }).start();
- }
loginOfPost方法:
- /**
- * 使用post的方式登录
- * @param userName
- * @param password
- * @return
- */
- public static String loginOfPost(String userName, String password) {
- HttpURLConnection conn = null;
- try {
- URL url = new URL("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet");
- conn = (HttpURLConnection) url.openConnection();
- conn.setRequestMethod("POST");
- conn.setConnectTimeout(10000); // 连接的超时时间
- conn.setReadTimeout(5000); // 读数据的超时时间
- conn.setDoOutput(true); // 必须设置此方法, 允许输出****** 默认情况下, 系统不允许向服务器输出内容
- / conn.setRequestProperty("Content-Length", 234); // 设置请求头消息, 可以设置多个
- // post请求的参数
- String data = "username=" + userName + "&password=" + password;
- // 获得一个输出流, 用于向服务器写数据, 默认情况下, 系统不允许向服务器输出内容
- OutputStream out = conn.getOutputStream();
- out.write(data.getBytes());
- out.flush();
- out.close();
- int responseCode = conn.getResponseCode();
- if(responseCode == 200) {
- InputStream is = conn.getInputStream();
- String state = getStringFromInputStream(is);
- return state;
- } else {
- Log.i(TAG, "访问失败: " + responseCode);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if(conn != null) {
- conn.disconnect();
- }
- }
- return null;
- }
根据流返回一个字符串信息;
- /**
- * 根据流返回一个字符串信息
- * @param is
- * @return
- * @throws IOException
- */
- private static String getStringFromInputStream(InputStream is) throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int len = -1;
- while((len = is.read(buffer)) != -1) {
- baos.write(buffer, 0, len);
- }
- is.close();
- String html = baos.toString(); // 把流中的数据转换成字符串, 采用的编码是: utf-8
- // String html = new String(baos.toByteArray(), "GBK");
- baos.close();
- return html;
- }