android客户端与部署到tomcat的servlet服务器之间实现http通信
2015-10-28 19:18
691 查看
博主目前小白,为了完成这个踩到不少地雷,在此处记录下,可能错误忘记了,以后想起来再更新。
服务器端:
在tomcat上部署项目时,输入http://localhost:8080/项目名称/servlet名称,看到自己的写的servlet就成功了,如果出现500错误,描述里说是过滤器什么的,很大的原因是缺少包,少什么导入什么就行。
不要忘记在web.xml中创建servlet
这就好了。有关tomcat 和eclipse 的配置就不多说了,百度下教程很多。
下面是android客户端:
这里要重点说明的是那个connect类的对象connectThread,可以看出这是个线程。
之所以建个子线程是因为刚开始我直接在onCreate里连接的时候一直被堵塞导致app挂掉。。就是刷到真机上点开就闪退。查过很多资料,也有很多人发了跟我一样的问题。我最终是用子线程的方式解决的。
因为很多人是看书或者是一些老的demo学习的,所以会进入困境,由于sdk升级,android4.3以上的手机好像不能在主线程里进行网络操作。
下面是子线程类:
可能会比较乱,有很多没提到。
像,我写这个的时候用了json解析。代码没贴上来,时间关系,下次再更新。android端的json 我开始的时候犯了个错误,原来服务器端的json的包是导入的。我顺手也导入了android端,结果闪退了,原因是android自己本身就是有关于json的jar的,两个包同时存在的话里面的类会打架导致出错。删掉后来导进去的就好了。
还碰到一些问题,我后续学习中有想起来的话就再加进去。
服务器端:
public class Servlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); response.getOutputStream().print("This is Servlet "); } } }
在tomcat上部署项目时,输入http://localhost:8080/项目名称/servlet名称,看到自己的写的servlet就成功了,如果出现500错误,描述里说是过滤器什么的,很大的原因是缺少包,少什么导入什么就行。
不要忘记在web.xml中创建servlet
<servlet> <servlet-name>Servlet</servlet-name>//就是那个继承httpservlet的类名 <servlet-class>com.example.Servlet</servlet-class>//那个servlet类的在scr下的文件地址 </servlet> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/Servlet</url-pattern>//也是类名。不要忘了斜杠 </servlet-mapping>
这就好了。有关tomcat 和eclipse 的配置就不多说了,百度下教程很多。
下面是android客户端:
public class MainActivity extends Activity { private TextView textView; private connect connectThread; private String result1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); connectThread = new connect(); connectThread.start(); try { Thread.currentThread().sleep(200); } catch (InterruptedException e) { e.printStackTrace(); }
这里要重点说明的是那个connect类的对象connectThread,可以看出这是个线程。
之所以建个子线程是因为刚开始我直接在onCreate里连接的时候一直被堵塞导致app挂掉。。就是刷到真机上点开就闪退。查过很多资料,也有很多人发了跟我一样的问题。我最终是用子线程的方式解决的。
因为很多人是看书或者是一些老的demo学习的,所以会进入困境,由于sdk升级,android4.3以上的手机好像不能在主线程里进行网络操作。
下面是子线程类:
public class connect extends Thread { int count = 0; private String string_url = "http://172.27.163.4:8080/http_server/Servlet";//ip 要自行修改 手机和电脑在同一个局域网下。因为我没有可用的外网服务器,是将PC作为服务器的。 private URL url = null; String result; String readline; public connect() { super(); System.out.println("创建子线程end"); } public void run() { super.run(); System.out.println("get方法begin"); this.getconnect(); System.out.println("get方法end"); //count++; //System.out.println("" + count);这两行我刚开始是为了测试这个线程的执行情况的。因为还是新手,多试试能记得牢 } public void getconnect() { try { url = new URL(string_url); System.out.println("11111111111"); HttpURLConnection connect_url = (HttpURLConnection) url.openConnection(); connect_url.setDoOutput(true); connect_url.setDoInput(true); connect_url.setConnectTimeout(10000); connect_url.setRequestMethod("GET"); connect_url.connect(); System.setProperty("http.keepAlive", "false"); InputStreamRead 4000 er in = new InputStreamReader(connect_url.getInputStream(), "utf-8"); System.out.println("22222222222"); BufferedReader reader = new BufferedReader(in); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } reader.close(); result = sb.toString(); in.close(); connect_url.disconnect(); } catch (MalformedURLException e) { // TODO Auto-generated catch block // e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
可能会比较乱,有很多没提到。
像,我写这个的时候用了json解析。代码没贴上来,时间关系,下次再更新。android端的json 我开始的时候犯了个错误,原来服务器端的json的包是导入的。我顺手也导入了android端,结果闪退了,原因是android自己本身就是有关于json的jar的,两个包同时存在的话里面的类会打架导致出错。删掉后来导进去的就好了。
还碰到一些问题,我后续学习中有想起来的话就再加进去。
相关文章推荐
- 计算机网络基本概念
- java编程之网络编程 简易服务器 使用ServerSocket
- 工程中的网络流
- The method getDispatcherType() is undefined for the type HttpServletRequest
- http、TCP/IP协议与socket之间的区别
- HTTPS(2)- keytool
- java编程之网络编程入门 网络地址获取
- http断点续传原理:http头 Range、Content-Range
- 基于tcpdump实例讲解TCP/IP协议
- Linux上快速启动一个HTTP server
- 复习URLHttpConnection方式GET,POST方式链接网络解析uri
- 网络端口cmd命令
- C# HttpWebRequest与HttpWebResponse详解
- Android实现网络多线程文件下载
- http状态码304的介绍
- angularJS 循环调用$http 服务直到成功
- HTTP协议及缓存
- 分享一个TCP状态变迁图
- 网络编程(8)
- Java Socket现实简单的HTTP服务