【Android笔记】Android与服务器通信 http和socket两种形式

1、 http形式

服务器端建立:

EncodingFilter.java代码如下:

 1 package com.example;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.Filter;
 6
 7 import javax.servlet.FilterChain;
 8
 9 import javax.servlet.FilterConfig;
10
11 import javax.servlet.ServletException;
12
13 import javax.servlet.ServletRequest;
14
15 import javax.servlet.ServletResponse;
16
17 import javax.servlet.http.HttpServletRequest;
18
19 /**
20
21  * Servlet Filter implementation class EncodingFilter
22
23  */
24
25 public class EncodingFilter implements Filter {
26     /**
27
28      * Default constructor.
29
30      */
31
32     public EncodingFilter() {
33
34
35     }
36
37  /**
38
39   * @see Filter#destroy()
40
41   */
42
43  public void destroy() {
44
45  }
46
47
48  /**
49
50   * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
51
52   */
53
54  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
55
56   HttpServletRequest req = (HttpServletRequest) request;
57
58
59
60   if("GET".equals(req.getMethod())){
61
62    EncodingHttpServletRequest  wrapper = new EncodingHttpServletRequest(req);
63
64    chain.doFilter(wrapper, response);
65
66   } else {//post
67
68    req.setCharacterEncoding("UTF-8");
69
70    chain.doFilter(request, response);
71
72   }
73
74  }
75
76  /**
77
78   * @see Filter#init(FilterConfig)
79
80   */
81
82  public void init(FilterConfig fConfig) throws ServletException {
83
84
85  }
86
87 }

EncodingHttpServletRequest.java代码如下:

package com.example;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

public class EncodingHttpServletRequest extends HttpServletRequestWrapper {

 private HttpServletRequest request;

 public EncodingHttpServletRequest(HttpServletRequest request) {

  super(request);

  this.request = request;

 }

 @Override

 public String getParameter(String name) {

  String value = request.getParameter(name);

  if(value!=null){

   try {

    value = new String(value.getBytes("ISO8859-1"),"UTF-8");

   } catch (UnsupportedEncodingException e) {

    e.printStackTrace();

   }

  }

  return value;

 }

}

Servlet.java代码如下

 1 package com.example;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.ServletException;
 6
 7 import javax.servlet.http.HttpServlet;
 8
 9 import javax.servlet.http.HttpServletRequest;
10
11 import javax.servlet.http.HttpServletResponse;
12
13 import com.example.EncodingHttpServletRequest;
14
15 /**
16
17  * Servlet implementation class ManageServlet
18
19  */
20
21 public class servlet extends HttpServlet {
22
23  private static final long serialVersionUID = 1L;
24
25       /**
26
27      * @see HttpServlet#HttpServlet()
28
29      */
30
31     public servlet() {
32
33         super();
34
35     }
36
37  /**
38
39   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
40
41   */
42
43  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
44
45   String title = request.getParameter("title");
46
47   EncodingHttpServletRequest requsete = new EncodingHttpServletRequest(request);
48
49   String titlee = requsete.getParameter("title");
50
51   //把客户端传递过来的参数进行重新编码使之能支持中文
52
53   title = new String(title.getBytes("GB2312"),"UTF-8");//使用过滤器后就不需要每次都要进行此操作
54
55   String timelength = request.getParameter("timelength");
56
57   System.out.println("视频名称:"+titlee);
58
59   System.out.println("播放时长:"+timelength);
60
61  }
62
63  /**
64
65   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
66
67   */
68
69  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
70
71   String title = request.getParameter("title");
72
73   //把客户端传递过来的参数进行重新编码使之能支持中文
74
75   title = new String(title.getBytes("GB2312"),"UTF-8");//使用过滤器后就不需要每次都要进行此操作
76
77   String timelength = request.getParameter("timelength");
78
79   System.out.println("视频名称:"+title);
80
81   System.out.println("播放时长:"+timelength);
82
83  }
84 }

既然有servlet就不得不在web.xml中配置一下了

 1 <servlet>
 2
 3    <servlet-name>servlet</servlet-name>
 4
 5    <servlet-class>com.example.servlet</servlet-class>
 6
 7  </servlet>
 8
 9  <servlet-mapping>
10
11    <servlet-name>servlet</servlet-name>
12
13    <url-pattern>/servlet</url-pattern>
14
15   </servlet-mapping>

进行通信是必须先把服务器打开,所以先把servlet用tomcat打开,

http://localhost:8080/http_service/servlet

客户端建立:

