移动端发送数据到 struts服务端 并且 服务端返回数据到移动端 。
注意要添加权限 :
<!-- 访问网络的权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 读写存储卡的权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
struts2
xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
<struts>
<constant name="struts.multipart.maxSize" value="102400000"/>
<package name="default" extends="json-default">
<action name="login_*" class="com.cery.Login" method="{1}">
<result name="success" type="stream">
<!-- 指定stream生成的 响应数据的类型 -->
<param name="contentType">text/html</param>
<!-- 指定由 getTip()方法返回 输出结果的 inputstream 字节流 -->
<!-- 其中 tip 对应Login类中的 private String tip = null; -->
<param name="inputName">tip</param>
</result>
</action>
</package>
</struts>
Action类:
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class Login {
private String tip=null;
public InputStream getTip() throws UnsupportedEncodingException{
//返回 字节流并 改变编码集
return new ByteArrayInputStream(tip.getBytes("utf-8"));
}
public String login(){
HttpServletRequest request = ServletActionContext.getRequest();
String name = request.getParameter("name");
if(name.equals("123")){
tip="密码正确";
System.out.println("success");
}else{
tip="密码错误";
System.out.println("fail");
}
return "success";
}
}
android
Activtiy:
import com.common.android.HttpLoginThread;
import com.example.android_teacher.R;
import android.app.Activity;
import android.os.Bundle;
public class TestHttpActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
//写本机的 ip 地址, ipconfig 一下, 手机要和电脑在同一个路由下(同一个局域网)
new HttpLoginThread("http://192.168.1.100:8080/Struts2test/login_login", 123).start();
}
}
线程类:
注:android本身是utf-8的编码集 所以 post请求不需要转码
查看android 的一些配置信息:
Properties poperty = System.getProperties();
poperty.list(System.out);
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import android.util.Log;
public class HttpLoginThread extends Thread{
private String name;
private String url;
public HttpLoginThread(String url, String name){
this.url = url;
this.name = name;
}
//get请求
private void doGet(){
try {
url = url+"?name="+URLEncoder.encode(name, "utf-8");//拼接get 请求的url地址
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
httpUrl = new URL(url);
conn = (HttpURLConnection) httpUrl.openConnection();
conn.setReadTimeout(5000); //设置响应时间
conn.setRequestMethod("GET"); //设置请求方式
StringBuffer sb = new StringBuffer();
//得到 服务器返回的数据
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String str;
while((str = br.readLine()) != null){
sb.append(str);
}
String result = sb.toString();
Log.w("sss", "结果:"+result);
br.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//post 请求
private void doPost(){
try {
httpUrl = new URL(url);
conn = (HttpURLConnection) httpUrl.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("POST");
OutputStream out = conn.getOutputStream();
String content = "username="+name;
out.write(content.getBytes());
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String str;
while((str = br.readLine()) != null){
sb.append(str);
}
Log.v("sss", sb.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run(){
doGet();
//doPost();
}
}
运行结果:
如果还想对 UI 组件 进行操作 就要加 Handler 类。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.audiofx.EnvironmentalReverb;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.webkit.WebView;
import android.widget.ImageView;
public class HttpThread extends Thread{
private String url;
private WebView webView;
private Handler handler;
public HttpThread(String url, WebView webView, Handler handler){
this.url = url;
this.webView = webView;
this.handler = handler;
}
@Override
public void run(){
try {
URL httpUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
conn.setConnectTimeout(5000);//设置请求的时长
conn.setRequestMethod("GET");
final StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String str;
while((str = br.readLine()) != null){
sb.append(str);
}
handler.post(new Runnable() {
@Override
public void run() {
//将网页加到 webview 中
webView.loadData(sb.toString(), "text/html;charset=utf-8", null);
}
});
Log.w("sss", sb.toString());
br.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}