Как извлечь данные на стороне сервера? - PullRequest
0 голосов
/ 30 апреля 2011

Я использовал следующий код на моей стороне клиента (эмулятор Android).

HttpClient client=new DefaultHttpClient();
HttpPost httpPost=new HttpPost("http://117.192.xxx.xxx:8080/System_Alpha/");
List pairs=new  ArrayList();
String strUsername=username.getText().toString();
String strPassword=password.getText().toString();
pairs.add(new BasicNameValuePair("username", strUsername));
pairs.add(new BasicNameValuePair("password", strPassword));
httpPost.setEntity(new UrlEncodedFormEntity(pairs));
HttpResponse response= client.execute(httpPost);

Мой вопрос, на стороне сервера, как я могу извлечь эти значения?То есть логин и пароль?

1 Ответ

0 голосов
/ 30 апреля 2011

Это зависит от того, что у вас на стороне сервера.

Скажите: если у вас есть Java-сервлет, вы просто получаете необходимые данные в вашем doGet (соответственно doPost) методе:

final String userName = (String) request.getParameter("userName");
final String password = (String) request.getParameter("password");

Обновление 1
Вот пример простого сервлета, который аутентифицирует пользователя с двумя параметрами выше и отсылает ответ xml:

public class LoginServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException
    {
        response.setContentType("text/xml");
        final ServletOutputStream out = response.getOutputStream();
        try
        {
            final String userName = (String) request.getParameter("userName");
            final String password = (String) request.getParameter("password");
            final boolean authenticated = login(userName, password);
            if (authenticated)
                out.println("<login><status>SUCCESS</status></login>");
            else
                out.println("<login><status>FAIL</status></login>");
        }
        catch (Exception e)
        {
            out.println("<login><status>ERROR</status></login>");
        }
        out.flush();
        out.close();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException
    {
        this.doGet(request, response);
    }

    private boolean login(final String userName, final String password)
    {
        // TODO: authenticate the user and return the result: true/false
    }
}

В вашем web.xml вы декларируете свой сервлет, написав:

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>[yourpackagename].LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet/*</url-pattern>
</servlet-mapping>

где [yourpackagename] - пакет, в котором объявлен ваш LoginServlet.

Таким образом, если все они находятся в веб-приложении с именем Try, и вы развернули его, вы можете получить доступ к сервлету входа в систему через http на http://localhost:8080/Try/LoginServlet/.

Обновление 2
Чтобы получить данные из HttpResponse, вам необходимо:

HttpEntity entity = response.getEntity();
final InputStream inputStream = entity.getContent();

Вы обрабатываете это InputStream в зависимости от того, какие данные оно содержит.

Если вам нужно значение String объекта ответа:

HttpEntity entity = response.getEntity();
final String responseText = EntityUtils.toString(entity);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...