如何从Javaservlet更改响应类型

如何从Javaservlet更改响应类型,java,android,google-app-engine,servlets,gson,Java,Android,Google App Engine,Servlets,Gson,我已经成功地完成了Android Studio Java servlets模块。我试图更改从服务器收到的响应,并将其显示为toast。我树立了一个榜样,收到了一个祝酒词,上面写着“你好”+名字。然后,我更改了res.getWriter()方法中的文本,如下所示: public class MyServlet extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse r

我已经成功地完成了Android Studio Java servlets模块。我试图更改从服务器收到的响应,并将其显示为toast。我树立了一个榜样,收到了一个祝酒词,上面写着“你好”+名字。然后,我更改了res.getWriter()方法中的文本,如下所示:

public class MyServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    resp.setContentType("text/plain");
    resp.getWriter().println("Please use the form to POST to this url");
}

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    String name = req.getParameter("name");
    resp.setContentType("text/plain");
    if(name == null) {
        resp.getWriter().println("Please enter a name");
    }
    resp.getWriter().println("A test to change text" + name);
  }
}
以下是我的主要活动:

public class MainActivity extends AppCompatActivity {

TextView mNumberCounter;
Button mIncrease;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    mNumberCounter = (TextView) findViewById(R.id.number_counter);
    mIncrease = (Button) findViewById(R.id.increase_button);


    mIncrease.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new ServletPostAsyncTask().execute(new Pair<Context, String>(getApplicationContext(), mNumberCounter.getText().toString()));
        }
    });
  }
}
public类MainActivity扩展了AppCompatActivity{
文本视图mNumberCounter;
纽扣折痕;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
mNumberCounter=(TextView)findViewById(R.id.number\u计数器);
mIncrease=(按钮)findViewById(R.id.increase\u按钮);
mIncrease.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
新建ServletPostAsyncTask().execute(新对(getApplicationContext(),mNumberCounter.getText().toString());
}
});
}
}
以及ServletPostAsyncTask类:

public class ServletPostAsyncTask extends AsyncTask<android.support.v4.util.Pair<Context, String>, Void, String> {
private Context context;

@Override
    protected String doInBackground(android.support.v4.util.Pair<Context, String>... params) {
    context = params[0].first;
    String name = params[0].second;

    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("http://servlet-example-1198.appspot.com/hello");
    try {
        // Add name data to request
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("name", name));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpClient.execute(httpPost);
        if (response.getStatusLine().getStatusCode() == 200) {
            return EntityUtils.toString(response.getEntity());
        }
        return "Error: " + response.getStatusLine().getStatusCode() + " " + response.getStatusLine().getReasonPhrase();

    } catch (ClientProtocolException e) {
        return e.getMessage();
    } catch (IOException e) {
        return e.getMessage();
    }
}

@Override
protected void onPostExecute(String result) {
    Toast.makeText(context, result, Toast.LENGTH_LONG).show();

  }
}
公共类ServletPostAsyncTask扩展了AsyncTask{
私人语境;
@凌驾
受保护的字符串doInBackground(android.support.v4.util.Pair…params){
context=params[0]。首先;
字符串名称=参数[0]。秒;
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://servlet-example-1198.appspot.com/hello");
试一试{
//向请求中添加名称数据
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“name”,name));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpClient.execute(httpPost);
if(response.getStatusLine().getStatusCode()==200){
返回EntityUtils.toString(response.getEntity());
}
返回“Error:”+response.getStatusLine().getStatusCode()+“”+response.getStatusLine().getReasonPhase();
}捕获(客户端协议例外e){
返回e.getMessage();
}捕获(IOE异常){
返回e.getMessage();
}
}
@凌驾
受保护的void onPostExecute(字符串结果){
Toast.makeText(上下文、结果、Toast.LENGTH_LONG).show();
}
}

不幸的是,我仍然收到“Hello”+我在TextView中的数字1的回复,而我希望它现在会这样说“更改文本的测试:我正在研究如何更改此文本,以及如何更改服务器响应类型,例如,如果我希望接收布尔值或整数而不是简单文本。据我所知,这是在resp.setContentType()中处理的,但我正在寻找一些指导。

有趣的是,也许有人可以帮助解释这种差异。当我简单地单击我的应用程序模块的绿色箭头时,它不会推送到服务器,但是Build>deploymoduletoappengine解决了我的问题。我不确定有什么不同


您确定已将新版本重新部署到“”?修改doGet方法以返回其他内容,然后将URL粘贴到浏览器中并进行检查。我在Android Studio中运行了服务器模块,因此我确定已将其重新部署到服务器。为什么我必须更改doGet()方法中的任何内容?doGet()会立即在浏览器中显示其响应,并且更易于调用(GET方法是浏览器中的默认方法),因此它更易于调试。