android客户端的数据传给web服务端进行操作
- 格式:doc
- 大小:59.50 KB
- 文档页数:13
android中使用WebSocket传递数据WebSocket是一种在Web浏览器和服务器之间进行双向通信的协议,允许实时更新数据而无需重新加载页面。
在Android中,使用WebSocket可以方便地传输数据,并实现实时更新和通信。
1. 引入WebSocket库:要在Android应用程序中使用WebSocket,首先需要添加相应的库。
Android中常用的WebSocket库有OkHttp、Java-WebSocket等。
你可以通过在build.gradle文件中添加相应的依赖来引入这些库。
3. 设置WebSocket连接监听器:可以为WebSocket连接设置监听器,以便在连接状态发生变化时进行响应。
监听器通常包括onOpen、onMessage、onClose和onError等方法,用于处理打开、接收消息、关闭和错误事件。
你可以根据需要进行相应的处理。
4. 发送和接收消息:使用WebSocket可以发送和接收消息。
通过调用WebSocket对象的send方法可以发送消息给服务器,而接收到的消息通常通过监听器中的onMessage方法处理。
你可以根据消息的内容进行相应的操作。
注意,消息通常是以文本或二进制数据的形式进行传输。
5. 关闭WebSocket连接:当不再需要使用WebSocket连接时,应该关闭连接,以释放资源。
可以通过调用WebSocket对象的close方法来关闭连接。
在关闭连接前,可以释放一些资源或执行一些操作。
6. 错误处理:在使用WebSocket时,可能会发生一些错误,例如服务器无法连接、数据传输失败等等。
你可以在监听器的onError方法中处理这些错误情况,并根据实际需求进行相应的操作。
总的来说,使用WebSocket在Android中传递数据非常方便。
你可以通过简单的步骤创建WebSocket连接、设置监听器、发送和接收消息,并在需要时关闭连接。
这种方式可以实现实时更新和双向通信,非常适用于需要实时交互和数据更新的应用程序。
WebService(⼆)发送数据+接收数据并进⾏处理操作(⼀)使⽤WebService发送数据1.定义webService接⼝import java.util.List;import javax.jws.WebParam;import javax.jws.WebService;import com.mxz.fvp.dto.ADto;@WebServicepublic interface MxzReceiveService {public boolean addExpressBarRecord(@WebParam(name = "record") ADto record) throws Exception;// ⽅法1public boolean batchAddExpressBarRecord(@WebParam(name = "listRecord") List listRecord) throws Exception; // ⽅法2}2.⼯具类的创建public class AUtil {private final static Logger logger = Logger.getLogger(AUtil.class);private static ApplicationContext factory = null;private static MxzReceiveService mxzReceiveService ;private static BService bService;static {factory = new ClassPathXmlApplicationContext("classpath:application-*.xml");bService = (BService) factory.getBean("bService");}private static synchronized MxzReceiveService getMxzReceiveService () {try {if (mxzReceiveService == null) {JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();factory.setServiceClass(MxzReceiveService class); // 1设置请求接⼝String linkUrl = CommonDataUtil.getConfigValue(ServiceConstants.MXZ_WEBSERVICE_URL);// 2查询数据库获取链接地址factory.setAddress(linkUrl + "services/MxzReceiveService "); //3设置地址mxzReceiveService = (MxzReceiveService ) factory.create(); // 4创建客户端对象}} catch (Exception e) {logger.error("mxzReceiveService Webservice initial error!");mxzReceiveService = null;}return mxzReceiveService ;}3.具体使⽤public static void batchAddExpressBarRecord(List listRecord) {try {if(getFvpReceiveService() == null) // 3.1初始化链接对象return;//3.2数据其他处理操作if(!validateCode(listRecord))return;// 3.3调⽤接⼝boolean isSendSuccess = mxzReceiveService .batchAddExpressBarRecord(listRecord);if(!isSendSuccess) {//....其他操作return;}triggerCsdOorderBackState(listRecord); //3.3其他操作} catch (Exception e) { //3.3其他操作saveSendFvp(listRecord, "m"); //....其他操作logger.error("Sent to mxzReceiveService.batchAddExpressBarRecord fail!" + e.getMessage());}}(⼀)使⽤WebService接收数据并处理1.创建webService接⼝xml配置<!--CXF配置 --><import resource="classpath:META-INF/cxf/cxf.xml" /><import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /><import resource="classpath:META-INF/cxf/cxf-servlet.xml" /><!-- ⾃定义endPoint --><jaxws:endpoint id="AService" address="/waybilllog"implementor="#aService" /><bean id="aService"class="com.xx.service.webService.AServerImpl"><property name="bService" ref="bServiceImpl" /><property name="cDao" ref="cDao" /></bean>import javax.jws.WebParam;import javax.jws.WebService;@WebService(targetNamespace = "http://rece/")public interface AServer {public void receiveLog(@WebParam(name = "wayNo") String wayNo,@WebParam(name = "inputTypeCode") String inputTypeCode,@WebParam(name = "isSuccess") boolean isSuccess,@WebParam(name = "failreason") String failreason);}2.定义接⼝实现类,并实现其他操作@WebService(targetNamespace = "http://waybilllog/", endpointInterface = "com.mxz.service.webService.AServer ") public class AServerImpl implements AServer{private Logger logger=Logger.getLogger(this.getClass()); // this:AServerImplprivate BService bService; //提供gettter/setter⽅法private CDaoImpl cDao; //提供gettter/setter⽅法@Overridepublic void receiveLog(String waybillNo, String inputTypeCode, boolean isSuccess, String failreason) {("接收返回结果:单号"+wayNo+",类型:"+inputTypeCode+",状态:"+isSuccess+",描述:"+failreason);try{ //其他操作.........................}catch(Exception ex){logger.error("接收返回结果失败:"+wayNo+","+inputTypeCode+","+isSuccess+","+failreason,ex);}}}。
如何在web页面之间传递参数在web开发中,经常会遇到在不同页面之间传递参数的需求。
这些参数可以是用户输入的数据、页面之间的状态信息,甚至是身份验证所需的凭证。
而在确保用户体验的有效地传递参数也是web开发中常见的问题之一。
本文将就web页面之间传递参数的几种方法进行全面评估,并据此撰写一篇有价值的文章。
1. URL参数传递URL参数传递是最常见的一种传递参数的方式。
通过在URL中携带参数的形式,可以方便地在不同页面之间传递数据。
我们可以通过在URL中添加“?key1=value1&key2=value2”这样的参数来传递信息。
这种方式简单直接,但由于参数会直接显示在URL中,可能会带来安全隐患和信息泄露的问题。
2. 表单提交另一种常见的传递参数的方式是通过表单提交。
用户在一个页面填写完表单后,提交表单到服务器,服务器再将参数传递到下一个页面。
这种方式适用于需要用户输入数据并传递到下一个页面的场景,但对于一些简单的参数传递来说,可能会显得过于繁琐。
3. Cookie和SessionCookie和Session是web开发中常用的状态保持机制,也可以用来传递参数。
通过在客户端存储数据,下一个页面可以再次读取这些数据,实现参数的传递。
但需要注意的是,由于涉及到用户隐私信息的存储和传递,需要特别注意安全性和合规性。
4. AJAX请求在现代web应用中,通过AJAX进行页面间数据交互也是一种常见的方式。
通过异步的方式请求数据,并在页面中使用JavaScript来处理返回的数据,可以实现页面之间参数的传递。
这种方式在提高用户体验的也需要注意数据的完整性和安全性。
总结回顾在web开发中,传递参数是一个常见的需求,而选择合适的传递方式也是至关重要的。
无论是通过URL参数、表单提交、Cookie和Session,还是AJAX请求,都需要根据实际场景选择合适的方式。
在使用这些方法的过程中,还需要注意数据的安全性和合规性,以确保用户信息的安全传递。
Android使用HttpURLConnection调用WebService接口在Android中,可以使用HttpURLConnection类来调用WebService接口。
HttpURLConnection是Java中用于发送和接收HTTP请求的基本类,而WebService是一种支持跨网络的远程调用技术,可以在不同平台之间进行通信。
HttpURLConnection可以通过HTTP协议与WebService接口进行通信。
下面是使用HttpURLConnection调用WebService接口的步骤:1. 创建URL对象:首先,需要创建一个URL对象,将WebService的URL地址作为参数传递给URL构造函数。
例如:``````2. 打开连接:通过URL对象的openConnection方法打开与WebService的连接。
该方法会返回一个HttpURLConnection对象,可以通过类型转换来获取具体的对象。
```HttpURLConnection connection = (HttpURLConnection)url.openConnection(;```3. 设置请求方法:使用setRequestMethod方法设置请求的方法,常用的方法有GET和POST。
GET方法用于获取WebService返回的数据,而POST方法用于向WebService发送数据。
```connection.setRequestMethod("POST");```4. 设置请求参数:如果使用POST方法发送数据,需要设置请求的参数。
可以通过设置connection的OutputStream来发送数据。
```connection.setDoOutput(true);DataOutputStream outputStream = newDataOutputStream(connection.getOutputStream();outputStream.writeBytes("param1=value1¶m2=value2");outputStream.flush(;outputStream.close(;```5. 获取响应数据:使用getInputStream方法获取WebService的响应数据。
java后端主动向前端传递数据的方法
Java后端主动向前端传递数据的方法是通过使用HTTP协议进行数据交互。
以下是几种常用的方法:
1. 使用Servlet:Java后端可以编写Servlet来处理前端请求,并在响应中添加所需的数据。
通过使用ServletResponse对象的方法(如getOutputStream())将数据以字符串或JSON格式发送给前端。
2. 使用JSP:Java后端可以使用JSP页面来动态生成HTML,并在其中嵌入后端数据。
后端可以通过使用JSP标签库或Java代码将数据传递给前端。
3. 使用WebSocket:WebSocket是一种全双工通信协议,可以实现实时的、双向的数据传输。
Java后端可以使用WebSocket技术建立连接,并主动向前端推送数据,前端可以通过Websocket API接收数据。
4. 使用消息队列:后端可以使用消息队列系统(如ActiveMQ或RabbitMQ)将数据发送到前端。
前端可以订阅特定的队列或主题,接收后端发送的数据。
5. 使用Ajax:Ajax是一种在不重新加载整个页面的情况下与服务器进行数据交互的技术。
Java后端可以提供RESTful API,前端通过Ajax请求后端接口,并将返回的数据展示在页面上。
这些方法可以根据具体需求选择使用,根据业务场景的不同,可灵活选择适合的方式来实现后端向前端传递数据。
移动应用开发技术中的数据交互方法移动应用的快速发展和普及,使得用户对于高质量、个性化的使用体验有了更多的需求。
而数据交互,作为移动应用开发中至关重要的一环,直接影响着用户体验的流畅程度和功能的实现。
在移动应用开发技术中,数据交互方法有着多种选择和应用,下面将从两个主要角度进行探讨。
一、前端数据交互方法前端数据交互主要涉及到移动应用与用户交互以及与服务器端之间的通信。
现如今,最常见的前端数据交互方法是使用HTTP协议进行数据传输。
在移动应用中,通常使用的是HTTP的POST和GET请求方法,分别用于向服务器发送数据和获取数据。
通过这种方式,移动应用可以向服务器发送请求,并获得服务器返回的数据,以实现相应的功能。
除了HTTP协议,还有一种较为流行的数据交互方式是使用WebSocket。
WebSocket是一种提供全双工通信的协议,可以在浏览器和服务器之间建立持久性的连接,实现实时数据传输。
在移动应用中,如果需要实时获取数据并更新界面,可以使用WebSocket进行数据交互。
通过WebSocket,移动应用可以与服务器建立长连接,实时获取数据更新,提升用户的实时交互体验。
二、后端数据交互方法后端数据交互主要涉及到服务器端与移动应用之间的数据传输和交互。
在后端数据交互中,最为常见的方法是使用API接口进行数据交互。
API接口是一套定义了数据格式和通信规则的接口,可以实现不同平台之间的数据交互。
在移动应用开发中,常用的API接口有RESTful API和SOAP API。
RESTful API是一种基于HTTP协议的Web服务接口。
它通过URL来访问资源,并使用HTTP的GET、POST、PUT、DELETE等方法进行数据传输和操作。
RESTful API的优势在于简单易用、高效灵活,适合轻量级的数据交互。
在移动应用开发中,可以使用RESTful API来实现移动应用与服务器的数据交互,实现不同平台的数据共享和通信。
Android 调用 WebService 连接 SQLServer 实例详解随着移动互联网的快速发展,Android 应用程序越来越普及。
在开发 Android 应用程序时,我们经常需要与远程数据库进行交互。
SQL Server 是一种流行的关系型数据库,而 WebService 是一种常用的远程调用技术。
下面我们将详细介绍如何在 Android 应用程序中调用 WebService,连接 SQLServer 数据库的实例。
一、准备工作1.安装 SQL Server:首先需要在本地或远程服务器上安装 SQL Server 数据库,并创建一个数据库和相应的表。
2.创建 WebService:创建一个 WebService,该 WebService 将连接到 SQLServer 数据库,执行相应的操作,并将结果返回给客户端。
3.创建 Android 项目:使用 Android Studio 创建一个新的 Android 项目,并添加必要的依赖项。
二、调用 WebService1.添加 WebService 地址:在 Android 项目中,将 WebService 的地址添加到项目的 URL 列表中。
2.创建 WebService 客户端:使用 HttpClient 或 OkHttp 等网络库创建WebService 客户端,并实现相应的回调接口。
3.调用 WebService 方法:调用 WebService 方法,并传递必要的参数。
例如,调用查询数据的 WebService 方法,并传递查询条件。
4.处理返回结果:在回调接口中处理返回结果,例如解析 JSON 数据。
三、连接 SQLServer1.使用 JDBC:使用 JDBC(Java Database Connectivity)连接 SQL Server数据库。
首先需要下载并安装相应的 JDBC 驱动程序,然后在代码中加载驱动程序,建立连接。
Android 手机/平板连接局域网访问局域网电脑Web服务器
应用如何在手机上访问本地电脑上的tomcat服务器,设置"localhost"或者"127.0.0.1"是不行的,在模拟器上将ip设置为"10.0.2.2"(也可以设置为本地服务器的IP地址如本机:http://192.168.1.102)是可以访问的,但到真机上此方法行不通。
真机连接方法:1.本地电脑搭建的服务器与手机共同连接到一个无线网络下。
2.服务器端需要关闭防火墙。
3.程序连接:将Android应用的HttpClient访问地址设为服务端ip地址(如本机:http://192.168.1.102):
4.总结:其实在有无线局域网的情况下真机与模拟器连接本地服务端是一样的,唯一区别是真机连接到本地服务器需要关闭防火墙(本人就是没有关闭防火墙折腾了N个小时)。
后端向前端传数据的几种方式
1. 字符串拼接方法:后端通过将数据拼接成一串字符串,然后传递给前端进行解析和显示。
这种方式适用于简单的数据结构,如文本信息。
2. JSON格式:后端将数据转换为JSON格式,然后通过HTTP协议发送给前端。
前端可以使用JavaScript的JSON解析函数将数据转换为可读的对象。
这种方式适用于复杂的数据结构,如嵌套对象或数组。
3. XML格式:类似于JSON方式,后端将数据转换为XML格式,通过HTTP协议发送给前端。
前端可以使用XML解析器将数据转换为可读的对象。
这种方式适用于需要跨平台和跨语言的数据传输。
4. RESTful API:后端提供一组API接口,前端通过HTTP请求来获取数据。
后端将数据以JSON或XML形式返回给前端。
这种方式适用于构建面向资源的Web应用。
5. WebSocket:后端通过WebSocket技术与前端建立持久的双向通信连接,可以实时地向前端推送数据。
这种方式适用于需要实时更新的应用,如即时聊天或实时数据监控。
6. GraphQL:后端提供一个单一的GraphQL接口,前端可以在请求中指定需要的数据结构和字段。
后端根据请求返回对应的数据。
这种方式适用于需要定制数据结构和灵活查询的应用。
由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦:步骤如下:一、介绍:此文主要是介利用android网络通信功能把android客户端的数据传给web服务端进行操作此项目列举三个个传值方式:1、GET方式,2、POST方式,3、HttpClient 方式二、新建一个android工程——NewsManage工程目录:三、AndroidManifest.xml配置清单由于要访问网络,故需要添加网络访问权限,红色标注添加部分<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android" package="com.example.newsmanage"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="8" /><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name" ><activityandroid:name=".NewsManageActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><categoryandroid:name="UNCHER" /></intent-filter></activity></application></manifest>四、main.xml配置:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/title" /><EditTextandroid:id="@+id/title"android:layout_width="match_parent"android:layout_height="wrap_content" ><requestFocus /></EditText><TextViewandroid:id="@+id/textView1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/timelength" /><EditTextandroid:id="@+id/timelength"android:layout_width="match_parent"android:layout_height="wrap_content"android:numeric="integer"/><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button" android:onClick="save"/></LinearLayout>五、string.xml配置:<?xml version="1.0" encoding="utf-8"?><resources><string name="hello">Hello World, NewsManageActivity!</string> <string name="app_name">资讯管理</string><string name="title">视频标题</string><string name="timelength">播放时长</string><string name="button">保存</string><string name="success">保存成功</string><string name="fail">保存失败</string></resources>六、NewsManageActivity.java Activity源码:package com.example.newsmanage;import com.example.service.NewsService;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class NewsManageActivity extends Activity {/** Called when the activity is first created. */EditText titleText;EditText lengthText;Button button;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);titleText = (EditText) this.findViewById(R.id.title);lengthText = (EditText) this.findViewById(R.id.timelength); button = (Button) this.findViewById(R.id.button);}public void save(View v) throws Exception{String title = titleText.getText().toString();String timelength = lengthText.getText().toString();boolean result = NewsService.save(title,timelength);if(result){Toast.makeText(getApplicationContext(),R.string.success, Toast.LENGTH_LONG).show();} else {Toast.makeText(getApplicationContext(),R.string.fail,Toast.LENGTH_LONG).show();}}}七、NewsService .java 业务类源码:注:业务类提供三种发送请求的方式:get/post/httpClientpackage com.example.service;import java.io.OutputStream;import .HttpURLConnection;import .URL;import .URLEncoder;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.http.HttpResponse;import ValuePair;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.105为本机IP地址,不能用localhost代替String path = "http://119.119.228.105:8080/web/ManageServlet";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-8UrlEncodedFormEntity 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-8data.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-8url.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;}}八、由于要把数据传递给web服务端,而web端传递过来的数据有两种格式,故需要新建一个web服务,使之能接收android客户端传递的参数;1、新建一个servlet可以接收传递的参数,源码如下:package com.example.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class ManageServlet*/public class ManageServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public ManageServlet() {super();}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String title = request.getParameter("title");//把客户端传递过来的参数进行重新编码使之能支持中文//title = new String(title.getBytes("ISO8859-1"),"UTF-8");//使用过滤器后就不需要每次都要进行此操作String timelength = request.getParameter("timelength");System.out.println("视频名称:"+title);System.out.println("播放时长:"+timelength);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String title = request.getParameter("title");//把客户端传递过来的参数进行重新编码使之能支持中文//title = new String(title.getBytes("ISO8859-1"),"UTF-8");//使用过滤器后就不需要每次都要进行此操作String timelength = request.getParameter("timelength");System.out.println("视频名称:"+title);System.out.println("播放时长:"+timelength);}}2、由于传递过来的参数默认编码为ISO8895-1,故打印后台的参数回事乱码故需要传递的过来的参数进行编码,但是如果每次都要对传递过来的参数都要进行编码转换,是比较麻烦的,故需要建立一个拦截器,对传递过来的参数进行统一在一起进行编码转换,当请求/*时拦截器先进行编码处理:拦截器代码如下:EncodingFilter .java 源码如下:package com.example.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;/*** Servlet Filter implementation class EncodingFilter*/public class EncodingFilter implements Filter {/*** Default constructor.*/public EncodingFilter() {}/*** @see Filter#destroy()*/public void destroy() {}/*** @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;if("GET".equals(req.getMethod())){EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(req);chain.doFilter(wrapper, response);} else {//postreq.setCharacterEncoding("UTF-8");chain.doFilter(request, response);}}/*** @see Filter#init(FilterConfig)*/public void init(FilterConfig fConfig) throws ServletException { }}EncodingHttpServletRequest .java源码如下:package com.example.filter;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;}@Overridepublic 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;}}注意:在运行android项目前必须先运行web服务九、先运行web服务器,然后运行android项目,发送参数后,web后台就可以打印出相应的信息十、注意事项以及相关知识点:1、由于涉及访问网络,故需要添加网络访问权限<uses-permissionandroid:name="android.permission.INTERNET"/>2、访问web服务时地址必须写网络的IP地址,否则会在本地服务上查找3、熟悉怎么向web服务端发送请求以及方式(http协议)GET方式:HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");conn.getResponseCode() == 200 来判断是否请求成功POST方式: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;}HttpClient方式:List<NameValuePair> pairs = new ArrayList<NameValuePair>();//存放请求参数for(Map.Entry<String, String> entry:params.entrySet()){pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}//防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8UrlEncodedFormEntity 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;}4、乱码产生的原因:(1)、通过get方式提交请求参数时,没有对中文进行URL编码(2)、 Tomcat服务器默认采用ISO8895-1编码得到的参数如果乱码表示为--> -->,则说明是由于客户端传递参数没有编码的原因如果乱码表示为???????,则说明是由于服务器端的默认编码不一致或者不支持中文的原因5、熟悉拦截器的使用以及原理。