Android端和Servlet搭建服务器交互小项目知识点汇集
2014-11-18 17:39
369 查看
转载请注明:http://blog.csdn.net/lrs123123/article/details/41250253
初学安卓,基础大的不扎实,都没有自己搭过服务器,摸摸索索爬爬滚滚最后还是憋出来了,虽说很简单,但是对于我来说是一个鼓励
我们需要用Tomcat搭载服务器,当然需要先下载Tomcat啦,这里推荐下载Tomcat6.0,下载地址:http://tomcat.apache.org/,解压到自己制定的地方,就算是安装好了,然后就是配置tomcat,
打开之后如果能看到下图显示那样,就说明你之前的JDK也就是java运行环境没问题,也就ok啦
好啦,接下来才是主要介绍
服务器端搭建介绍:
来到你的Eclipse,我用的是MyEclipse6.5 有点老但是可以用也就无所谓啦!
新建一HTML文件 ,LoginServlet,
如图,很简单,一个src用于存放服务器端代码,WebRoot,里边的WEB-INF/classes子目录,存放编译的class文件,web.xml叫做部署描述符,为web应用核心文件,WebRoot\WEB-INF\用于存放WEB应用使用的第三方库。
1.写个简单HTML,在webRoot新建,提交方式post,get皆可
2、Servlet写完,在Web的src中新建LoginServlet类,代码如下
备注以后补充,
3.在WebRoot的WEB-INF的web.xml部署我们写的Servlet,代码如下:
好啦,服务端写好了,试着验证下吧,在tomcat上部署我们的项目LoginServlet如图:
选择LoginServlet,Finish,ok
看到Console一堆东西,如图
说明成功把项目部署到Tomcat上了,至此,服务器搭建好了
Android端代码实现
3.最终界面截图
4.遇到的问题
android.os.NetworkOnMainThreadException
看师兄调试 ,,受教,模拟器不可直接访问Localhost,应该找到其对应ip地址,
public static final String HTTPCustomer = "http://10.173.232.159:8080/LoginServlet/Login.html";(后边才发现还是写错了)
public static final String HTTPCustomer = "http://10.173.232.159:8080/LoginServlet/LoginServlet";
好了,项目就介绍到这里,服务器搭建,html知识,http协议,post,get方式,地址?加上想传入的数据,分隔用&,这些知识点还需要我进一步的学习
初学安卓,基础大的不扎实,都没有自己搭过服务器,摸摸索索爬爬滚滚最后还是憋出来了,虽说很简单,但是对于我来说是一个鼓励
我们需要用Tomcat搭载服务器,当然需要先下载Tomcat啦,这里推荐下载Tomcat6.0,下载地址:http://tomcat.apache.org/,解压到自己制定的地方,就算是安装好了,然后就是配置tomcat,
打开之后如果能看到下图显示那样,就说明你之前的JDK也就是java运行环境没问题,也就ok啦
好啦,接下来才是主要介绍
服务器端搭建介绍:
来到你的Eclipse,我用的是MyEclipse6.5 有点老但是可以用也就无所谓啦!
新建一HTML文件 ,LoginServlet,
如图,很简单,一个src用于存放服务器端代码,WebRoot,里边的WEB-INF/classes子目录,存放编译的class文件,web.xml叫做部署描述符,为web应用核心文件,WebRoot\WEB-INF\用于存放WEB应用使用的第三方库。
1.写个简单HTML,在webRoot新建,提交方式post,get皆可
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登陆</title> </head> <body> <form action="LoginServlet" method="post""> 用户 <input type="text" name="username" /> <br /> 密码 <input type="password" name="password" /> <br /> <input type="submit" value="登录" /> </form> </body> </html>这里边的form表单知识点很值得学习,这里先mark一下,action很重要(后边实现最终一个困难),这里我不是很清楚也就这么写吧。
2、Servlet写完,在Web的src中新建LoginServlet类,代码如下
import java.io.DataOutputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 314719472293387358L; private String LOGIN_FLAG = ""; // 重写doPost方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("dopost"); request.setCharacterEncoding("UTF-8"); String userName = request.getParameter("username"); String passWord = request.getParameter("password"); System.out.println("username=" + userName + ",password=" + passWord); try { DataOutputStream output = new DataOutputStream(response .getOutputStream()); LOGIN_FLAG = "success"; output.writeUTF("服务端数据" + LOGIN_FLAG); System.out.println(LOGIN_FLAG); output.writeInt(1); output.close(); } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub super.doGet(request, response); doPost(request, response); } }
备注以后补充,
3.在WebRoot的WEB-INF的web.xml部署我们写的Servlet,代码如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>LoginServlet</display-name> <servlet> <servlet-name>MyServlet</servlet-name> <!-- 随便起名字 --> <servlet-class>LoginServlet</servlet-class> <!-- servlet类名 --> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> <!-- url访问虚拟路径,最后我们就是通过工程名/login进行访问的, 像这样http://127.0.0.1:8000/LoginAction/login--> </servlet-mapping> <!-- url访问虚拟路径,最后我们就是通过工程名/login进行访问的,像这样http://127.0.0.1:8000/LoginAction/login--> </web-app>
好啦,服务端写好了,试着验证下吧,在tomcat上部署我们的项目LoginServlet如图:
选择LoginServlet,Finish,ok
看到Console一堆东西,如图
说明成功把项目部署到Tomcat上了,至此,服务器搭建好了
Android端代码实现
package com.Garry.loginservletdemo; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; 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; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Login extends Activity { private HttpPost httpRequest = new HttpPost(UrlAPI.HTTPCustomer); private EditText et_username, et_password; private TextView show_login; private Button btn_login; private ProgressDialog progressDialog; // private static String charset = "GB2312"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); btn_login.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new AT().execute(et_username.getText().toString(), et_password .getText().toString()); } }); } public class UrlAPI { public static final String HTTPCustomer = "http://10.173.232.159:8080/LoginServlet/LoginServlet"; } class AT extends AsyncTask { String result = ""; @Override protected void onPreExecute() { progressDialog.show(); } @Override protected Object doInBackground(Object... params_obj) { CharSequence username = ""; CharSequence password = ""; username = et_username.getText(); password = et_password.getText(); if (!username.equals("") && !password.equals("")) { HttpPost httpRequest = new HttpPost(UrlAPI.HTTPCustomer); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("username", username .toString())); params.add(new BasicNameValuePair("password", password .toString())); // params.add(new BasicNameValuePair("flag","0")); try { // 对提交数据进行编码 httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); HttpResponse httpResponse = new DefaultHttpClient() .execute(httpRequest); // 获取响应服务器的数据 if (httpResponse.getStatusLine().getStatusCode() == 200) { // 利用字节数组流和包装的绑定数据 byte[] data = new byte[2048]; // 先把从服务端来的数据转化成字节数组 data = EntityUtils .toByteArray((HttpEntity) httpResponse .getEntity()); // 再创建字节数组输入流对象 ByteArrayInputStream bais = new ByteArrayInputStream( data); // 绑定字节流和数据包装流 DataInputStream dis = new DataInputStream(bais); // 将字节数组中的数据还原成原来的各种数据类型,代码如下: result = new String(dis.readUTF()); Log.i("服务器返回信息:", result); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return result; } @Override protected void onPostExecute(Object result) { show_login.setText(result.toString()); progressDialog.cancel(); } } private void init() { et_username = (EditText) findViewById(R.id.et_username); et_password = (EditText) findViewById(R.id.et_password); btn_login = (Button) findViewById(R.id.btn_login); show_login = (TextView) findViewById(R.id.show_loign); progressDialog = new ProgressDialog(this); } }
3.最终界面截图
4.遇到的问题
android.os.NetworkOnMainThreadException
看师兄调试 ,,受教,模拟器不可直接访问Localhost,应该找到其对应ip地址,
public static final String HTTPCustomer = "http://10.173.232.159:8080/LoginServlet/Login.html";(后边才发现还是写错了)
public static final String HTTPCustomer = "http://10.173.232.159:8080/LoginServlet/LoginServlet";
好了,项目就介绍到这里,服务器搭建,html知识,http协议,post,get方式,地址?加上想传入的数据,分隔用&,这些知识点还需要我进一步的学习
相关文章推荐
- android客户端与servlet服务器交互简单示例
- Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例
- Android与(Servlet)服务器交互
- 一步一步的搭建Tomcat服务器 + servlet + android客户端
- Android和服务器servlet的简单交互
- Android搭建客户端,实现手机和服务器的交互
- Android与JavaWeb服务器交互教程(3)-一个简单的Android项目
- 【Android】- 搭建服务器进行前后端的交互
- 用Android搭建客户端 手机和服务器交互开发实例
- 【中期检查】 搭建Android服务器并与浏览器交互总结一
- Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据库(二)
- Android与web服务器数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台运行
- android服务器与客户端交互之servlet
- Android项目实战--手机卫士02--与服务器交互
- android客户端访问tomcat搭建的servlet服务器并互传数据
- Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例
- Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据库(一)
- IDEA搭建servlet服务器与android客户端通信(一)
- Android服务器搭建——Jsp+Servlet,返回Json到Android客户端
- Android与JavaWeb服务器交互教程(2)-搭建简易的JavaWeb服务