gpt4 book ai didi

java - 从 Android 客户端连接到 servlet 时出现问题

转载 作者:行者123 更新时间:2023-12-01 05:48:06 24 4
gpt4 key购买 nike

我正在尝试连接到 Servlet(Tomcat 本地主机)。这是我的代码。

ServletTest.java(客户端)

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(服务器)

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();
}
catch(Exception e){
System.out.println("Exceptin "+ e);
}

}

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

doPost(request, response);
}

但是我在 Tomcat 控制台中没有看到 servlet 打印的任何内容。这是怎么造成的以及如何解决?

最佳答案

您没有执行 HTTP 请求。正如您所想的那样,在写入请求正文并关闭流后,URLConnection 不会执行此操作。仅当您从响应中读取任何内容时,它才会执行。

在写入请求正文之后执行此操作。例如。获取响应状态和/或正文。

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();
// ...
}

另请参阅:

<小时/>

此外,在 Android 上,您还需要设置用户权限才能连接互联网。将以下内容添加到 AndroidManifext.xml

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

另请参阅:

关于java - 从 Android 客户端连接到 servlet 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5415220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com