非Action中获取Spring DAO的技巧
需积分: 3 119 浏览量
更新于2024-09-20
收藏 2KB TXT 举报
"在Action之外的地方获取DAO主要是为了在非控制器层(如自定义标签、过滤器或服务组件)能够访问Spring容器中的Bean。通过ApplicationContext接口可以实现这一目标,ApplicationContext提供了对应用程序上下文的访问,使得我们可以从其中获取任何已配置的Bean。这里介绍两种在非Action中获取ApplicationContext的方法。
首先,可以使用`WebApplicationContextUtils.getWebApplicationContext(ServletContext)`方法,它需要一个ServletContext对象作为参数。ServletContext可以从HttpServletRequest的`request.getServletContext()`方法中获取。这种方式适用于在有HTTP请求上下文的场景,例如在Servlet或Filter中。
其次,`WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext)`方法与前一种类似,但它会在ApplicationContext未找到时抛出异常,确保ApplicationContext总是存在的。这通常用于那些必须依赖ApplicationContext的场景,因为如果没有找到ApplicationContext,程序将无法继续运行。
在实际应用中,我们需要在web.xml中配置`ContextLoaderServlet`来初始化Spring的ApplicationContext。配置如下:
```xml
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
```
这里指定了Spring的配置文件位置(/WEB-INF/applicationContext.xml),`load-on-startup`标签表示在服务器启动时加载该Servlet。
在JSP页面中,我们也可以使用类似的逻辑来获取ApplicationContext和Bean。例如,假设我们需要获取名为`CategoryService`的Bean,可以这样做:
```jsp
<%@page import="org.springframework.context.ApplicationContext"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="com.yourcompany.service.CategoryService"%>
<%
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
CategoryService cs = (CategoryService) ctx.getBean("CategoryService");
List list = cs.getCategoryDAO().findAll();
%>
```
在上述代码中,我们首先获取ApplicationContext,然后通过`getBean`方法得到`CategoryService`实例,并调用其方法获取数据。这种方式避免了直接在JSP中进行业务逻辑处理,保持了Model-View-Controller(MVC)架构的清晰性,同时防止用户直接访问JSP导致的安全问题。"
以上内容详细阐述了如何在Action之外的地方获取DAO,包括使用`WebApplicationContextUtils`工具类以及相关的配置和示例,以确保非控制器组件也能正确地使用Spring容器管理的Bean。
2009-09-14 上传
2013-08-26 上传
2022-09-24 上传
2016-09-07 上传
2020-08-29 上传
2017-09-06 上传
2012-04-17 上传
2010-09-21 上传
2022-08-08 上传
xddTHRYWH
- 粉丝: 0
- 资源: 1
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码