`
king_tt
  • 浏览: 2153993 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

http://www.cnblogs.com/amosli/p/3577645.html

 
阅读更多

一 . 需求

学了这么久的ssh,一直都是别人整合好的框架去写代码,自己实际动手时才发现框架配置真是很坑爹,一不小心就踏错,真是纸上得来终觉浅!

本文将记录整合struts + spring的过程 ,都是采用目前最新的 jar包,spring 是4.0.2,struts是2.3.16版本.

本篇文章是在上一篇文章使用spring 4.0 + maven 构建超简单的web项目的基础上完成的,把上一个项目copy一份,改一下名称即可,然后接着往下看。

二.实现

1.效果图

2.项目架构图:

3.实现代码:

pom.xml

复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.amos</groupId>
    <artifactId>ssh_integrated</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>ssh_integrated Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.16</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.16</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>ssh_integrated_struts2</finalName>
    </build>
</project>
复制代码

注:这里要注意一下引入的struts2的插件.

com.amos.web.HelloActionSpring.java

复制代码
package com.amos.web;

import org.apache.struts2.ServletActionContext;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.amos.service.IHello;
import com.opensymphony.xwork2.ActionContext;

public class HelloActionSpring {
    private IHello hello;
    public String hellomethod(){
        ApplicationContext applicationContext  = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
        hello= applicationContext.getBean(IHello.class);
        String sayHi = hello.sayHi();
        ActionContext.getContext().put("msg", sayHi);
        return "SUCCESS";
    }
}
复制代码

注:这里使用的是手工去加载beans.xml,可以实现action的功能,但这种方式不推荐,没有完全实现spring和struts的集成.

com.amos.web.HelloAction.java

复制代码
package com.amos.web;

import com.amos.service.IHello;
import com.opensymphony.xwork2.ActionContext;

public class HelloAction {
    private IHello hello;
    public void setHello(IHello hello) {
        this.hello = hello;
    }
    public String hellomethod(){
        String sayHi = hello.sayHi();
        ActionContext.getContext().put("msg", sayHi);
        return "SUCCESS";
    }
}
复制代码

注:这里暴露一个set方法,让spring去注入,以达到spring管理struts的bean的目的.

struts.xml

复制代码
<?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>
    <constant name="struts.objectFactory.spring.autoWire" value="type"></constant>
    <package name="hellopackage" extends="struts-default"
        namespace="/">
        <action name="helloaction" class="com.amos.web.HelloAction"
            method="hellomethod">
            <result name="SUCCESS" type="dispatcher">
                success.jsp
            </result>
        </action>
    </package>
</struts>
复制代码

注:spring和struts集成要用到sturts2的一个插件如下所示:

struts2-spring-plugin-2.3.16-sources.jar/struts-plugin.xml

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

这里就是把struts的bean交给spring管理.

struts2-core-2.3.16-sources.jar/org/apache/struts2/default.properties

### valid values are: name, type, auto, and constructor (name is the default)

struts.objectFactory.spring.autoWire = type

这里表示注入的方式是根据类型,因为类型一般只有一个,但名称有可能会重复.

4.遇到的问题

1).异常如下:

复制代码
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ssh_integrated]]
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
    at java.util.concurrent.FutureTask.get(FutureTask.java:111)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ssh_integrated]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 7 more
Caused by: java.lang.IllegalArgumentException: Filter mapping specifies an unknown filter name sturts2
    at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:3040)
    at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:3005)
    at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1271)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1346)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more
复制代码

写错单词了:strtus-default

2)异常如下:

复制代码
WARNING: Could not create JarEntryRevision for [jar:file:/home/amosli/develop/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ssh_integrated_struts2/WEB-INF/lib/struts2-spring-plugin-2.3.16.jar]!
java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils
    at com.opensymphony.xwork2.util.fs.JarEntryRevision.build(JarEntryRevision.java:50)
    at com.opensymphony.xwork2.util.fs.DefaultFileManager.monitorFile(DefaultFileManager.java:97)
    at com.opensymphony.xwork2.util.fs.DefaultFileManager.loadFile(DefaultFileManager.java:74)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:1011)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:165)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:132)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:233)
复制代码

缺少jar包.pom.xml加上:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>

5.本文源码

https://github.com/amosli/ssh_integrated_spring_struts2


分享到:
评论

相关推荐

    sso详细设计说明书(下篇)转载(海纳百川文章http://www.cnblogs.com/David-weihw/a)

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在多个应用系统中只需登录一次,即可访问所有相互信任的应用系统,无需再次进行身份验证。本详细设计说明书的下篇将深入探讨SSO的核心原理、实现方式及...

    android IM

    http://www.cnblogs.com/not-code/archive/2011/07/16/2108369.html 成功解决asmack不能收发文件的问题 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=81207 asmack :...

    .net C# 学习过程中收藏的一些比较有用的和感兴趣的链接

    http://www.360doc.com/userhome.aspx?userid=19107491&cid=3 jQuery基本选择器及用法 前端模块化开发(AMD和CDM规范) ...http://www.cnblogs.com/dwlsxj/p/4052871.html 浅析MSIL中间语言——PE文件结构篇

    谷歌开源的Google Preview Image Extractor.zip

    这个项目可以考虑用在特定情况下加速加载无损格式的预览图,提升用户体验 该项目没有demo代码,demo代码可参考博客园的一位网友的文章:http://www.cnblogs.com/tntmonks/p/5143350.html 标签:无损图片

    DirectX修复工具.exe

    解决: Mysql安装时mysqld.exe报`应用程序无法正常启动(0xc000007b)`的问题 https://www.cnblogs.com/hellomrr/p/13237684.html

    RTSPPLAYER.zip

    https://www.cnblogs.com/wangguchangqing/p/5734998.html https://www.cnblogs.com/wangguchangqing/p/5744941.html 通过上面两篇博客可以了解ffmpeg(本次需要用到的API)。 建议先学习以下博客 从零开始学习音视频...

    MVC5&EF6入门教程_Part3

    转自:http://www.cnblogs.com/miro/p/4030622.html 整理到了doc文档里,内含代码。 方便一起学习。

    bndong https://bndong.github.io/Cnblogs-Theme-SimpleMemory/v2/#/

    bndong https://bndong.github.io/Cnblogs-Theme-SimpleMemory/v2/#/

    边缘羽化.rar

    canvas 不规则透明图像边缘羽化 看了一个哥们的文章写的。 看了这个帖子写的 https://www.cnblogs.com/luoeeyang/p/9337871.html 用在抠图之后,消除边缘毛边。 谁还有更好的算法求分享

    HSQLDB安装与使用-转自http://www.cnblogs.com/wllyy189/archive/2008/11/15/1334002.html

    INSERT INTO Users (id, name, email) VALUES (1, 'John Doe', 'john.doe@example.com'); ``` 4. **查询数据**: 执行SELECT语句获取数据: ```sql SELECT * FROM Users; ``` **源码分析** HSQLDB是用纯Java...

    图书管理系统0.2版

    http://www.cnblogs.com/biehongli/p/7895033.html 如果这你还是运行不起来,那么我只能说,我佩服你。 3:今天有人加我,我也只是修改了一些明显bug,附带源码和数据库,基本可以跑起来。但是还是有很多bug,乱码,...

    一个牛人提供的GIS源码(很好)

    可以看我以前的截图,做了个界面,请大家PP http://www.cnblogs.com/Tangf/archive/2006/03/16/351640.html 特色四:简单的加密方式也可以学习下。这个加密方式可以对移植性进行控制。 特色五:移植性强,许多东西...

    JS截屏控件

    开发文档-ASP.NET(C#):http://www.cnblogs.com/xproer/archive/2010/12/04/1896552.html 开发文档-PHP:http://www.cnblogs.com/xproer/archive/2011/05/16/2047915.html 开发文档-JSP:...

    libmcrypt-2.5.8.tar.gz/mcrypt-2.6.8.tar.gz/mhash-0.9.9.9.tar.gz

    libmcrypt-2.5.8.tar.gz、mcrypt-2.6.8.tar.gz、mhash-0.9.9.9.tar.gz php安装mcrpyt插件所需的包 安装方法:http://www.cnblogs.com/huangzhen/archive/2012/09/12/2681861.html

    CKFinder.v2.4.1.完美注册版.ha666.zip

    CKEditor+CKFinder使用与配置:http://www.cnblogs.com/dmeiyang002/p/3808307.html 官网地址:http://ckeditor.com CKEditor下载地址:http://ckeditor.com/download CKFinder(免费版本)下载地址:...

    开源GIS最著名的地图投影库Proj.4库

    Proj.4的功能主要有经纬度坐标与地理坐标的转换,坐标系的转换,包括基准变换等。 下载也可直接使用git进行下载:git clone ...cmake下载与安装:https://www.cnblogs.com/chenyaling/p/10894084.html

    android的回调机制(转自http://www.cnblogs.com/vtianyun/archive/2012/06/19/2555427.html)

    在Android开发中,回调机制是实现组件间交互和事件处理的关键技术。回调允许一个对象在完成特定任务或触发特定事件时通知另一个对象。这个概念在软件工程中广泛使用,尤其在事件驱动编程中。Android系统中的回调机制...

    学员管理系统

    1. **Struts2**:作为MVC(Model-View-Controller)框架,负责处理HTTP请求,调度业务逻辑,并将结果返回给视图层。它提供了一种灵活的机制来定义页面间的数据传递和控制流程,使得学员信息的增删改查操作更加简便。...

    webApi请求插件PostMan

    webApi请求插件PostMan,请参考博客:http://www.cnblogs.com/chenwolong/p/PostMan.html。webApi请求插件PostMan,请参考博客:http://www.cnblogs.com/chenwolong/p/PostMan.html。webApi请求插件PostMan,请参考博客...

    finance-master1简单的财务会计软件.rar

    详情查看:https://www.cnblogs.com/edwardorchis/p/10506391.html 如何快速开始 https://www.cnblogs.com/edwardorchis/p/14405910.html 软件架构 WPF的客户端+自宿主.Net Web API 软件截图 输入图片说明 我们...

Global site tag (gtag.js) - Google Analytics