我正在处理混乱的情况,我正在使用Servlets& Struts2的。
我正在调用HTTPServlet以及我处理数据的位置。
然后我需要调用struts API在DB中插入数据。
因为我也在使用HTTPSession。
所以我打电话给
ServletActionContext.getRequest()
在struts动作类中获取HttpRequest然后进行会话。
Struts Action类被Servlet调用。
但是
ServletActionContext.getRequest()
始终返回NULL。
是因为它没有被网络调用。
答案 0 :(得分:5)
首先,ServletActionContext
和ActionContext
都使用ThreadLocal
来存储每个请求对象(例如请求和响应)。这由Struts2处理。如果您尝试从Servlet调用它们,它们将返回null
,因为请求被路由到您的servlet,而不是Struts2(因此Struts2没有为请求创建操作上下文)。
据说,Struts2是一个比Servlet API更高级的抽象。您从servlet中调用Struts2操作的事实听起来确实错误。
如果需要在servlet和action中执行一些公共过程,则创建一个单独的类来处理该过程(即,在数据库中插入数据),然后从servlet和action中调用该类。
如果这不是您想要做的,那么请提供更多详细信息,以及您的servlet和操作代码示例。