서블릿과 연결되어있는 응용 프로그램을 만들려고합니다. 디버거는 오류를 표시하지 않고 서블릿도는 오류가 여전히 코드가 작동하지 않습니다이 안드로이드 응용 프로그램 My_appActivity.java에게 있습니다어떻게 안드로이드 애플 리케이션에서 서블릿에 연결 하시겠습니까?
package com.m_app.first_app;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import com.m_app.first_app.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class My_appActivity extends Activity{
public static final String TAG = "SearchRecord";
private EditText mEditText1;
private Button mButton1;
@Override
public void onCreate(Bundle icicle)
{
Log.v(TAG, "Activity State: onCreate()");
super.onCreate(icicle);
setContentView(R.layout.main);
// Obtain handles to UI objects
mEditText1 = (EditText) findViewById(R.id.editText1);
mButton1 = (Button) findViewById(R.id.button1);
// Register handler for UI elements
mButton1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Log.d(TAG, "mButton1 clicked");
String keyword = mEditText1.getText().toString();
networkthread ob = new networkthread(keyword);
}
});
}
}
class networkthread implements Runnable
{
public static final String TAG = "SearchRecord";
String keyword;
public networkthread(String keyword)
{
this.keyword=keyword;
Thread t = new Thread(this);
t.start();
}
public void run()
{
Log.v(TAG,"Inside the sub thread");
try
{
Log.v(TAG,"Inside try");
Log.v(TAG,"Before conn");
URL url = new URL("http://10.0.2.2:8080/My_project/yahoo");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Accept", "application/octet-stream");
conn.connect();
Log.v(TAG,"After conn");
OutputStream out = conn.getOutputStream();
Log.v(TAG,"Before DOS");
DataOutputStream dos = new DataOutputStream(out);
Log.v(TAG,"After DOS");
dos.writeInt(keyword.getBytes().length);
dos.write(keyword.getBytes(),0,keyword.getBytes().length);
dos.flush();
dos.close();
InputStream is = conn.getInputStream();
DataInputStream dis = new DataInputStream(is);
String status = dis.readLine();
conn = null;
Log.v(TAG,"Finish try");
}
catch (Exception e)
{
Log.v(TAG,"Exception: "+e);
e.printStackTrace();
}
}
}
서블릿은 다음과 같습니다
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.*;
import java.net.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.nio.*;
import java.io.*;
public class search extends HttpServlet {
private InputStream is = null;
private DataInputStream dis = null;
PrintWriter out;
protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException , IOException{
try{
out=response.getWriter();
is = request.getInputStream();
dis = new DataInputStream(is);
int len = dis.readInt();
byte data[] = new byte[len];
dis.read(data,0,len);
String Keyword = new String(data);
out.print("Keyword :"+Keyword);
is.close();
dis.close();
String s= "success";
} catch(Exception e)
{
out.print(e);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
service(request,response);
}
}
"작동하지 않음"을 정의하십시오. 예외가 발생했는지, 서버 측과 클라이언트 측 모두에서 로깅을 모두 보았습니까? –
클라이언트 측 (안드로이드 애플 리케이션)에서 아무런 흥분을 얻지 못하고 서버 측에서 서블릿은 EOFException을 제공합니다. int len = dis.readInt(); – Mandeep