Http_androidActivity.java代码

 1 package com.example.newsmanage;
 2 import android.app.Activity;
 3 import android.os.Bundle;
 4
 5 public class Http_androidActivity extends Activity {
 6     /** Called when the activity is first created. */
 7     @Override
 8     public void onCreate(Bundle savedInstanceState) {
 9
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.main);
12     }
13 }

NewsManageActivity.java代码

 1 package com.example.newsmanage;
 2
 3 import com.example.service.NewsService;
 4 import android.app.Activity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.Button;
 8 import android.widget.EditText;
 9 import android.widget.Toast;
10
11 public class NewsManageActivity extends Activity {
12     /** Called when the activity is first created. */
13  EditText titleText;
14  EditText lengthText;
15  Button button;
16
17     @Override
18     public void onCreate(Bundle savedInstanceState) {
19
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.main);
22
23         titleText = (EditText) this.findViewById(R.id.title);
24         lengthText = (EditText) this.findViewById(R.id.timelength);
25         button = (Button) this.findViewById(R.id.button);
26     }
27
28     public void save(View v) throws Exception{
29
30      String title = titleText.getText().toString();
31      String timelength = lengthText.getText().toString();
32
33      boolean result = NewsService.save(title,timelength);
34
35      if(result){
36
37       Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show();
38
39      } else {
40       Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_LONG).show();
41      }
42     }
43 }

NewsService.java代码

package com.example.service;

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

public class NewsService {
 /**

  * 保存数据,传递参数给web服务器端

  * @param title 标题

  * @param timelength 时长

  * @return

  */

 public static boolean save(String title, String timelength) throws Exception {

  //119.119.228.5为本机IP地址,不能用localhost代替

  String path = "http://192.168.1.5:8080/http_service/servlet";

  Map<String,String> params = new HashMap<String,String>();

  params.put("title", title);

  params.put("timelength", timelength);

  //get请求方式

  return sendGETRequest(path,params,"UTF-8");

  //post请求方式

  //return sendPOSTRequest(path,params,"UTF-8");

  //httpClient请求方式,如果单纯传递参数的话建议使用GET或者POST请求方式

  //return sendHttpClientPOSTRequest(path,params,"UTF-8");//httpclient已经集成在android中

 }

 /**

  * 通过HttpClient发送post请求

  * @param path

  * @param params

  * @param encoding

  * @return

  * @throws Exception

  */

 private static boolean sendHttpClientPOSTRequest(String path,

   Map<String, String> params, String encoding) throws Exception {

  List<NameValuePair> pairs = new ArrayList<NameValuePair>();//存放请求参数

  for(Map.Entry<String, String> entry:params.entrySet()){

   pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));

  }

  //防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8

  UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,encoding);

  HttpPost httpPost = new HttpPost(path);

  httpPost.setEntity(entity);

  DefaultHttpClient client = new DefaultHttpClient();

  HttpResponse response = client.execute(httpPost);

  if(response.getStatusLine().getStatusCode() == 200){

   return true;

  }

  return false;

 }

 /**

  * 放松post请求

  * @param path 请求路径

  * @param params 请求参数

  * @param encoding 编码

  * @return 请求是否成功

  */

 private static boolean sendPOSTRequest(String path,

   Map<String, String> params, String encoding) throws Exception{

  StringBuilder data = new StringBuilder(path);

  for(Map.Entry<String, String> entry:params.entrySet()){

  data.append(entry.getKey()).append("=");

   //防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8

  data.append(URLEncoder.encode(entry.getValue(),encoding));

   data.append("&");

  }

  data.deleteCharAt(data.length() - 1);

  byte[] entity = data.toString().getBytes();//得到实体数据

  HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();

  conn.setConnectTimeout(5000);

  conn.setRequestMethod("POST");

  conn.setDoOutput(true);//设置为允许对外输出数据

 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

 conn.setRequestProperty("Content-Length", String.valueOf(entity.length));

  OutputStream outStream = conn.getOutputStream();

  outStream.write(entity);//写到缓存

  if(conn.getResponseCode()==200){//只有取得服务器返回的http协议的任何一个属性时才能把请求发送出去

   return true;

  }

  return false;

 }

 /**

  * 发送GET请求

  * @param path 请求路径

  * @param params 请求参数

  * @return 请求是否成功

  * @throws Exception

  */

 private static boolean sendGETRequest(String path,

   Map<String, String> params,String encoding) throws Exception {

  StringBuilder url = new StringBuilder(path);

  url.append("?");

  for(Map.Entry<String, String> entry:params.entrySet()){

  url.append(entry.getKey()).append("=");

   //get方式请求参数时对参数进行utf-8编码,URLEncoder

   //防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8

  url.append(URLEncoder.encode(entry.getValue(), encoding));

   url.append("&");

  }

  url.deleteCharAt(url.length()-1);

  HttpURLConnection conn = (HttpURLConnection) new URL(url.toString()).openConnection();

  conn.setConnectTimeout(5000);

  conn.setRequestMethod("GET");

  if(conn.getResponseCode() == 200){

   return true;

  }

  return false;

 }

}

