android客户端与部署到tomcat的servlet服务器之间实现http通信

博主目前小白,为了完成这个踩到不少地雷,在此处记录下,可能错误忘记了,以后想起来再更新。

服务器端:

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");

            InputStreamReader 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的,两个包同时存在的话里面的类会打架导致出错。删掉后来导进去的就好了。

还碰到一些问题,我后续学习中有想起来的话就再加进去。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值