开发者

Problem connecting to servlet From Android client

I am trying to connect to the Servlet (Tomcat localhost). Here is my code.

ServletTest.java (the client)

public class ServletTest extends Activity {
    private static final String TAG = "Test";
        /** Called when the activity is first created. */

    protected static EditText username;
    protected static EditText password;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

         username = (EditText)findViewById(R.id.username);


         Button goButton = (Button)findViewById(R.id.connect);
         goButton.setOnClickListener(mGoListener);
    }

    private OnClickListener mGoListener = new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            //finish();
                String uname=username.getText().toString();
                Log.v(TAG, uname);
                networkthread ob = new networkthread(uname);

        }
    };

}

class networkthread implements Runnable {
        private static final String TAG = "Test";
        String uname;
        public networkthread(String uname) {
                this.uname =  uname;
                Thread t = new Thread(this);
                t.start();
        }
        public void run(){
            try{
                Log.v(TAG,"Inside try");
                Log.v(TAG,"before con");
                URL url=new URL("http://192.168.1.117/servletAndroid/TestAndroid");
                HttpURLConnection con;
                con=(HttpURLConnection)url.openConnection();
                Log.v(TAG,"after con");
                con.setDoInput(true);
                con.setDoOutput(true);
                con.setRequestMethod("POST");
                con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                con.setRequestProperty("Accept", "application/octet-stream");
                Log.v(TAG,"Before dos");
                DataOutputStream dos=new DataOutputStream(con.getOutputStream());
                Log.v(TAG,"After dos");
                dos.writeUTF(uname.trim());
                dos.flush();
                dos.close();
                Log.v(TAG,"Finish try");
            }
            catch(Exception e){
                Log.v(TAG,"Exception"+e);
            }

        }

}

TestServlet.java (the server)

public class TestServlet extends HttpServlet {
    public void init() {
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try{
        System.out.println("test");
        DataInputStream in = new DataInputStream((InputStream) request.getInputStream());
        String uname = in.readUTF();
        //String password = in.readUTF();
        System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");

        System.out.println(":::::::::::" + uname);


        response.setContentType("text/plain");
        //response.setContentLength(info.length());
        PrintWriter out = response.getWriter();
        out.println(uname);

        in.close();
        out.close();
        out.flush();
        }
        c开发者_高级运维atch(Exception e){
            System.out.println("Exceptin "+ e);
        }

    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doPost(request, response);
    }

But I didn't got anything in Tomcat console printed by the servlet. How is this caused and how can I solve it?


You aren't executing the HTTP request. The URLConnection won't do that after writing to the request body and closing the stream as you seem to think. It will be executed only when you read anything from the response.

Do it after you write to the request body. E.g. get the response status and/or body.

int status = con.getResponseCode();

if (status == 200) {
    // Anything OK! Read if necessary response body. 
    // It'll contain whatever you wrote by response.getWriter() in servlet.
    InputStream response = con.getInputStream();
    // ...
}

See also:

  • How to use URLConnection to fire and handle HTTP requests?

Further, on Android you would also need to set user permission to connect the Internet. Add the following to the AndroidManifext.xml.

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

See also:

  • Android security and permissions
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