我必须将一些公共代码注入到任何servlet的service
方法中。
因此,我构建了一个母servlet SuperController
:
public class SuperController extends HttpServlet{
private HttpServletRequest lastRequest ;
//........
public void service(HttpServletRequest req,HttpServletResponse res){
setLastRequest(req); // example of common code
}
}
然后,所有其他servlet都从此servlet扩展。
public GalleryServlet extends SuperController{
public void service(HttpServletRequest req,HttpServletResponse res){
//instead of running here the common code , use AOP.
// Then , the other code
}
}
我想使用AOP执行公共代码(即:setLastRequest(req)
),因为super.service(req,res)
引发了ERROR 405
。
@Before("* com.SuperController+.service(..)")
public void doStuffBeforeService(JoinPoint joinPoint) {
// do stuff here
}
此切入点* com.SuperController+.service(..)
是否包含从service
继承的所有类中的com.SuperController
个方法。
如何访问doStuffBeforeService
内的服务方法的参数(req& res)?
答案 0 :(得分:1)
HTTP 405 表示不支持HTTP请求方法,例如GET用于POST等。检查您的配置/日志以获取支持的方法和实际使用的方法。
回答你的其他问题 -
* com.SuperController+.service(..)
应包含service
类层次结构中的com.SuperController
方法。见here。joinPoint.getArgs()
访问method arguments。