android与tomcat数据交互

绪论:

        目前大部分android的APP都具有联网功能,并且能够与服务器进行数据交互,本文采用tomcat作为服务器以实现数据交互,信息交互的前提是android设备和服务器在同一个局域网内。

android设计:

        这边需要先说明一点,自从android某个版本之后(好像是3.0?)android的网络请求必须放在线程中。了解这一点之后我们开始android设计。

        1.添加权限:

        <uses-permission android:name="android.permission.INTERNET"/>

        2.开始网络请求的语句:

        我的整个工程只有一个按钮,按下表示发送网络请求,以下代码都放在onClick的事件响应函数下:

final String URL="http://172.20.10.2:8123/WebProject_war/Servlet";//根据自己的项目需要修改

    new Thread(new Runnable() {
        public void run()
        {
            String msg = "";
            try {
                URL url = new URL(URL);//生成一个URL实例,指向我们刚才设定的地址URL

                //openConnection()方法只是创建了一个HttpURLConnection实例,并不是真正连接,在连接之前可以设置一些属性
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();

                conn.setRequestMethod("POST"); //设置请求方式为post

                conn.setReadTimeout(5000);//设置超时信息
                conn.setConnectTimeout(5000);//设置超时信息

                conn.setDoInput(true);//设置输入流,允许输入
                conn.setDoOutput(true);//设置输出流,允许输出
                conn.setUseCaches(false);//设置POST请求方式不能够使用缓存

                //定义我们要传给servlet的参数,格式好像一定要xxx=xxx,代表键值对,如果有多组,要加一个&,                                                                                         //如“cmd1=version&cmd2=value”
                String data = "cmd=version";

                //获取输出流,其实在这之前还应该有一个操作:conn.connect();意思为建立HttpURLConnection连接,只不过//getOutputStream()方法会隐含进行连接,所以不调用connect()也可以建立连接
                OutputStream out = conn.getOutputStream();

                //把data里的数据以字节的形式写入out流中
                out.write(data.getBytes());

                //刷新,将数据缓冲区中的数据全部输出,并清空缓冲区
                out.flush();

                //关闭输出流并释放与流相关的资源
                out.close();

                //这里是将conn.getInputStream中的数据包装在字符流的缓冲流reader中
                //这里值得一说的是:无论是post还是get,http请求实际上直到HttpURLConnection的getInputStream()这个函数
                //里面才正式发出去,同时getInputStream返回的值就是servlet返回的数据
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line = null;
                if ((line = reader.readLine()) != null) {
                    msg = line;//如果数据比较多的话要把if换成while,循环体代码也要小改一下,由于我当时只是测试,就没改
                }

                conn.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }).start();

到此可能整个android已经差不多,需要留意的是final String URL="http://172.20.10.2:8123/WebProject_war/Servlet";的路径怎么确定,我待会儿会讲。

web设计:

        我使用的是IDEA进行web设计,eclipse的目录结构应该也差不多,前提为这两个软件都配置了tomcat,关于如何配置的教程读者百度自行搜索,很多。

        1.先创建一个Servlet类:Servlet.class

        2.类的内容

由于android通信方式是POST,所以我们只需要编写doPost就行了

public class Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        //避免使用super.doPost(request,response)
        PrintWriter out = response.getWriter();
        String cmd=request.getParameter("cmd");
        if(cmd.compareTo("version")==0) {

            out.print("OK");
            out.flush();
            out.close();
        }
        else
        {
            out.print("No");
            out.flush();
            out.close();
        }
    }


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub

    }
}

在这里HttpServlet等很多东西可能会报错cannot resolve symbol HttpServlet,出现这个问题的原因是缺少servlet-api.jar包造成的,我实在不想去别的网站抄袭过来了,就直接附上一个链接:https://blog.csdn.net/just_now_and_future/article/details/81235318

如果JSP页面也有相关的JavaWeb对象,则还要寻找jsp-api.jar;如果只有Servlet,则只选择servlet-api.jar。我写的是没界面的,所以目前没碰到需要添加jsp-api.jar的

到这一步已经完成了web的编写,界面设计暂时不需要,但是我们要在web.xml目录下加上

<servlet>
    <display-name>Servlet</display-name>
    <servlet-name>Servlet</servlet-name>
    <servlet-class>myClass.Servlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Servlet</servlet-name>
    <url-pattern>/Servlet</url-pattern>
</servlet-mapping>

完成以上那些就差把项目部署到tomcat了:部署到服务器需要先生成war包,IDEA或者eclipse各有各的方法。我就还是厚着脸皮叫读者自行百度,自己省点事,(*^__^*) 嘻嘻

生成了war包后,从你web工程的out--artifacts下面寻找war包,应该还要进一层文件夹才能找到,看我以下图片的目录可知。

把寻找到的war包复制,放到tomcat的webapps文件夹下。然后startup启动tomcat,你就会发现war包自行解压,之后你就可以外部访问自己写的web了。这里回到刚刚说的final String URL="http://172.20.10.2:8123/WebProject_war/Servlet,这个网址的构成为ip+端口号+解压出来的文件夹名+在web.xml中配置的那个名字(这个构成我是猜的,反正我自己按照这样是成功了)

这样就完成了android和tomcat最简单的通信,我搜索到的教程好像都是没有提到war的,我不知道是我操作过程不对还是怎么的,我绕了很大一圈才通过war访问到,如果哪个读者实现了不用war就能访问的方法,请求告知,谢谢。

猜你喜欢

转载自blog.csdn.net/qq_36514344/article/details/86509446