前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置

spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置

作者头像
菩提树下的杨过
发布2018-01-19 11:28:55
1.5K0
发布2018-01-19 11:28:55
举报

与前面的一篇mybatis 3.2.7 与 spring mvc 3.x、logback整合 相比,只是web层的MVC前端框架,从spring mvc转换成struts 2.x系列,变化并不大

一、pom.xml 配置

代码语言:javascript
复制
  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  4     <modelVersion>4.0.0</modelVersion>
  5     <groupId>infosky</groupId>
  6     <artifactId>struts2-helloworld</artifactId>
  7     <packaging>war</packaging>
  8     <version>1.0</version>
  9     <properties>
 10         <java-version>1.6</java-version>
 11         <struts2.version>2.3.16.3</struts2.version>
 12         <spring.version>3.2.8.RELEASE</spring.version>
 13     </properties>
 14     <dependencies>
 15 
 16         <!-- db driver -->
 17         <dependency>
 18             <groupId>commons-dbcp</groupId>
 19             <artifactId>commons-dbcp</artifactId>
 20             <version>1.4</version>
 21         </dependency>
 22 
 23 
 24         <!-- log -->
 25         <dependency>
 26             <groupId>org.slf4j</groupId>
 27             <artifactId>slf4j-api</artifactId>
 28             <version>1.7.7</version>
 29         </dependency>
 30 
 31         <dependency>
 32             <groupId>ch.qos.logback</groupId>
 33             <artifactId>logback-core</artifactId>
 34             <version>1.1.2</version>
 35         </dependency>
 36 
 37         <dependency>
 38             <groupId>ch.qos.logback</groupId>
 39             <artifactId>logback-classic</artifactId>
 40             <version>1.1.2</version>
 41         </dependency>
 42 
 43         <!-- spring -->
 44         <dependency>
 45             <groupId>org.apache.struts</groupId>
 46             <artifactId>struts2-spring-plugin</artifactId>
 47             <version>2.3.16.3</version>
 48         </dependency>
 49 
 50         <dependency>
 51             <groupId>org.springframework</groupId>
 52             <artifactId>spring-context</artifactId>
 53             <version>${spring.version}</version>
 54         </dependency>
 55 
 56         <dependency>
 57             <groupId>org.springframework</groupId>
 58             <artifactId>spring-beans</artifactId>
 59             <version>${spring.version}</version>
 60         </dependency>
 61 
 62         <dependency>
 63             <groupId>org.springframework</groupId>
 64             <artifactId>spring-core</artifactId>
 65             <version>${spring.version}</version>
 66         </dependency>
 67 
 68         <dependency>
 69             <groupId>org.springframework</groupId>
 70             <artifactId>spring-web</artifactId>
 71             <version>${spring.version}</version>
 72         </dependency>
 73 
 74         <dependency>
 75             <groupId>org.springframework</groupId>
 76             <artifactId>spring-context</artifactId>
 77             <version>${spring.version}</version>
 78         </dependency>
 79 
 80         <dependency>
 81             <groupId>org.springframework</groupId>
 82             <artifactId>spring-context-support</artifactId>
 83             <version>${spring.version}</version>
 84         </dependency>
 85 
 86         <dependency>
 87             <groupId>org.springframework</groupId>
 88             <artifactId>spring-expression</artifactId>
 89             <version>${spring.version}</version>
 90         </dependency>
 91 
 92         <dependency>
 93             <groupId>org.springframework</groupId>
 94             <artifactId>spring-jdbc</artifactId>
 95             <version>${spring.version}</version>
 96         </dependency>
 97 
 98         <dependency>
 99             <groupId>org.springframework</groupId>
