写一个Struts后台

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();
	}
}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值