我成功地整合了Spring和Spring4GWT。 一切都很好。
我面临的唯一问题是如何在HttpServletRequestObject
课程中获得@service
?
一些配置和代码
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.spring4gwt.server.SpringGwtRemoteServiceServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/ui/test/*</url-pattern>
</servlet-mapping>
public class LoginServiceImpl implements ILoginService {
private IUserService userService;
public LoginServiceImpl(IUserService userService) {
super();
this.userService = userService;
}
public boolean isAuthenticUser(String userName, String password) {
// operation
}
}
在LoginServiceImpl
中,我无法获取Servlet对象。
我需要它,以便我可以将它用于不同的目的。
任何想法?
答案 0 :(得分:4)
最后我得到了一个解决方案。 如果有人想要在GWT-RPC服务中访问HttpServletrequest,那么以下内容可以提供帮助。
<filter>
<filter-name>springRequestFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>springRequestFilter</filter-name>
<url-pattern>/your_pattern/*</url-pattern>
</filter-mapping>
ServletRequestAttributes sra = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes());
sra.getRequest();
希望这是有帮助的
答案 1 :(得分:2)
从设计的角度来看,you should NOT have a HttpServletRequest object in your service layer
。相反,从请求中检索您需要的信息,并将它们作为参数传递给您的服务层。
请详细说明您要执行的操作以及您在服务层中需要HttpServletRequest对象的原因。
否则您的依赖关系层次结构将具有循环。根据视图层查看依赖于服务层和服务层的图层。
答案 2 :(得分:1)
您需要将HttpServletRequest从Controller传递给服务方法(例如作为方法参数)。
反正:
答案 3 :(得分:1)
还有另一种解决方案,当您还需要HttpServletResponse
时,它可能会派上用场。
简单地说:
ServiceImpl
课程延长org.spring4gwt.server.SpringGwtRemoteServiceServlet
(无论如何都应该这样做)SpringGwtRemoteServiceServlet#getBean()
以返回this
对象this
直接引用您的ServiceImpl
而不是Spring4GWT,{li> SpringGwtRemoteServiceServlet
将成为web.xml
延长ServiceImpl
的实例。这也是标准的GWT方式,你甚至可以使用@RemoteServiceRelativePath自动化它。
this
运行servlet(上面的SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this)
对象)以完成依赖注入ServiceImpl
也将是响应请求的servlet,并且能够从父类访问getThreadLocalRequest() 它看起来并不是那种hacky。基本上GWT希望你的服务类是servlet,而Spring4GWT希望它是标准的Spring组件。这种方法介于两者之间。