100             <artifactId>spring-tx</artifactId>
101             <version>${spring.version}</version>
102         </dependency>
103 
104         <dependency>
105             <groupId>org.springframework</groupId>
106             <artifactId>spring-aop</artifactId>
107             <version>${spring.version}</version>
108         </dependency>
109 
110 
111         <dependency>
112             <groupId>org.aspectj</groupId>
113             <artifactId>aspectjweaver</artifactId>
114             <version>1.7.3</version>
115         </dependency>
116 
117         <dependency>
118             <groupId>aopalliance</groupId>
119             <artifactId>aopalliance</artifactId>
120             <version>1.0</version>
121         </dependency>
122 
123         <!-- oracle -->
124         <dependency>
125             <groupId>com.oracle</groupId>
126             <artifactId>ojdbc6</artifactId>
127             <version>11.2.0.3</version>
128         </dependency>
129 
130         <!-- mybatis -->
131         <dependency>
132             <groupId>org.mybatis</groupId>
133             <artifactId>mybatis-spring</artifactId>
134             <version>1.2.2</version>
135         </dependency>
136 
137         <dependency>
138             <groupId>org.mybatis</groupId>
139             <artifactId>mybatis</artifactId>
140             <version>3.2.7</version>
141         </dependency>
142 
143         <dependency>
144             <groupId>com.github.miemiedev</groupId>
145             <artifactId>mybatis-paginator</artifactId>
146             <version>1.2.15</version>
147         </dependency>
148 
149         <!-- struts -->
150         <dependency>
151             <groupId>org.freemarker</groupId>
152             <artifactId>freemarker</artifactId>
153             <version>2.3.19</version>
154         </dependency>
155 
156         <dependency>
157             <groupId>org.apache.struts</groupId>
158             <artifactId>struts2-core</artifactId>
159             <version>2.3.16.3</version>
160         </dependency>
161 
162         <dependency>
163             <groupId>org.apache.struts.xwork</groupId>
164             <artifactId>xwork-core</artifactId>
165             <version>2.3.16.3</version>
166         </dependency>
167 
168         <dependency>
169             <groupId>ognl</groupId>
170             <artifactId>ognl</artifactId>
171             <version>3.0.6</version>
172         </dependency>
173 
174         <dependency>
175             <groupId>commons-beanutils</groupId>
176             <artifactId>commons-beanutils</artifactId>
177             <version>1.8.3</version>
178         </dependency>
179 
180         <dependency>
181             <groupId>commons-collections</groupId>
182             <artifactId>commons-collections</artifactId>
183             <version>3.2.1</version>
184         </dependency>
185 
186         <dependency>
187             <groupId>commons-fileupload</groupId>
188             <artifactId>commons-fileupload</artifactId>
189             <version>1.3</version>
190         </dependency>
191 
192         <dependency>
193             <groupId>commons-io</groupId>
194             <artifactId>commons-io</artifactId>
195             <version>2.2</version>
196         </dependency>
197 
198         <dependency>
199             <groupId>org.apache.commons</groupId>
200             <artifactId>commons-lang3</artifactId>
201             <version>3.1</version>
202         </dependency>
203 
204         <dependency>
205             <groupId>javassist</groupId>
206             <artifactId>javassist</artifactId>
207             <version>3.12.1.GA</version>
208         </dependency>
209 
210         <!-- Servlet -->
211         <dependency>
212             <groupId>javax.servlet</groupId>
213             <artifactId>servlet-api</artifactId>
214             <version>2.5</version>
215             <scope>provided</scope>
216         </dependency>
217 
218     </dependencies>
219 
220     <profiles>
221         <profile>
222             <!-- 开发环境 -->
223             <id>dev</id>
224             <properties>
225                 <db-url>jdbc:oracle:thin:@172.21.129.51:1521:orcl</db-url>
226                 <db-username>ckg_rpt</db-username>
227                 <db-password>ckg_rpt</db-password>
228             </properties>
229             <!-- 默认激活本环境 -->
230             <activation>
231                 <activeByDefault>true</activeByDefault>
232             </activation>
233         </profile>
234         <profile>
235             <!-- 测试环境 -->
236             <id>test</id>
237             <properties>
238                 <db-url>jdbc:oracle:thin:@172.21.129.51:1521:orcl</db-url>
239                 <db-username>ckg_rpt</db-username>
240                 <db-password>ckg_rpt</db-password>
241             </properties>
242         </profile>
243     </profiles>
244 
245     <build>
246         <resources>
247             <resource>
248                 <directory>src/main/resources</directory>
249                 <filtering>true</filtering>
250             </resource>
251         </resources>
252         <plugins>
253             <plugin>
254                 <groupId>org.apache.maven.plugins</groupId>
255                 <artifactId>maven-compiler-plugin</artifactId>
256                 <version>2.5.1</version>
257                 <configuration>
258                     <source>1.6</source>
259                     <target>1.6</target>
260                     <encoding>utf-8</encoding>
261                 </configuration>
262             </plugin>
263         </plugins>
264     </build>
265     <organization>
266         <name>infosky</name>
267         <url>www.infosky.com.cn</url>
268     </organization>
269 
270 </project>

