在已有Struts2框架基础上整合Spring框架的相关问题

在学习struts2框架整合Spring的时候,遇到了一些问题在此总结一下,大家可以学习交流。

Problem1Struts2中整合Spring过程(使用idea操作)

       (1):打开idea左上角“File”,选择“Project Structure”,选择“Modules”,选中项目XXX, 点击 + 号,选择Spring。然后,点击选中的Spring,第一次引入的时候会在右边偏下位置出现一段话,意思是没有找到相关的jar包,那么我们此时点击这段话后的蓝色部分进行Spring的jar包下载。(一般情况下,会需要一段时间(但是不是很长),请耐心等待)

(2):此时下载完Spring的jar包之后,我们在WEB-INF目录下面创建一个XML文件命名为:“applicationContext.xml”,然后打开该文件你会发现在文件为头部出现一句话,意思大概是:该配置文件没有加入到项目中,那么此时的解决办法是:点击File-->Modules-->Spring-->点击+号-->选择刚才创建的applicationContext.xml文件à点击右下角OK-->点击右下角apply问题解决。

(3):对于Struts2框架和Spring框架的整合不如在Struts2框架中整合Hibernate框架简单,因为除了两个SS框架对应的各自的基本jar包外,对于Struts2框架中还得添加一个名为:struts2-spring-plugin-x.x.xx.jar 的jar包,

对于Spring框架还得额外加入spring-web-x.x.x.RELEASE.jar的jar包。

(4)在完成第三步之后,我们知道Struts2框架在进行运行的时候需要使用监听器来实现启动,此时我们会在WEB-INF下面的web.xml文件中添加对于Struts2框架的监听器;同理,我们在Struts2中添加Spring的时候我们同样也需要添加对于Sping框架的监听器用来在Struts2框架启动的时候初始化Spring容器,此时只需向web.xml文件写入下面的代码即可。

      <!--设置了一个监听器监听spring框架的启动,加载spring的配置文件,初始化了spring容器-->

<listener>

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

</listener>

<!--配置参数-->

<context-param>

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

    <param-value>WEB-INF/applicationContext.xml</param-value>

</context-param>

注意:这里我们对<context-param>标签做一下解释,这个标签存在的意义是,如果在我们的项目中我们有多个配置文件(除了applicationContext.xml之外还有其他的xml文件),那么我们同样可以使用<param-name>(指定的值是:contextConfigLocation,该值不可以随意更改)以及<param-value>(指定的是配置文件的路径)标签实现配置。

(4)在applicationContext.xml文件中配置<bean>标签,这一步对于Spring框架中的容器是很重要的。这一点也是我们使用Spring+Struts框架整合web程序的意义的实现方式(原因是:我们将Struts2框架中的action的配置中的class指定的名称由原来的实际的action类变为了Spring容器中的Bean ID,这样Struts2不再自己负责创建action的实现,而是隐藏在该action下的Spring容器中的action实例,这个实例才是用户请求的控制器。这也实现了web应用程序中的java对象的解耦,这一点是很重要的。)。配置<bean>标签的代码如下(根据自己的实际更改)

<!--需要注意的是一个bean标签对应一个java对象-->

<bean id="loginAction" class="Action.LoginAction" scope="prototype">

    <property name="ls" ref="ls"/>

</bean>

<bean id="messageAction" class="Action.MessageAction" scope="prototype">

    <property name="ms" ref="ms"/>

</bean>

<!--spring的配置文件中初始化ls对象-->

<bean id="ls" class="Service.LoginServiceImpl"/>

<bean id="ms" class="Service.MessageServiceImpl"/>

这里我们对上述代码进行重点部分的解释:<bean>标签的id指的是存储在Spring容器中的一个java对象,便于后边的使用。Class指的是一个java类。

5)最后就是配置Tomcat服务器即可。

Problem2Struts2中整合Spring之后配置applicationContext.xml文件相关注意事项(使用idea操作)

1):普通类的注入(两种方式:设值注入(传值注入)和构造注入)设值注入:先定义一个pojoTest然后里面有两个属性a,b。此时在applicationContext.xml文件中添加下面的代码:

<!--实现对普通类的注入-->

<!--实现设值注入-->

<bean id="Test" class="包名.Test">

    <property name="a" value="xxx"/>

    <property name="b" value="xxxxxx"/>

</bean>

构造注入:代码如下

<!--实现构造注入-->

<bean id="Test" class="包名.Test">

    <constructor-arg index="0">

        <value>xxx</value>

    </constructor-arg>

    <constructor-arg index="1">

        <value>xxxxxx</value>

    </constructor-arg>

    </bean>

其中的<constructor-arg index="x">标签作用是向pojo类中实现属性的传值,需要注意的是在使用构造注入的时候我们一定要在pojo类中添加构造方法。代码如下:

Public Test(){

private String a;

private String b;

public Test(String a, String b){

    this.a = a;

    this.b = b;

}

……

}


其中的<constructor-arg index="x">标签中的index表示在pojo类中定义的构造方法中的第几个参数(从0开始)。

2)传值是传对象(两种注入方式)

还是拿刚才的例子,不过我们在Test类中创建了一个Test1类的对象

Public Test(){

private String a;

private String b;

private Test1 test1;//定义的一个类对象作为Test的属性

public Test(String a, String b, Test1 test1){

    this.a = a;

    this.b = b;

this.test1 = test1;

}

……

}

那么此时的applicationContext.xml文件中需要写代码如下:

<bean id="Test" class="包名.Test">

    <property name="a" value="xxx"/>

    <property name="b" value="xxxxxx"/>

<property name="test1" ref="testsp"/>


</bean>

<!--spring的配置文件中初始化ls对象-->

<bean id="test1" class="包名.Test1"/>

在使用test1的对象的时候需要在另外一个bean中进行配置。在此例子中,我们需要注意的是在配置ref属性的时候该值需要指定的是下边的对于Test1中配置的id名称(必须保持一样)。

Problem3Struts2中报错-No result defined for action Action.LoginAction and result success

我在之前遇到了:No result defined for action Action.LoginAction and result input

或者

No result defined for action Action.LoginAction and result error

解决办法:

       要注意的是在Struts2.xml文件中配置action中的<result name=xxx>中需要注意的是这个值必须要和action中的return xxx”一致;此外还需要注意的是如果在action类中使用return SUCCESS的时候我们需要注意的是在Struts2中的配置result name=””的时候不可以使用大写的 SUCCESS 而是必须指定小写的success

       以上仅是我在自己写代码的时候总结的一些注意知识点,不足之处还望大家批评指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wyypersist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值