SSH整合的三种方式主要指的是将Spring、Struts和Hibernate这三个流行的Java开源框架集成到一起,以构建高效的企业级Web应用程序。下面将详细讲解这三种整合方法。 1. 使用Spring的`ActionSupport` 在Spring与Struts整合的第一种方式中,我们让Struts的Action类继承自Spring的`ActionSupport`类。`ActionSupport`是Spring提供的一个基类,它扩展了Struts的`Action`类,提供了一些额外的功能,如国际化支持。通过这种方式,Action类可以直接访问到Spring的ApplicationContext,从而获取到业务层(Service或DAO)的对象。 在`struts-config.xml`中,我们需要添加`ContextLoaderPlugIn`插件来加载Spring的配置文件,这样Spring的IoC容器就可以初始化并管理我们的bean。在`applicationContext.xml`中,我们定义我们的业务bean,如`loginDao`。 例如,`LoginAction`类可以如下所示: ```java public class LoginAction extends org.springframework.web.struts.ActionSupport { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form; WebApplicationContext ctx = this.getWebApplicationContext(); LoginDao dao = (LoginDao) ctx.getBean("loginDao"); User u = new User(); u.setName(loginForm.getName()); u.setPwd(loginForm.getPwd()); if (dao.checkLogin(u)) { return mapping.findForward("success"); } else { return mapping.findForward("error"); } } } ``` 这种方式简化了Action类的代码,使其专注于业务逻辑,而不是对象的创建和管理,实现了表示层和业务逻辑层的解耦。 2. 使用Spring的`DelegatingRequestProcessor` 第二种方法是通过Spring的`DelegatingRequestProcessor`来替换Struts默认的`RequestProcessor`。`DelegatingRequestProcessor`会接管Struts的请求处理流程,并将控制权交给Spring,从而实现Spring对整个请求生命周期的控制。 在`struts-config.xml`中,我们将`RequestProcessor`的class属性设置为`DelegatingRequestProcessor`: ```xml <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/> ``` 然后,我们的Action类不再需要继承`ActionSupport`,而是可以是普通的Struts `Action`类。业务bean的获取可以通过`WebApplicationContextUtils`来完成,如下所示: ```java public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); LoginDao dao = (LoginDao) context.getBean("loginDao"); // ... } } ``` 这种方法降低了Action类与Spring的耦合度,因为Action类并不直接依赖于Spring的API。 3. 全权委托 第三种方式是全权委托Spring处理请求,这种策略通常适用于更复杂的应用场景,如AOP事务管理。在Struts的配置中,我们可以完全不使用ActionSupport,而是让Spring来创建和管理Action实例。在`struts-config.xml`中,我们不再指定特定的Action类,而是使用Spring的`BeanNameUrlHandlerMapping`或`SimpleUrlHandlerMapping`来映射URL到Spring的bean。 例如,我们可以在Spring的配置文件中定义一个Action bean: ```xml <bean name="/login.action" class="com.example.actions.LoginAction"> <property name="loginDao" ref="loginDao"/> </bean> ``` 然后在`web.xml`中配置Spring的DispatcherServlet来处理所有请求。这种方式下,Spring完全掌控了请求的生命周期,包括Action的创建、依赖注入以及销毁。 总结起来,SSH整合的三种方式各有优缺点。第一种方式简单易用,但Action类与Spring有较强耦合;第二种方式降低了Action类与Spring的耦合,但需要处理RequestProcessor的配置;第三种方式则提供了更高的灵活性,但配置更为复杂。选择哪种方式取决于项目的需求和团队的偏好。
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助