非Action中获取Spring DAO的技巧
需积分: 3 89 浏览量
更新于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 上传
2016-09-07 上传
2023-05-26 上传
2023-10-20 上传
2023-05-26 上传
2023-07-13 上传
2023-07-12 上传
2023-03-16 上传
xddTHRYWH
- 粉丝: 0
- 资源: 1
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程