Получить атрибуты сеанса при отправке запроса GET из приложения Android в сервлет - PullRequest
0 голосов
/ 04 мая 2019

В моем сервлете У меня есть такой метод:

private void showUserReservations(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, ServletException {
    String username = null;

    HttpSession session = request.getSession();

    if (session.getAttribute("loggedUser") != null) {
        username = (String) session.getAttribute("loggedUser");
    }

    // get data from DB
    List<Operation> userReservations = operationsDbUtil.getUserReservations(username);
    if (userReservations != null) {
        request.setAttribute("AVAILABLE_DATA", userReservations);
        response.getWriter().write(gson.toJson(userReservations));
    }
}

Я должен получить эти данные в моем приложении для Android , чтобы заполнить ListView, который находится во фрагменте. Если я запускаю свой код Android для метода, который не нуждается в атрибуте сеанса, данные принимаются правильно. Проблема возникает, когда я запускаю этот метод showUserReservations (), потому что сервлет не может получить атрибут loggedUser.

Следуя этому руководству Общие настройки, чтобы сохранить пользователя вошедшим в систему Я поддерживаю своего пользователя в системе, используя общие настройки, но как я могу сообщить сервлету, какой пользователь делает запрос? Есть ли способ отправить мое имя пользователя, которое сохраняется в общих настройках , поэтому эта часть кода

 if (session.getAttribute("loggedUser") != null) {
        username = (String) session.getAttribute("loggedUser");
    }

может работать правильно?

код Android, который связывается с сервлетом

private String strUrl = null;
private String jsonString = null;
View view;
ListView listView;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.fragment_my_reservations, container, false);
    Button btn = view.findViewById(R.id.jsonBtn);


    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showJson(view);
        }
    });

    return view;
}

public void showJson(View view) {
    new FillListTask().execute();
}

public class FillListTask extends AsyncTask<Void, Void, String> {
    @Override
    protected void onPreExecute() {
        strUrl = "http://xxx.xxx.x.x./xxxxxxxxxxx;
    }

    @Override
    protected void onPostExecute(String result) {
        TextView textView = view.findViewById(R.id.tvJson);
        textView.setText(result);
    }

    @Override
    protected String doInBackground(Void... voids) {
        try {

            URL url = new URL(strUrl);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.connect();

            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder stringBuilder = new StringBuilder();

            while ((jsonString = bufferedReader.readLine()) != null) {
                stringBuilder.append(jsonString + "\n");
            }

            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();

            return stringBuilder.toString().trim();


        } catch (IOException exception) {
            System.out.println(exception.getMessage());
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }
  }
}

Таким образом, я могу получать данные из сервлета из методов, которые не требуют атрибута сеансов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...