很多时候,在做身份验证及授权的时候可能会用到应用的环境,如ServletContext,Session等。那么在DWR中的服务或拦截器需要用到Session这些东西的时候,获取是一件很简单的事。通常有两个办法 一、使用DWR的API。其实是一个静态的方法,极其不推荐。所以示例也就免了。 二、让DWR自已注入需要的元素,这里讲的元素仅限于:
- HttpServletRequest
- HttpServletResponse
- HttpSession
- ServletContext
- ServletConfig
做法是在服务里定义方法的时候,把以上的元素作为参数。在方法体内直接使用即可。而不必担心它的来源,来源是DWR会自已根据参数的类型注入。在客户端调用的时候不需要提供这个参数。ServletContext之类的东西作为ThreadLocal的变量保存起来的。简单的示例。
1、服务代码
package net.jf.ajax.session; import javax.servlet.http.HttpSession; public class Store { public void setAttribute(String name,String value,HttpSession session){ session.setAttribute(name,value); } public String getAttribute(String name,HttpSession session){ return (String) session.getAttribute(name); } }
2、spring配置文件
<beans> <bean id="store" class="net.jf.ajax.session.Store"> </bean> </beans>
3、dwr.xml
<dwr> <allow> <create creator="spring" javascript="store"> <param name="beanName" value="store"/> </create> </allow> </dwr>
以上的代码及配置文件可以达到目的:DWR与Spring结合,DWR直接使用Spring管理的Bean作为服务,当然,受Spring管理的Bean功能一点都不减,复杂的如有着事务管理的Bean同样有用。而且尽管是Spring管理的Bean,方法的参数中有Servlet相关的参数,DWR同样自动注入。
现在去调试页面看看我们暴露的接口及效果如何!在调试页面找到store的服务,点击进去,可以见到暴露的方法有两个:
一个是SetAttribute("","",AUTO),第三个参数表明自动注入,客户端只需要提供前两个参数即可。
一个是GetAttribute(“”,AUTO),第二个参数表明自动注入,客户只需要提供一个名字参数取值即可。
在测试页面提供的输入框中测试两个函数,SetAttribute填入name,jeff提交成功,在GetAttribute函数中填入name获得一个返回值,正是jeff。至此,尝试成功!