Как получить HTTP-запрос в классе Java

Я хочу увидеть запрос на веб-страницу в перехватчике, который я написал. Я изменю значение своего ответа в соответствии с некоторыми значениями во входящем запросе. Я буду использовать что-то вроде этого;

String ex = request.getHeader("GET");
if(ex.contains("addHeader("a","example")"));
     response.setHeader("a","null");

Вот мой index.ft:

Your name: <@s.url value="${name}"/>
Enter your name here:<br/>
<form action="" method="get">
<input type="text" name="name" value="" />
<input type="submit" value="Submit" />
</form>

Вот часть моего класса TestInterceptor.java;

public class TestInterceptor implements Interceptor {
....
@Override
public String intercept(ActionInvocation ai) throws Exception {
    System.out.println("before");

    //the area where I want to write the codes I want to use above
    // I can't to reach request.getHeader(...) function in here
    String result = ai.invoke();
    System.out.println("after");
    return result;
}

Что такое решение или другой способ использования этих функций. Спасибо за помощь. Примечание. Я использую структуру Struts.


person kadir    schedule 06.09.2019    source источник
comment
FWIW: на этот вопрос почти всегда можно ответить самостоятельно, если провести небольшое исследование. Потратив несколько минут на Javadocs, вы найдете ответ.   -  person Dave Newton    schedule 06.09.2019
comment
Я в равной степени устал от людей, которые не следят за Javadocs (что приводит к ответу за 2-4 клика) или не взламывают существующий перехватчик, чтобы просто посмотреть на него. Вот в чем дело: вы можете решить эту проблему, следуя документам и коду. Это один из трех навыков, которые нужны каждому разработчику: способность идти по следу. (Двумя другими являются регулярное выражение и рекурсия.)   -  person Dave Newton    schedule 06.09.2019
comment
Кроме того, в дополнение к пренебрежению должной осмотрительностью при чтении Javadocs и/или кода, поиск в Интернете заголовков запросов на доступ к перехватчику struts 2 приводит к нескольким ответам, в том числе на SO, что в любом случае делает вопрос обманом. Итак, четыре навыка, которые нужны каждому разработчику, включая поиск в Интернете.   -  person Dave Newton    schedule 06.09.2019
comment
вы совершенно правы :)) ходить на работу   -  person kadir    schedule 06.09.2019
comment
Велосипед для меня ;) Пожалуйста, не интерпретируйте мои комментарии негативно - они призваны помочь, а не навредить. Я также обновлю некоторые документы S2, чтобы включить эту информацию более прямо и ясно.   -  person Dave Newton    schedule 06.09.2019


Ответы (2)


Вы можете получить его из ActionContext

ActionContext context = ai.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
person TruckDriver    schedule 06.09.2019

Вам необходимо изменить свой запрос до того, как будет запущен HTTP-запрос (например, до выполнения Action и до выполнения Result).

PreResultListener позволяет нам сделать именно это. Ваш TestInterceptor должен реализовывать PreResultListener и обеспечивать реализацию метода beforeResult(). В этом методе мы получаем объект HttpServletResponse из ActionContext и добавляем к нему пользовательскую логику.

В вашем случае: изменение значения заголовка

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

public class TestInterceptor extends AbstractInterceptor implements  PreResultListener {

@Override
public String intercept(ActionInvocation invocation) throws Exception {
  before(invocation);
    return invocation.invoke();
}

private void before(ActionInvocation invocation) {
  invocation.addPreResultListener(this);
}

private void modifyHeader(Object action, HttpServletResponse response) {
  response.addHeader("myHeader", "myValue");
}

public void beforeResult(ActionInvocation invocation, String resultCode) {
  ActionContext ac = invocation.getInvocationContext();
  HttpServletResponse response = (HttpServletResponse) ac.get(StrutsStatics.HTTP_RESPONSE);
  modifyHeader(invocation.getAction(), response);  
}
}
person Hassam Abdelillah    schedule 06.09.2019