Я пытаюсь зарегистрировать содержимое коллекции атрибутов HttpServletRequest. Мне нужно сделать это, когда сервлет сначала начнется, и снова прямо перед завершением сервлета. Я делаю это, пытаясь понять жестокий и плохо поддерживаемый сервлет. Поскольку я должен иметь как можно меньше влияния, фильтры сервлетов не являются опцией.Есть ли способ перебора через HttpServletRequest.getAttributeNames() более одного раза?
Итак, вот в чем проблема. Когда сервлет запускается, я буду перебирать нумерацию, возвращаемую HttpServletRequest.getAttributeNames(). Однако, когда я хочу повторить его снова, getAttributeNames(). HasMoreElements() возвращает «false»! Я не могу найти способ «перезагрузить» перечисление. Хуже то, что даже если я добавлю атрибуты в коллекцию с помощью HttpServletRequest.setAttribute(), я все равно получаю результат «false», когда я вызываю getAttributeNames(). HasMoreElements().
Действительно ли это возможно? Невозможно ли повторять итерации через имена атрибутов более одного раза?
По запросу, вот мой код. Это довольно просто - не думаю, что я делаю забавные вещи.
/**
*
* Returns the contents of the Attributes collection, formatted for the InterfaceTracker loglines
*
*/
@SuppressWarnings("unchecked")
public static String getAttributes(HttpServletRequest request) {
try {
StringBuilder toLog = new StringBuilder();
Enumeration attributeNames = request.getAttributeNames();
while(attributeNames.hasMoreElements()) {
String current = (String) attributeNames.nextElement();
toLog.append(current + "=" + request.getAttribute(current));
if(attributeNames.hasMoreElements()) {
toLog.append(", ");
}
}
return "TRACKER_ATTRIBUTES={"+ toLog.toString() + "}";
}
catch (Exception ex) {
return "TRACKER_ATTRIBUTES={" + InterfaceTrackerValues.DATA_UNKNOWN_EXCEPTION_THROWN + "}";
}
}
, поэтому вы вызываете метод getAttributes при запуске метода service/doGet/doPost, а затем снова вызываете его в конце, обряде? – YoK
Downvoting, поскольку это всего лишь ошибка пользователя. – EJP