如何在 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);
}
}
我想在我写的一个拦截器中看到对网页的请求。我将根据传入的某些值更改我的响应值 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);
}
}