Struts2整合Spring

Struts整合Spring:

前2天弄了Struts2整合Spring弄了好久,开始一直对配置文件哪些不理解,为什么在Struts的Action中可以生成实例对线,为什么要用Spring的ico容器来生成,还给它起了一个牛B哄哄的名字(依赖注入/控制反转)--其实也没有那么神秘,废话不多说,你慢慢看下去会对你的理解Struts整合Spring有帮助。

 

首先:Spring的核心是IoC(Inversion ofControl 控制反转)容器和AOP机制;控制反转或者叫依赖注入其实很好理解;比如说一个person类(调用者),要用斧头类(被调用者)的对象去调用劈柴的方法。通常我们是在person类中去new 一个斧头类的对象,然后再去调用劈柴的方法。但是你用spring框架的时候,你就不需要这样去做,那怎么做呢?在Spring框架下,创建斧头类的对象不再需要person类去做,而是又spring容器去生成斧头的对象(控制反转),然后注入到person类(调用者)中(依赖注入)。理解这里很重要,

这里是告诉我们spring容器它帮我们创建被调用者的对象,并且通过依赖注入到调用者中去。

 

 

接下来我们用一个登录例子去讲解Struts2整合Spring。

 

 

步骤:
                   1、首先你得有一个空白的Struts2项目(这个不会可以到我博客前面找Struts框架的搭建,估计看这篇博文的应该没有不会的吧,如果有那么小伙子你是要上天呀!)

1、准备Spring.jar和commons-logging.jar。Struts2整合spring必须的2个包,网上可以下载到

2、完成Spring容器的初始化并配置相关内容(类似Strust2加载核心控制器一样)

3、请求页面

4、实现控制器逻辑(Action)

5、实现业务逻辑(Service)

6、配置Struts.xml

7、配置applicationContext.xml

 

 

 

 

 

 

首先给贴出文件目录结构:清晰明了有木有啊有木有!!!


a)  把相应jar包拉到一个空白的Struts2的lib目录下

 

 

 

 

a)web.xml

 

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4">

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

  <filter>

    <filter-name>struts2</filter-name>

    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

  <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

</web-app>

 

<listerner>标签会在web应用启动时自动加载applicationContext.xml文件(默认是在ERB-INF路径下);可以通过在加入<context-param>

                                                                                                        <param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/classes/applocationContext.xml</param-value>

<context-param>

                   以上代码可以把加载路径修改为/WEB-INF/目录下的classes中

b)  我们来写一个很简单的请求页面(里边有name和pass 2个属性)

 

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>String_Struts</title>

</head>

<body>

    <form action="new/string_struts.action">

        用户名:<input type="text" name="name">

        <br/>

        密码:<input type="text" name="pass">

        <br/>

        <input type="submit" name="提交把">

    </form>

</body>

</html>

 

e)实现控制器逻辑(Action)

package com.jluzh.ex8.action;

 

 

 

import com.jluzh.ex8.servlet.UserServlet;

import com.opensymphony.xwork2.ActionSupport;

 

public class Spring_StrutsAction extends ActionSupport{

        

         private String name;

         private String pass;

         private UserServlet us;

        

        

         public String getName() {

                   return name;

         }

 

 

         public void setName(String name) {

                   this.name = name;

         }

 

 

         public String getPass() {

                   return pass;

         }

 

 

         public void setPass(String pass) {

                   this.pass = pass;

         }

 

 

         public UserServlet getUs() {

                   return us;

         }

 

 

         public void setUs(UserServlet us) {

                   this.us = us;

         }

 

 

         public String execute() throws Exception{

                   if(us.logintest(getName(), getPass()))

                   return SUCCESS;       

                   else return ERROR;

         }

}

这里需要注意的是加粗字体部分,我们把处理用户登录的逻辑放在UserServlet组件中,该组件包含一个logintest方法;该方法根据用户名与密码判断用户登录是否成功。实际上,业务逻辑组件是整个应用的核心,控制器可以获得业务逻辑组件的引用,既可以调用业务逻辑组件的所有方法,这就完成了控制器与业务逻辑组件的之间的整合。

 

 

 

 

 

 

 

 

 

c)  实现业务逻辑组件

              定义业务逻辑组件接口:

publicinterfaceUserServlet{

    publicbooleanlogintest(Stringname,Stringpass);

}

 

                            实现业务逻辑组件接口

publicclassUserServletImpimplementsUserServlet{

 

    @Override

    publicbooleanlogintest(Stringname,Stringpass){

        // TODO Auto-generated method stub

        if(name.equals("wanglinbomk")&&pass.equals("wlb922922"))

        returntrue;

        elsereturnfalse;

    }

   

}

从以上代码可以看出UserServletImp类实现了UserServlet(业务逻辑组件接口),在配置文件中会把UserServletImp依赖注入到前面Action类的UserServlet 的us对象中。

 

d)  配置Struts.xml

<struts>

 

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />

    <constant name="struts.devMode" value="true" />

    <constant name="struts.objectFactory" value="spring"/>

 

    <package name="default" namespace="/new" extends="struts-default">

     

           <action name="string_struts" class="string_struts">

                 <result name="success">/WEB-INF/contest/success.jsp</result>

           </action>

    

       <action name="*">

                 <result>/WEB-INF/contest/{1}.jsp</result>

           </action>

    </package>

 

    <!-- Add packages here -->

 

</struts>

注意上面action的class对应的不是一个具体的类(包名.类名),而是一个字符串标识(先理解为专门的ID)

h)配置applicationContext.xml

<beans xmlns ="http://www.springframework.org/schema/beans"

    xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation ="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

   

 

   

    <bean id="string_struts" class="com.jluzh.ex8.action.Spring_StrutsAction">

       <property name="us">

           <bean class="com.jluzh.ex8.servlet.UserServletImp"></bean>

        </property>

    </bean>

 

</beans>

 

注意看以上代码:<beanid=”String_struts”…/>对应struts.xml中的具体处理类(包名加类名)。<property name=”us”…/>指定action中的”us”(也就是为action中的us注入)。用什么注入呢?用的就是<property<bean   class=”…”/>  />  是<bean>中class的类去注入。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值