Main.xml代码如下

 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4
 5     android:layout_width="fill_parent"
 6
 7     android:layout_height="fill_parent"
 8
 9     android:orientation="vertical" >
10
11
12
13    <TextView
14
15         android:layout_width="fill_parent"
16
17         android:layout_height="wrap_content"
18
19         android:text="@string/title" />
20
21
22
23    <EditText
24
25         android:id="@+id/title"
26
27         android:layout_width="fill_parent"
28
29         android:layout_height="wrap_content" >
30
31
32
33         <requestFocus />
34
35    </EditText>
36
37
38
39    <TextView
40
41         android:id="@+id/textView1"
42
43         android:layout_width="fill_parent"
44
45         android:layout_height="wrap_content"
46
47         android:text="@string/timelength" />
48
49
50
51    <EditText
52
53         android:id="@+id/timelength"
54
55         android:layout_width="fill_parent"
56
57         android:layout_height="wrap_content" android:numeric="integer"/>
58
59
60
61    <Button
62
63         android:id="@+id/button"
64
65         android:layout_width="wrap_content"
66
67         android:layout_height="wrap_content"
68
69         android:text="@string/button" android:onClick="save"/>
70
71
72
73 </LinearLayout>

AndroidManifest.xml代码如下

 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 4
 5     package="com.example.newsmanage"
 6
 7     android:versionCode="1"
 8
 9     android:versionName="1.0" >
10
11
12
13    <uses-sdk android:minSdkVersion="7" />
14
15
16
17    <application
18
19         android:icon="@drawable/ic_launcher"
20
21         android:label="@string/app_name" >
22
23         <activity
24
25            android:name=".NewsManageActivity"
26
27            android:label="@string/app_name" >
28
29             <intent-filter>
30
31                 <action android:name="android.intent.action.MAIN" />
32
33
34
35                 <category android:name="android.intent.category.LAUNCHER" />
36
37             </intent-filter>
38
39         </activity>
40
41    </application>
42
43  <uses-permission android:name="android.permission.INTERNET"/>
44
45
46
47 </manifest>

开发好后就开始测试吧,先运行android客户端,这里服务器端不接收中文的,你可以设置一下编码格式的。

点击发送,在服务器端就会接收到发送过来的信息

测试成功。

2、 socket形式

服务器端建立比较简单,只要建一个java文件就可以了,一直运行着就可以了。

socket_service.java代码

  1 package example;
  2
  3
  4
  5
  6
  7 import java.io.BufferedReader;
  8
  9 import java.io.BufferedWriter;
 10
 11 import java.io.InputStreamReader;
 12
 13 import java.io.OutputStreamWriter;
 14
 15 import java.io.PrintWriter;
 16
 17 import java.net.ServerSocket;
 18
 19 import java.net.Socket;
 20
 21
 22
 23 public class socket_service implements Runnable
 24
 25 {
 26
 27     public void run()
 28
 29     {
 30
 31        try
 32
 33         {
 34
 35             //创建ServerSocket
 36
 37             ServerSocket serverSocket = new ServerSocket(54321);
 38
 39             while (true)
 40
 41             {
 42
 43                //接受客户端请求
 44
 45                Socket client = serverSocket.accept();
 46
 47                System.out.println("accept");
 48
 49                 try
 50
 51                 {
 52
 53                     //接收客户端消息
 54
 55                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
 56
 57
 58
 59                   System.out.print("\n");
 60
 61                    String str = in.readLine();
 62
 63                   System.out.println("read:" + str);
 64
 65                     //向服务器发送消息
 66
 67                    PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);
 68
 69                     out.println("server ");
 70
 71                    //关闭流
 72
 73                    out.close();
 74
 75                    in.close();
 76
 77                }
 78
 79                 catch (Exception e)
 80
 81                 {
 82
 83                    System.out.println(e.getMessage());
 84
 85                     e.printStackTrace();
 86
 87                 }
 88
 89                 finally
 90
 91                 {
 92
 93                     //关闭
 94
 95                    client.close();
 96
 97                    System.out.println("close");
 98
 99                }
100
101             }
102
103        }
104
105        catch (Exception e)
106
107         {
108
109            System.out.println(e.getMessage());
110
111        }
112
113     }
114
115     //main函数,开启服务器
116
117    public static void main(String args[])
118
119    {
120
121         Thread desktopServerThread = new Thread(new socket_service());
122
123        desktopServerThread.start();
124
125   }
126
127 }

