【问题标题】:How to change response type from Java Servlet如何从 Java Servlet 更改响应类型
【发布时间】:2016-05-07 09:20:56
【问题描述】:

我已经成功完成了 Android Studio Java servlets 模块here。我正在尝试更改从服务器收到的响应并将其显示为敬酒。我设置了示例并收到了一个说“你好”+名字的祝酒词。然后我在 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);
  }
}

这是我的 MainActivity:

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

还有 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();

  }
}

不幸的是,当我希望它现在说“更改文本的测试。:我正在研究如何更改此文本时,我仍然收到“你好”+ TextView 中的数字 1 的响应并更改服务器响应类型,即如果我想接收布尔值或整数而不是简单文本。据我了解,这是在 resp.setContentType() 中处理的,但我正在寻找一些指导。

【问题讨论】:

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

标签: java android google-app-engine servlets gson


【解决方案1】:

有趣,也许有人可以帮助解释差异。当我简单地单击我的应用程序模块的绿色箭头时,它不会推送到服务器,但是 Build > Deploy Module to App Engine 解决了我的问题。不确定是否有区别..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多