zoukankan      html  css  js  c++  java
  • spring与struts简单整合案例

    Spring,负责对象对象创建

    Struts, 用Action处理请求

    Spring与Struts框架整合,

             关键点:让struts框架action对象的创建,交给spring完成!


    步骤:

    1)引入struts .jar相关文件

    a、引入struts .jar相关文件

      commons-fileupload-1.2.2.jar
      commons-io-2.0.1.jar
      commons-lang3-3.1.jar
      freemarker-2.3.19.jar
      javassist-3.11.0.GA.jar
      ognl-3.0.5.jar
      struts2-core-2.3.4.1.jar
      xwork-core-2.3.4.1.jar

    b、spring-core  相关jar文件

        commons-logging-1.1.3.jar
        spring-beans-3.2.5.RELEASE.jar
        spring-context-3.2.5.RELEASE.jar
        spring-core-3.2.5.RELEASE.jar
        spring-expression-3.2.5.RELEASE.jar 

    c、spring-web 支持jar包

          spring-web-3.2.5.RELEASE.jar                   【Spring源码】

      struts2-spring-plugin-2.3.4.1.jar      【Struts源码】

     

    2)配置:

    struts.xml                   【struts路径与action映射配置】

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	"http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    
    	<package name="user" extends="struts-default">
    
    		<action name="user" class="userAction" method="execute">
    			<result name="success">/index.jsp</result>
    		</action>
    
    	</package>
    
    </struts>
    

    bean.xml               【spring ioc容器配置】

    a . bean-dao.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
        	 http://www.springframework.org/schema/beans/spring-beans.xsd
         	 http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd
             http://www.springframework.org/schema/aop
             http://www.springframework.org/schema/aop/spring-aop.xsd
             http://www.springframework.org/schema/tx
         	 http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    	
    	<bean id="userDao" class="com.gqx.dao.UserDao" scope="singleton" lazy-init="false"></bean>
    	
    	
    </beans>     
    

     b、bean-service.xml 同上,将对象加入IOC容器

    <bean id="userService" class="com.gqx.service.UserService">
    		<property name="userDao" ref="userDao"></property>
    </bean>
    

     c、bean-action.xml

    <bean id="userDao" class="com.gqx.dao.UserDao" scope="singleton" lazy-init="false"></bean>
    

    web.xml                    

    【核心过滤器: 引入struts功能】

    【初始化spring的ioc容器】

    具体配置可 以查看源码的api

        <!-- 1. struts配置 -->
    	<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>
    
    	<!-- 2. spring 配置 -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>WEB-INF/classes/bean-*.xml</param-value>
    	</context-param>
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
    

    3)、代码 

    项目截图

    userDao

    package com.gqx.dao;
    
    public class UserDao {
    
    	public void save() {
    		System.out.println("DB:保存用户");
    	}
    }
    

     userService

    public class UserService {
    	
    	//IOC容器注入
    	private UserDao userDao;
    	public void setUserDao(UserDao userDao) {
    		this.userDao = userDao;
    	}
    
    	public void save() {
    		userDao.save();
    	}
    }
    

     userAction

    public class UserAction extends ActionSupport {
    
    	// springIOC容器注入
    	private UserService userService;
    	public void setUserService(UserService userService) {
    		this.userService = userService;
    	}
    	
    
    	public String execute() {
    		userService.save();
    		return SUCCESS;
    	}
    }
    

     4)、访问http://localhost:8080/struts-spring/user

    就可以看到控制台如下的信息


    Bug

    按照

    java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener  错误解决方案

    种错误意思很明确:找不到“ org.springframework.web.context.ContextLoaderListener”这个类,ContextLoaderListener这个类是在spring-web.jar包下,我仔细检查了项目jar环境,发现该jar包确实存在,而且也能找到编译后的ContextLoaderListener.class文件。

     在网上找到的回答解决了问题,如下

    如果你是maven项目,tomcat在发布项目的时候没有同时发布maven依赖所添加的jar包,
    你需要设置一下eclipse:
    项目 —> 属性 -> Deployment Assembly -> Add -> Java Build Path Entries -> 选择Maven Dependencies -> Finish -> OK
    把对应的Maven依赖包也发布到tomcat,调试时会自动把那些jar发布到指定目录下,tomcat也能找到那些jar了。

    网上有去查了一下原因,如下:

    Java虚拟机是根据Java ClassLoader(类加载器)决定如何加载Class。  
    系统默认提供了3个ClassLoader    
    Root ClassLoader,ClassPath Loader,Ext ClassLoader  
    我们也可以编写自己的ClassLoader,去加载特定环境下的Jar文件。    
    能不能加载Jar,加载哪里的Jar,是由ClassLoader决定的。    
    问题可能是 导入的仅仅是jar包的引用,需要特殊的指定(类似快捷方式)

    如果是通过正常的WEB-INF/lib下引入jar包,会正常的显示,默认会buildPath,
    如果是通过项目->属性->java Build Path->Add library->user Library....这种方式导入包,会出现上面那种错误,需要按上面的方法去解决!


  • 相关阅读:
    Python GUI编程(Tkinter)——Label and Button
    第一章——正则表达式(特殊符号和字符)
    最近用到的Blender相关技术总结
    第一章—正则表达式(简介/动机)
    发个随笔纪念Manim配置成功
    JUC并发工具的使用和原理
    线程启动与终止原理
    cpu缓存一致性
    布隆过滤器
    对象并不一定都是在堆上分配内存(逃逸分析)
  • 原文地址:https://www.cnblogs.com/helloworldcode/p/6351528.html
Copyright © 2011-2022 走看看