客户端建立

Activity01.java代码

  1 package com.example.socket;
  2
  3
  4
  5 import java.io.BufferedReader;
  6
  7 import java.io.BufferedWriter;
  8
  9 import java.io.InputStreamReader;
 10
 11 import java.io.OutputStreamWriter;
 12
 13 import java.io.PrintWriter;
 14
 15 import java.net.Socket;
 16
 17
 18
 19 import android.app.Activity;
 20
 21 import android.os.Bundle;
 22
 23 import android.util.Log;
 24
 25 import android.view.View;
 26
 27 import android.view.View.OnClickListener;
 28
 29 import android.widget.Button;
 30
 31 import android.widget.EditText;
 32
 33 import android.widget.TextView;
 34
 35
 36
 37 public class Activity01 extends Activity
 38
 39 {
 40
 41     private final String        DEBUG_TAG   = "Activity01";
 42
 43
 44
 45    private TextView    mTextView = null;
 46
 47     private EditText    mEditText = null;
 48
 49     private Button      mButton = null;
 50
 51     /** Called when the activity is first created. */
 52
 53    @Override
 54
 55    public void onCreate(Bundle savedInstanceState)
 56
 57     {
 58
 59        super.onCreate(savedInstanceState);
 60
 61       setContentView(R.layout.main);
 62
 63
 64
 65        mButton = (Button)findViewById(R.id.Button01);
 66
 67        mTextView = (TextView)findViewById(R.id.TextView01);
 68
 69         mEditText = (EditText)findViewById(R.id.EditText01);
 70
 71
 72
 73         //登陆
 74
 75         mButton.setOnClickListener(new OnClickListener()
 76
 77        {
 78
 79            public void onClick(View v)
 80
 81            {
 82
 83                Socket socket = null;
 84
 85                String message = mEditText.getText().toString() + "/r/n";
 86
 87                 try
 88
 89                {
 90
 91                    //创建Socket
 92
 93                   socket = new Socket("192.168.1.2",54321);
 94
 95                     //socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321
 96
 97                    //向服务器发送消息
 98
 99                    PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
100
101                   out.println(message+"wmy");
102
103
104
105                    //接收来自服务器的消息
106
107                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
108
109                    String msg = br.readLine();
110
111
112
113                    if ( msg != null )
114
115                    {
116
117                       mTextView.setText(msg);
118
119                  }
120
121                     else
122
123                   {
124
125                         mTextView.setText("数据错误!");
126
127                     }
128
129                     //关闭流
130
131                    out.close();
132
133                     br.close();
134
135                     //关闭Socket
136
137                     socket.close();
138
139                }
140
141               catch (Exception e)
142
143                {
144
145                    // TODO: handle exception
146
147                   Log.e(DEBUG_TAG, e.toString());
148
149                }
150
151             }
152
153        });
154
155    }
156
157 } 

Socket_androidActivity.java代码

 1 package com.example.socket;
 2
 3
 4
 5 import android.app.Activity;
 6
 7 import android.os.Bundle;
 8
 9
10
11 public class Socket_androidActivity extends Activity {
12
13     /** Called when the activity is first created. */
14
15     @Override
16
17     public void onCreate(Bundle savedInstanceState) {
18
19         super.onCreate(savedInstanceState);
20
21         setContentView(R.layout.main);
22
23     }
24
25 }

Main.xml代码

 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4
 5     android:orientation="vertical"
 6
 7     android:layout_width="fill_parent"
 8
 9     android:layout_height="fill_parent"
10
11     >
12
13    <TextView
14
15     android:id="@+id/TextView01"
16
17     android:layout_width="fill_parent"
18
19     android:layout_height="wrap_content"
20
21     android:text="杩欓噷鏄剧ず鎺ユ敹鍒版湇鍔″櫒鍙戞潵鐨勪俊鎭?
22
23     />
24
25     <EditText
26
27     android:id="@+id/EditText01"
28
29     android:text="杈撳叆瑕佸彂閫佺殑鍐呭"
30
31     android:layout_width="fill_parent"
32
33     android:layout_height="wrap_content">
34
35    </EditText>
36
37    <Button
38
39     android:id="@+id/Button01"
40
41     android:layout_width="fill_parent"
42
43     android:layout_height="wrap_content"
44
45     android:text="鍙戦?"
46
47     />
48
49 </LinearLayout> 

