ä¸å ±å个é ç½®æ件å æ¬web.xml
spring-hibernate.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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd
">
<!-- JNDIæ¹å¼é
ç½®æ°æ®æº -->
<!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${jndiName}"></property> </bean> -->
<!-- <bean id="sacheService" class="com.base.service.impl.ProductInfoServiceImpl"></bean> -->
<!-- é
ç½®æ°æ®æº -->
<bean id="dataSource" name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
<!-- åå§åè¿æ¥å¤§å° -->
<property name="initialSize" value="0" />
<!-- è¿æ¥æ± æ大使ç¨è¿æ¥æ°é -->
<property name="maxActive" value="20" />
<!-- è¿æ¥æ± æå¤§ç©ºé² -->
<property name="maxIdle" value="20" />
<!-- è¿æ¥æ± æå°ç©ºé² -->
<property name="minIdle" value="0" />
<!-- è·åè¿æ¥æ大çå¾
æ¶é´ -->
<property name="maxWait" value="60000" />
<!-- <property name="poolPreparedStatements" value="true" /> <property
name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->
<property name="validationQuery" value="${validationQuery}" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
<!-- é
ç½®é´éå¤ä¹
æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å
³éç空é²è¿æ¥ï¼åä½æ¯æ¯«ç§ -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- é
ç½®ä¸ä¸ªè¿æ¥å¨æ± ä¸æå°çåçæ¶é´ï¼åä½æ¯æ¯«ç§ -->
<property name="minEvictableIdleTimeMillis" value="25200000" />
<!-- æå¼removeAbandonedåè½ -->
<property name="removeAbandoned" value="true" />
<!-- 1800ç§ï¼ä¹å°±æ¯30åé -->
<property name="removeAbandonedTimeout" value="1800" />
<!-- å
³éabandedè¿æ¥æ¶è¾åºé误æ¥å¿ -->
<property name="logAbandoned" value="true" />
<!-- çæ§æ°æ®åº -->
<!-- <property name="filters" value="stat" /> -->
<property name="filters" value="mergeStat" />
</bean>
<!-- é
ç½®hibernate sessionå·¥å -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.dialect">com.dialect.MysqlDialect</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
</props>
</property>
<!-- èªå¨æ«æ注解æ¹å¼é
ç½®çhibernateç±»æ件 -->
<property name="packagesToScan">
<list>
<value>com.model</value>
</list>
</property>
</bean>
<!-- é
ç½®äºå¡ç®¡çå¨ -->
<bean name="transactionManager" id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<!-- 注解æ¹å¼é
ç½®äºç© -->
<!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->
<context:annotation-config/>
<!-- æ¦æªå¨æ¹å¼é
ç½®äºç© -->
<!-- <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" rollback-for="java.lang.Exception"/>
<tx:method name="save*" rollback-for="java.lang.Exception"/>
<tx:method name="update*" rollback-for="java.lang.Exception"/>
<tx:method name="modify*" rollback-for="java.lang.Exception"/>
<tx:method name="edit*" rollback-for="java.lang.Exception"/>
<tx:method name="delete*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>
<tx:method name="remove*" rollback-for="java.lang.Exception"/>
<tx:method name="repair" rollback-for="java.lang.Exception"/>
<tx:method name="deleteAndRepair" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>
<tx:method name="check*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="count*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="get*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>
<tx:method name="find*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>
<tx:method name="load*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>
<tx:method name="search*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>
<tx:method name="datagrid*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>
<tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice> -->
<bean id="aspectBean" class="com.aop.AopLog"></bean>
<aop:config>
<aop:aspect id="AopLog" ref="aspectBean">
<!--é
ç½®com.spring.serviceå
ä¸ææç±»ææ¥å£çæææ¹æ³-->
<aop:pointcut id="businessService"
expression="execution(* com.controller..*.*(..)) || execution(* com.base.service.impl.*.*(..))" />
<aop:before pointcut-ref="businessService" method="doBefore"/>
<aop:after pointcut-ref="businessService" method="doAfter"/>
<aop:around pointcut-ref="businessService" method="doAround"/>
<aop:after-throwing pointcut-ref="businessService" method="doThrowing" throwing="ex"/>
</aop:aspect>
</aop:config>
<!-- hiebernateä¸çhibernateTemplate模æ¿æ¹æ³ -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<!-- ç»HibernateTemplateç±»ä¸æ³¨å
¥ sessionFactoryè·å¾å®ä¾ -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 使ç¨annotation èªå¨æ³¨åbean,并æ£æ¥@Required,@Autowiredçå±æ§å·²è¢«æ³¨å
¥ -->
<!-- <context:component-scan base-package="com.base.dao,com.base.service,com.aop" /> -->
</beans>
spring.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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- å¼å
¥å±æ§æ件 -->
<context:property-placeholder location="classpath:config.properties" />
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- èªå¨æ«ædaoåserviceå
(èªå¨æ³¨å
¥) -->
<context:component-scan base-package="com.base.dao,com.base.service,com.aop" />
<!-- <bean class="zy.utils.DeleteTimer"></bean> -->
</beans>
spring3mvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
">
<context:annotation-config />
<context:component-scan base-package="com.controller"></context:component-scan>
<!-- enable the configuration of transactional behavior based on annotations -->
<!-- a PlatformTransactionManager is still required -->
<!-- 设置multipartResolveræè½å®ææ件ä¸ä¼ -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000000"></property>
<property name="defaultEncoding" value="UTF-8" />
</bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/jsp/" p:suffix=".jsp" />
<bean id="aspectBean" class="com.aop.AopLog"></bean>
<aop:aspectj-autoproxy proxy-target-class="true" />
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="com.jsonconvert.EageJacksonConverter" />
</list>
</property>
</bean>
<!-- SpringMVCå¨è¶
åºä¸ä¼ æ件éå¶æ¶ï¼ä¼æåºorg.springframework.web.multipart.MaxUploadSizeExceededException -->
<!-- 该å¼å¸¸æ¯SpringMVCå¨æ£æ¥ä¸ä¼ çæ件信æ¯æ¶æåºæ¥çï¼èä¸æ¤æ¶è¿æ²¡æè¿å
¥å°Controlleræ¹æ³ä¸ -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- éå°MaxUploadSizeExceededExceptionå¼å¸¸æ¶ï¼èªå¨è·³è½¬å°/WEB-INF/jsp/error_fileupload.jspé¡µé¢ -->
<prop
key="org.springframework.web.multipart.MaxUploadSizeExceededException">404</prop>
</props>
</property>
</bean>
<!-- <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*admin*"/>
<bean id="loginInterceptor" class="com.Sys.UserInterceptor"/> </mvc:interceptor>
<mvc:interceptor> <mvc:mapping path="/app/**"/> <bean id="appInterceptor"
class="com.Sys.AppInterceptor"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping
path="/supapp/*"/> <bean id="supappInterceptor" class="com.Sys.SupAppInterceptor"/>
</mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/forum*/**"/> <bean
id="forumInterceptor" class="com.Sys.ForumInterceptor"/> </mvc:interceptor>
<mvc:interceptor> <mvc:mapping path="/b2c/**"/> <bean id="b2cInterceptor"
class="com.Sys.B2CInterceptor"/> </mvc:interceptor> </mvc:interceptors> -->
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 <display-name>LANTIN</display-name>
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
<span style="white-space:pre"> </span>classpath:spring/spring.xml,classpath:hibernate/spring-hibernate.xml
<span style="white-space:pre"> </span></param-value>
 </context-param>
 <servlet>
  <servlet-name>spring3mvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>spring3mvc</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>
 <error-page>
  <error-code>404</error-code>
  <location>/error.html</location>
 </error-page>
 <error-page>
  <error-code>500</error-code>
  <location>/error.html</location>
 </error-page>
 <error-page>
  <error-code>401</error-code>
  <location>/error.html</location>
 </error-page>
 <error-page>
  <error-code>403</error-code>
  <location>/error.html</location>
 </error-page>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
<!-- Â <listener>
<span style="white-space:pre"> </span> Â Â <listener-class>com.listener.SessionListener</listener-class>
<span style="white-space:pre"> </span></listener>
 -->  <filter>
  <filter-name>CharacterEncodingFilter</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>
 </filter>
 <filter-mapping>
  <filter-name>CharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 Â
 <filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
  <param-name>sessionFactoryBeanName</param-name>
  <param-value>sessionFactory</param-value>
  </init-param>
  <init-param>
      <param-name>singleSession</param-name>
      <param-value>true</param-value>      Â
    </init-param>
    <init-param>
    <param-name> flushMode </param-name>
  <param-value>AUTO </param-value>    Â
    </init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
 <welcome-file-list>
  <welcome-file>login/login.html</welcome-file>
 </welcome-file-list>
 <session-config>
 <span style="white-space:pre"> </span><session-timeout>0</session-timeout>
 </session-config>
</web-app>
AopLog.java
package com.aop;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class AopLog {
private static final Logger logger=Logger.getLogger(AopLog.class);
//@After("execution(* com.controller.*.*(..))")
public void doAfter(JoinPoint jp) {
// System.out.println("log Ending method: "
// + jp.getTarget().getClass().getName() + "."
// + jp.getSignature().getName());
logger.info("log Ending method: "
+ jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName());
/* LoggerUtil.info(jp.getClass(),jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName()+"[logo]:normal");*/
}
//@Around("execution(* com.controller.*.*(..))")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
long time = System.currentTimeMillis();
Object retVal = pjp.proceed();
time = System.currentTimeMillis() - time;
// System.out.println("process time: " + time + " ms");
logger.info("process time: " + time + " ms");
return retVal;
}
//@Before("execution(* com.controller.*.*(..))")
public void doBefore(JoinPoint jp) throws Exception {
logger.info("log Begining method: "
+ jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName());
// System.out.println("log Begining method: "
// + jp.getTarget().getClass().getName() + "."
// + jp.getSignature().getName());
}
//@AfterThrowing("execution(* com.controller.*.*(..))")
public void doThrowing(JoinPoint jp, Throwable ex) {
// System.out.println("method " + jp.getTarget().getClass().getName()
// + "." + jp.getSignature().getName() + " throw exception");
logger.info("method " + jp.getTarget().getClass().getName()
+ "." + jp.getSignature().getName() + " throw exception");
// System.out.println(ex.getMessage());
logger.info(ex.getMessage());
/*LoggerUtil.info(jp.getClass(),jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName()+"[logo]:exception"+ex.toString());*/
}
/* private void sendEx(JoinPoint jp,String ex) {
LoggerUtil.info(jp.getClass(),jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName()+"[logo]:exception"+ex);
} */
}
EageJacksonConverter.java
package com.jsonconvert;
import java.io.IOException;
import java.nio.charset.Charset;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.type.TypeFactory;
import org.codehaus.jackson.type.JavaType;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.util.Assert;
public class EageJacksonConverter extends AbstractHttpMessageConverter<Object> {
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private ObjectMapper objectMapper = new ObjectMapper();
private boolean prefixJson = false;
public EageJacksonConverter() {
super(new MediaType("application", "json", DEFAULT_CHARSET));
}
public void setObjectMapper(ObjectMapper objectMapper) {
Assert.notNull(objectMapper, "'objectMapper' must not be null");
this.objectMapper = objectMapper;
}
public void setPrefixJson(boolean prefixJson) {
this.prefixJson = prefixJson;
}
public boolean canRead(Class<?> clazz, MediaType mediaType) {
JavaType javaType = getJavaType(clazz);
return (this.objectMapper.canDeserialize(javaType))
&& (canRead(mediaType));
}
protected JavaType getJavaType(Class<?> clazz) {
return TypeFactory.type(clazz);
}
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
return (this.objectMapper.canSerialize(clazz)) && (canWrite(mediaType));
}
protected boolean supports(Class<?> clazz) {
throw new UnsupportedOperationException();
}
protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {
JavaType javaType = getJavaType(clazz);
try {
return this.objectMapper
.readValue(inputMessage.getBody(), javaType);
} catch (JsonParseException ex) {
throw new HttpMessageNotReadableException("Could not read JSON: "
+ ex.getMessage(), ex);
}
}
protected void writeInternal(Object o, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {
JsonEncoding encoding = getEncoding(outputMessage.getHeaders()
.getContentType());
SerializerProvider serializerProvider = this.objectMapper
.getSerializerProvider();
serializerProvider.setNullValueSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object arg0, JsonGenerator arg1,
SerializerProvider arg2) throws IOException,
JsonProcessingException {
arg1.writeObject("");
}
});
JsonGenerator jsonGenerator = this.objectMapper.getJsonFactory()
.createJsonGenerator(outputMessage.getBody(), encoding);
try {
if (this.prefixJson) {
jsonGenerator.writeRaw("{} && ");
}
this.objectMapper.writeValue(jsonGenerator, o);
} catch (JsonGenerationException ex) {
throw new HttpMessageNotWritableException("Could not write JSON: "
+ ex.getMessage(), ex);
}
}
private JsonEncoding getEncoding(MediaType contentType) {
if ((contentType != null) && (contentType.getCharSet() != null)) {
Charset charset = contentType.getCharSet();
for (JsonEncoding encoding : JsonEncoding.values()) {
if (charset.name().equals(encoding.getJavaName())) {
return encoding;
}
}
}
return JsonEncoding.UTF8;
}
}