1、导入包,如果是Android6.0的话,在MyEclipse删除struts2-core-2.3.4.1
2、在项目src创建一个Struts2的xml
3、编写web.xml,添加
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
整体web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>BackStruts</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4、创建实体类
package com.backstruts.entity;
public class User {
private int userId;
private String userName;
private String userPwd;
private int userAge;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public User(int userId, String userName, String userPwd, int userAge) {
super();
this.userId = userId;
this.userName = userName;
this.userPwd = userPwd;
this.userAge = userAge;
}
public User() {
super();
}
@Override
public String toString() {
return "User [userId=" + userId + ", userName=" + userName
+ ", userPwd=" + userPwd + ", userAge=" + userAge + "]";
}
}
5、创建dao层
package com.backstruts.dao;
import java.util.List;
import com.backstruts.entity.User;
public interface UserDao {
/**
* 根据名字和密码查找用户
* @param name 用户名
* @param pwd 密码
* @return
*/
public User findUserByNamePwd(String name,String pwd);
/**
* 查找所有用户
* @return
*/
public List<User> findAllUser();
}
6、创建dao实现类
package com.backstruts.dao.imp;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.backstruts.dao.UserDao;
import com.backstruts.entity.User;
import com.backstruts.util.DBUtil;
public class UserDaoImp implements UserDao{
@Override
public User findUserByNamePwd(String name, String pwd) {
User user=null;
String sql="select * from t_user where username=? and userpwd=?";
ResultSet rs=DBUtil.doQuery(sql, new Object[]{name,pwd});
try {
if (rs.next()) {
int id=rs.getInt("userid");
int age=rs.getInt("userage");
user=new User(id, name, pwd, age);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}
@Override
public List<User> findAllUser() {
List<User> userList=new ArrayList<User>();
String sql="select * from t_user";
ResultSet rs=DBUtil.doQuery(sql);
try {
if (rs.next()) {
int id=rs.getInt("userid");
String name=rs.getString("username");
String pwd=rs.getString("userpwd");
int age=rs.getInt("userage");
User user=new User(id, name, pwd, age);
userList.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return userList;
}
}
7、Eclipse在AndroidManifest.xml添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
整个代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.backstrutsuse"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.backstrutsuse.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
8、实体类与网页MyEclipse实体类相同
9、MyEclipse工具包,如果是Android6.0版本,Eclipse的API删除了HttpClient的相应处理,解决方法是在libs文件夹内导入org.apache.http.legacy包。
package com.example.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.message.BasicNameValuePair;
public class MyUtil {
/**
* 传入一个map值,将里面的key value提取出来转成key1=value1&key2=value2...这样的形式
* @param map
* @return
*/
public static String getPair(Map<String, String> map) {
List<NameValuePair> list=new ArrayList<NameValuePair>();
for (String key : map.keySet()) {
list.add(new BasicNameValuePair(key, map.get(key).toString()));
}
String data=URLEncodedUtils.format(list, "utf-8");
return data;
}
}
package com.example.myInterface;
public interface HttpCallBack {
public void callback(String response);
}
package com.example.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
public class HttpHelper {
//httpClient操作对象
private DefaultHttpClient defaultHttpClient;
//处理请求执行的各个阶段,会有一个对象在各个之间进行传递,该对象保存请求上下文信息
private HttpContext localContext;
//响应对象
private HttpResponse httpResponse;
//http传递参数对象
private HttpPost httpPost;
//响应结果
private String result;
public HttpHelper(){
//实例化操作httpClient对象
defaultHttpClient=new DefaultHttpClient();
localContext=new BasicHttpContext();
}
public String postPage(String url,String data){
result=null;
data=data==null?"":data;
//RFC_2109是支持较普通的一个,还有其他cookie协议
defaultHttpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);
//实例化post对象
httpPost=new HttpPost(url);
httpResponse=null;
// 声明post头文件
httpPost.setHeader("User-Agent","Mozilla/5.0 (X11; U; Linux "+ "i686; en-US; rv:1.8.1.6) Gecko/20061201 Firefox/2.0.0.6 (Ubuntu-feisty)");
httpPost.setHeader("Accept","text/html,application/xml,"+"application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
try {
//防止出现乱码
StringEntity stringEntity = new StringEntity(data, "utf-8");
//将要传递的值放入post参数对象中
httpPost.setEntity(stringEntity);
//执行http请求并返回响应对象
httpResponse=defaultHttpClient.execute(httpPost, localContext);
if ((httpResponse!=null)&&(httpResponse.getEntity()!=null)) {
result=EntityUtils.toString(httpResponse.getEntity());
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
package com.example.util;
import com.example.myInterface.HttpCallBack;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
public class HttpTask extends AsyncTask<String, Void, Void> {
// 进度条对话框
private ProgressDialog pd = null;
// 服务器发送回来的响应字符串
private String response;
// 自定义httpClient帮助类
private HttpHelper httpHelper;
// 回调接口
private HttpCallBack httpCallBack;
public HttpTask(Context context) {
httpHelper = new HttpHelper();
pd = ProgressDialog.show(context, "请稍后", "正在加载中...", true);
}
/**
* 设置回调接口
*
* @param httpCallBack
*/
public void setHttpCallBack(HttpCallBack httpCallBack) {
this.httpCallBack = httpCallBack;
}
@Override
protected Void doInBackground(String... params) {
if (params.length > 1) {
// 带地址,带请求
response = httpHelper.postPage(params[0], params[1]);
} else {
// 带地址,不包含请求
response = httpHelper.postPage(params[0], null);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//当请求执行完毕后,关闭进度条对话框
pd.dismiss();
if (httpCallBack!=null) {
//将响应的值返回给实现该接口的对象
httpCallBack.callback(response);
}
}
}
package com.example.backstrutsuse;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.example.entity.User;
import com.example.myInterface.HttpCallBack;
import com.example.util.HttpTask;
import com.example.util.MyUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class MainActivity extends Activity implements HttpCallBack{
private Button btn1;
private static final String PATH="http://192.169.41.231:8080/BackStruts/useraction";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Map<String,String> map=new HashMap<String, String>();
//封装一条指令
map.put("flag", "getAllUser");
String data=MyUtil.getPair(map);
HttpTask task=new HttpTask(MainActivity.this);
task.setHttpCallBack(MainActivity.this);
task.execute(PATH,data);
}
});
}
@Override
public void callback(String response) {
Gson gson=new Gson();
Type type=new TypeToken<List<User>>(){}.getType();
List<User> userList=gson.fromJson(response, type);
String str="";
for (User user : userList) {
str+=user.toString();
}
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
}