ServletActionContext.getRequest()返回NULL

Har*_*hra 1 servlets struts2

我正在处理混合的情况,我正在使用Servlets和Struts2.

我正在调用HTTPServlet以及我正在处理数据的地方.

然后我需要调用struts API来在DB中插入数据.

在那我也使用HTTPSession.

所以我在打电话

ServletActionContext.getRequest()
Run Code Online (Sandbox Code Playgroud)

在struts动作类中获取HttpRequest然后进行会话.

Struts Action类被Servlet调用.

ServletActionContext.getRequest()
Run Code Online (Sandbox Code Playgroud)

总是返回NULL.

是因为它没有被网络调用.

Ste*_*tez 5

首先,ServletActionContextActionContext都使用ThreadLocal来存储每个请求对象(如请求和响应).这由Struts2处理.如果您尝试从Servlet调用它们,它们将返回null,因为请求被路由到您的servlet,而不是Struts2(因此Struts2没有为请求创建操作上下文).

话虽如此,Struts2是一个比Servlet API更高级的抽象.您从servlet中调用Struts2操作的事实听起来确实是错误的.

如果需要在servlet和action中执行一些公共过程,则创建一个单独的类来处理该过程(即,在数据库中插入数据),然后从servlet和action中调用该类.

如果那不是您想要做的,那么请提供更多详细信息,以及您的servlet和操作代码示例.