如何在 Java class 中到达 HTTP 请求

How to reach HTTP Request in Java class

我想在我写的一个拦截器中看到对网页的请求。我将根据传入的某些值更改我的响应值 request.I 我将使用类似的东西;

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 class;

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 框架

可以从ActionContext中获取

ActionContext context = ai.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);

您需要在触发请求 HTTP 之前修改您的请求(例如,在 Action 执行之前和 Result 执行之前)。

PreResultListener 让我们能够做到这一点。您的 TestInterceptor 应该实现 PreResultListener 并提供 beforeResult() 方法的实现。在此方法中,我们从 ActionContext 中获取 HttpServletResponse object 并向其添加自定义逻辑。

对于您的情况:修改 header 值

TestInterceptor在before方法中向ActionInvocation注册自己,在结果执行前得到回调。

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