web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 加载spring的配置和日志的配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--项目字符集设置-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--字符集设置-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!--是否强制字符集转化-->
<init-param>
<param-name>forceEndofing</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 在启动Web容器时,自动装配spring applicationContext.xml的配置信息 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>fymSpringTest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载spring的配置-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlert.xml</param-value>
</init-param>
<!--设置某项的启动顺序,一般像数据库连接池等模块需要优先启动的,就在web.xml中设置启动优先级。如:
中间的值越小,优先级就越高-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>fymSpringTest</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
spring-servlert.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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.galaxy.fym.action"></context:component-scan>
<!-- 返回json 方法一 需要导入 fastjson.jar包 -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 配置视图解析器 -->
<!--返回vm文件-->
<bean class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="suffix" value=".vm" />
<property name="contentType" value="text/html;charset=utf-8" />
</bean>
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="WEB-INF/view/" />
</bean>
<!--返回jsp文件-->
<!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="view/"/>
<property name="suffix" value=".jsp"/><!–可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 –>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>-->
</beans>
logback.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 日志存放路径 -->
<property name="LOG_PATH" value="./log" />
<!-- error的日志 -->
<appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/all_error.log</File>
<!-- 所有ERROR级别的日志文件打印在一个文件里 过滤器只会过滤对应的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/all_error.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>5</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
<!-- 输出日志的格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd hh:mm:ss.SSS}:[%thread] %-5level %logger{36} : %msg %n</Pattern>
</layout>
</appender>
<!-- common下的类打印日志 -->
<appender name="commonLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/common.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/common.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>5</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
<!-- 输出日志的格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd hh:mm:ss.SSS}:[%thread] %-5level %logger{36} : %msg %n</Pattern>
</layout>
</appender>
<!-- front下的类打印日志 -->
<appender name="frontLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/front.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/front.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<!-- 输出日志的格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd hh:mm:ss.SSS}:[%thread] %-5level %logger{36} : %msg %n</Pattern>
</layout>
</appender>
<!-- job下的类打印日志 -->
<appender name="jobLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/job.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/job.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<!-- 输出日志的格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd hh:mm:ss.SSS}:[%thread] %-5level %logger{36} : %msg %n</Pattern>
</layout>
</appender>
<!-- remote下的类打印日志 -->
<appender name="remoteLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/remote.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/remote.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<!-- 输出日志的格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd hh:mm:ss.SSS}:[%thread] %-5level %logger{36} : %msg %n</Pattern>
</layout>
</appender>
<!-- service下的类打印日志 -->
<appender name="serviceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/service.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/service.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<!-- 输出日志的格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd hh:mm:ss.SSS}:[%thread] %-5level %logger{36} : %msg %n</Pattern>
</layout>
</appender>
<!-- 支付日志 -->
<appender name="payLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件 -->
<File>${LOG_PATH}/pay.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 超过文件大小会自动分成多个文件保存 数值越小时间越早-->
<FileNamePattern>${LOG_PATH}/pay.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<!-- 每份日志文件的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<!-- 输出日志的格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd hh:mm:ss.SSS}:[%thread] %-5level %logger{36} : %msg %n</Pattern>
</layout>
</appender>
<logger name="com.galaxy.fym.common" level="ERROR">
<appender-ref ref="commonLog"/>
</logger>
<logger name="com.galaxy.fym.front" level="ERROR">
<appender-ref ref="frontLog"/>
</logger>
<logger name="com.galaxy.fym.job" level="INFO">
<appender-ref ref="jobLog"/>
</logger>
<logger name="com.galaxy.fym.remote" level="INFO">
<appender-ref ref="remoteLog"/>
</logger>
<logger name="com.galaxy.fym.service" level="INFO">
<appender-ref ref="serviceLog"/>
</logger>
<logger name="com.galaxy.fym.pay.Pay" level="INFO">
<appender-ref ref="payLog"/>
</logger>
<!-- 框架的输出 -->
<!--<logger name="org.springframework.core" value="ERROR" />
<logger name="org.springframework.beans" value="ERROR" />
<logger name="org.springframework.context" value="ERROR" />
<logger name="org.springframework.web" value="ERROR" />
<logger name="org.apache.zookeeper" value="ERROR" />-->
<!-- 对所有的class文件都会起效果 -->
<root>
<appender-ref ref="errorLog"/>
</root>
</configuration>
pom.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<!-- 声明项目描述符遵循哪一个POM模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!--项目的全球唯一标识符 -->
<groupId>com.galaxy.fym</groupId>
<!--构件的标识符 -->
<artifactId>logback</artifactId>
<!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号-->
<version>1.0.0-SNAPSHOT</version>
<!--项目产生的构件类型,例如jar、war、ear、pom等-->
<packaging>war</packaging>
<!--项目的名称, Maven产生的文档用-->
<name>log test</name>
<!--项目主页的URL, Maven产生的文档用-->
<url>http://www.baidu.com</url>
<!--项目的详细描述, Maven 产生的文档用。-->
<description>MADE IN FYM</description>
<!--描述了这个项目构建环境中的前提条件。-->
<prerequisites>
<!--构建该项目或使用该插件所需要的Maven的最低版本-->
<maven></maven>
</prerequisites>
<!--项目开发者列表-->
<developers>
<developer>
<id>fengyiming</id>
<name>Errom</name>
<email>fengyiming2012@sina.com</email>
<url>http://blog.csdn.net/abcde474524573</url>
</developer>
</developers>
<!--pom文件里通用参数-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.2.3.RELEASE</spring.version>
<project.version>1.0.0.SNAPSHOT</project.version>
</properties>
<!--通过maven依赖jar包-->
<dependencies>
<!-- 日志jar包 依赖slf4j-api logback-core start-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.5</version>
</dependency>
<!-- 日志jar包 依赖slf4j-api logback-core end -->
<!--spring依赖的jar包 start-->
<!--
Spring包依赖说明:
1) spring-core.jar需commons-collections.jar,spring-core.jar是以下其它各个的基本。
2) spring-beans.jar需spring-core.jar,cglib-nodep-2.1_3.jar
3) spring-aop.jar需spring-core.jar,spring-beans.jar,cglib-nodep-2.1_3.jar,aopalliance.jar
4) spring-context.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,commons-collections.jar,aopalliance.jar
5) spring-dao.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring-context.jar
6) spring-jdbc.jar需spring-core.jar,spring-beans.jar,spring-dao.jar
7) spring-web.jar需spring-core.jar,spring-beans.jar,spring-context.jar
8) spring-webmvc.jar需spring-core.jar/spring-beans.jar/spring-context.jar/spring-web.jar
9) spring -hibernate.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring- dao.jar,spring-jdbc.jar,spring-orm.jar,spring-web.jar,spring-webmvc.jar
10) spring-orm.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring- dao.jar,spring-jdbc.jar,spring-web.jar,spring-webmvc.jar
11) spring -remoting.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring- dao.jar,spring-context.jar,spring-web.jar,spring-webmvc.jar
12) spring-support.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring-dao.jar,spring-context.jar,spring-jdbc.jar
13) spring-mock.jar需spring-core.jar,spring-beans.jar,spring-dao.jar,spring-context.jar,spring-jdbc.jar -->
<!--Spring框架基本的核心工具类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!--包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!--可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如 Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring mvc使用的jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--自动载入WebApplicationContext特性的类、 Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- velocity模板类 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring依赖的jar包 end-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
<!-- jackson start-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.0</version>
</dependency>
<!-- jackson end-->
<!--jsp start-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--jsp end-->
<!--velocity start-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.6.3</version>
</dependency>
<!--velocity end-->
</dependencies>
</project>
跨域处理
package com.galaxy.mobile.front.action;
import com.galaxy.mobile.model.annotation.MethodAnnotation;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;
/**
* Created by fengyiming on 2016/8/30.
*/
@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
@MethodAnnotation(desc = "当请求参数里包含callback或者jsonp信息时做跨域处理")
public JsonpAdvice(){
super("callback","jsonp");
}
}