主要是maven的关键依赖项,不要漏掉就行

二、web.xml

代码语言:javascript
复制
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 5 
 6     <display-name>struts2-helloworld</display-name>
 7 
 8     <context-param>
 9         <param-name>logbackConfigLocation</param-name>
10         <param-value>classpath:logback.xml</param-value>
11     </context-param>
12     <listener>
13         <listener-class>com.cnblogs.yjmyzz.util.LogbackConfigListener</listener-class>
14     </listener>
15     
16     <context-param>
17         <param-name>contextConfigLocation</param-name>
18         <param-value>classpath:spring.xml</param-value>
19     </context-param>
20     <listener>
21         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
22     </listener>
23 
24     <filter>
25         <filter-name>struts2</filter-name>
26         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
27         <!-- <init-param>
28             <param-name>loggerFactory</param-name>
29             <param-value>com.opensymphony.xwork2.util.logging.slf4j.Slf4jLoggerFactory</param-value>
30         </init-param> -->
31     </filter>
32 
33     <filter-mapping>
34         <filter-name>struts2</filter-name>
35         <url-pattern>/*</url-pattern>
36     </filter-mapping>
37 
38     <welcome-file-list>
39         <welcome-file>index.html</welcome-file>
40     </welcome-file-list>
41 
42 </web-app>

注意上面被注释的一段:虽然xwork提供了com.opensymphony.xwork2.util.logging.slf4j.Slf4jLoggerFactory这个类用于整合SLF4J兼容的各种log实现(比如:logback),但我在实际中发现,logback.xml配置文件始终不起作用,运行时一直加载的是logback的默认配置,所以建议改用自已开发的LogbackConfigListener(代码已经在上一篇2.2中给出)

解释:web.xml中主要干了3件事:监听logback配置文件、监听Spring配置文件、注册Struts2的入口Filter

三、weblogic.xml与jboss-deployment-structure.xml

在weblogic下以war包部署时,由于war是一个压缩包,不会自动展开,所以一些依赖于物理文件路径的代码,可能会有问题,比如报一些:

java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded

之类的错误,解决办法:在WEB-INF下放置一个名为weblogic.xml的文件

代码语言:javascript
复制
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90">
 3     <session-descriptor>
 4         <cookie-path>/</cookie-path>
 5     </session-descriptor>
 6     <container-descriptor>
 7         <prefer-web-inf-classes>true</prefer-web-inf-classes>
 8         <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
 9     </container-descriptor>
10     <context-root>struts2-helloworld</context-root>
11     <!-- <library-ref> <library-name>acmlibrary</library-name> </library-ref> -->
12 </weblogic-web-app>

注意:第8行<show-archived-real-path-enabled>true</show-archived-real-path-enabled>,这里告诉weblogic显示war包的真实路径,以便相关代码在取文件路径时能拿到物理路径。

同样,如果部署在jboss下时,由于jboss默认提供的SLF4J的实现与logback有冲突,需要在WEB-INF下放置jboss-deployment-structure.xml,排除jboss自带的jar包

代码语言:javascript
复制
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <jboss-deployment-structure>
 3     <deployment>
 4         <exclusions>
 5             <module name="org.slf4j" />
 6             <module name="org.slf4j.impl" />
 7             <module name="org.slf4j.jcl-over-slf4j" />
 8             <module name="org.slf4j.ext" />
 9         </exclusions>
10     </deployment>
11 </jboss-deployment-structure>

三、struts2中的Action处理及相关配置

先来一个Action的基类

代码语言:javascript
复制
 1 package com.cnblogs.yjmyzz.action;
 2 
 3 import org.slf4j.Logger;
 4 import org.slf4j.LoggerFactory;
 5 
 6 import com.opensymphony.xwork2.ActionSupport;
 7 
 8 public class BaseAction extends ActionSupport {
 9 
10     private static final long serialVersionUID = -4320398837758540242L;
11     protected Logger logger = LoggerFactory.getLogger(this.getClass());
12 
13 }

虽然ActionSupport中有一个LOG的实例变量,但经实践,发现用LOG对象记录的日志,不受logback.xml配置文件控制,所以这里定义一个logger,以便其子类都可以正常使用logback。

其它Action都继承它

代码语言:javascript
复制
 1 package com.cnblogs.yjmyzz.action;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 @Component("HelloWorldAction")
 6 public class HelloWorldAction extends BaseAction {
 7 
 8     private static final long serialVersionUID = -8827776224243873974L;
 9 
10     private String message;
11 
12     public String execute() throws Exception {
13 
14         //log sample
15         for (int i = 0; i < 1000; i++) {
16             logger.trace("logback->trace" + i);
17             logger.debug("logback->debug" + i);
18             logger.info("logback->info" + i);
19             logger.warn("logback->warn" + i);
20             logger.error("logback->error" + i);
21         }
22 
23         return SUCCESS;
24     }
25 
26     public String sayHi() throws Exception {
27         message = "welcome to SSH!";
28         return SUCCESS;
29     }
30 
31     public String getMessage() {
32         return message;
33     }
34 
35     public void setMessage(String message) {
36         this.message = message;
37     }
38 
39 }

注:类上面加上@Component注解,配合这个注释,Spring.xml主配置文件里,配置自动扫描,就不用手动一个一个bean的写配置了

代码语言:javascript
复制
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 4     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xsi:schemaLocation="
 7      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
 8      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 9      http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
10      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
11      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
12     default-autowire="byName">
13 
14     <context:component-scan base-package="com.cnblogs.yjmyzz">
15     </context:component-scan>
16 
17     <import resource="spring-datasource.xml" />
18 </beans>

运行时Spring会自动注入所有Action的实例,这样在配置struts.xml时,就可以用@Component后面name值来代替完整Action类名,简化配置

代码语言:javascript
复制
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4         "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 <struts>
 6 
 7     <package name="home" namespace="/home" extends="default">
 8     
 9         <action name="HelloWorld_*" method="{1}" class="HelloWorldAction">
10             <result>/WEB-INF/views/home/HelloWorld.jsp</result>
11         </action>
12 
13     </package>
14 </struts>

注:第9行<action name="HelloWorld_*" method="{1}" class="HelloWorldAction">的class,如果没有Spring,应该写完整路径com.cnblogs.yjmyzz.action.HelloWorldAction,但现在只需要写HelloWorldAction就行了.

四、MyBatis配置

这跟上一篇完全相同,就不再重复了

五、logback.xml配置

代码语言:javascript
复制
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <configuration scan="true" scanPeriod="1800 seconds"
 3     debug="false">
 4 
 5     <property name="USER_HOME" value="logs" />
 6     <property scope="context" name="FILE_NAME" value="test-logback" />
 7 
 8     <timestamp key="byDay" datePattern="yyyy-MM-dd" />
 9 
10     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
11         <encoder>
12             <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
13             </pattern>
14         </encoder>
15     </appender>
16 
17     <appender name="file"
18         class="ch.qos.logback.core.rolling.RollingFileAppender">
19         <file>${USER_HOME}/${FILE_NAME}.log</file>
20 
21         <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
22             <fileNamePattern>${USER_HOME}/${byDay}/${FILE_NAME}-${byDay}-%i.log.zip
23             </fileNamePattern>
24             <minIndex>1</minIndex>
25             <maxIndex>10</maxIndex>
26         </rollingPolicy>
27 
28         <triggeringPolicy
29             class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
30             <maxFileSize>5MB</maxFileSize>
31         </triggeringPolicy>
32         <encoder>
33             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{150} - %msg%n
34             </pattern>
35         </encoder>
36     </appender>
37 
38     <logger name="com.cnblogs.yjmyzz" level="debug" additivity="true">
39         <appender-ref ref="file" />        
40     </logger>
41 
42     <root level="debug">
43         <appender-ref ref="STDOUT" />
44     </root>
45 </configuration>

示例源码: spring-struts2-mybatis-helloworld.zip

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-09-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档