AndroidManifest.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 4
 5     package="com.example.socket"
 6
 7     android:versionCode="1"
 8
 9     android:versionName="1.0" >
10
11
12
13    <uses-sdk android:minSdkVersion="7" />
14
15
16
17    <application
18
19         android:icon="@drawable/ic_launcher"
20
21         android:label="@string/app_name" >
22
23         <activity
24
25            android:name=".Activity01"
26
27            android:label="@string/app_name" >
28
29             <intent-filter>
30
31                 <action android:name="android.intent.action.MAIN" />
32
33
34
35                 <category android:name="android.intent.category.LAUNCHER" />
36
37             </intent-filter>
38
39         </activity>
40
41    </application>
42
43  <uses-permission android:name="android.permission.INTERNET"></uses-permission>
44
45 </manifest>

开发好了就行测试吧

前后对比一下

服务器端:

参考原文:http://m.oschina.net/blog/75407

时间: 2024-11-08 12:17:46

【Android笔记】Android与服务器通信 http和socket两种形式的相关文章

【代码笔记】向服务器传JSON数据的两种方式

一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //第一种方法,是把要传的参数组合成一个数组,然后由JSONKit把字典转为字符串 NSDictionary* jsonDic = [NSDictionary dictionaryWithObjectsAndKeys:@"李华",@"name",@"女&quo

android笔记之在WebView中显示ProgressBar的两种方法

http://blog.csdn.net/liuzhidong123/article/details/6450334

转载:android笔记--android中的多线程--Handler, Looper, MessageQueue, Message类

什么时候使用多线程: 1. 耗时操作使用多线程, 耗时操作放在UI线程中会导致用户的操作无法得到响应. 2. 阻塞操作使用多线程, 理由同上. 3. 多核CUP的设备使用多线程, 可以有效提高CPU的利用率. 4. 并行操作使用多线程. android中的多线程模型主要涉及的类有:Looper, Handler, MessageQueue, Message等. 一:Looper类: 1 static final ThreadLocal<Looper> sThreadLocal = new Th

Android笔记——Android中数据的存储方式(二)

我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率.如果学过JavaWeb的朋友,首先可能想到的是数据库.当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android笔记——Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件.SQL

Android开发之使用sqlite3工具操作数据库的两种方式

使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/fengyuzhengfan/article/details/40193123 在Android SDK的tools目录下提供了一"sqlite3.exe工具,它是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口在有些时候,开发者利用该工具来査询. 管理数据库. 下面介绍两种方式: 第

向服务器传json数据的两种方式

接触到了向服务器传JSON数据,那么怎么把参数以JSON的形式,传到服务器呢.下面来说说,json字符串的得到方法.一共有两种方式来得到Json的字符串.当然,向服务器上传,不能传字符串,是要转成NSData的,也就是二进制的形式.这个在此不讨论,只说,怎么得到json的字符串. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //第一种方法,是把要传的参数

Apache服务器自定义404页面的两种方法以及.htaccess的重要命令总结

Apache服务器自定义404错误页面有两种方法: 第一种方法最简单,直接在Apache的httpd.conf下进行配置修改命令,修改的内容请参看.htaccess命令写法中的自定义错误页面 第二种方法可以在.htaccess文件中配置命令,具体操作请参看.htaccess命令写法中的自定义错误页面 .htaccess使用方法总结 1 . 首先让的本地APACHE服务器器允许.htaccess修改 打开httpd.conf (1) Options FollowSymLinks AllowOver

MyBatis association的两种形式——MyBatis学习笔记之四

一.嵌套的resultMap 这 种方法本质上就是上篇博文介绍的方法,只是把教师实体映射从association元素中提取出来,用一个resultMap元素表示.然后 association元素再引用这个resultMap元素.修改上篇博文示例的StudentMapper.xml如下: <?xml version="1.0" encoding="utf8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org

Android笔记之 网络http通信

0.在认识HTTP前先认识URL 在我们认识HTTP之前,有必要先弄清楚URL的组成,比如: http://www.******.com/china/index.htm 它的含义例如以下: 1. http://:代表超文本转移协议,通知****.comserver显示Web页,通常不用输入: 2. www:代表一个Web(万维网)server: 3.****.com/:这是装有网页的server的域名.或网站server的名称: 4.China/:为该server上的子文件夹,就好像我们的文件夹