第一步:配置

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  4.  
  5. <display-name>ajaxchart</display-name>
  6.  
  7. <welcome-file-list>
  8.  
  9. <welcome-file>index.html</welcome-file>
  10.  
  11. <welcome-file>index.htm</welcome-file>
  12.  
  13. <welcome-file>index.jsp</welcome-file>
  14.  
  15. <welcome-file>default.html</welcome-file>
  16.  
  17. <welcome-file>default.htm</welcome-file>
  18.  
  19. <welcome-file>default.jsp</welcome-file>
  20.  
  21. </welcome-file-list>
  22.  
  23. <!-- 配置配置文件路径 -->
  24.  
  25. <context-param>
  26.  
  27. <param-name>contextConfigLocation</param-name>
  28.  
  29. <param-value>
  30.  
  31. classpath*:applicationContext.xml,
  32.  
  33. classpath*:springcxf.xml
  34.  
  35. </param-value>
  36.  
  37. </context-param>
  38.  
  39. <!-- Spring监听器 -->
  40.  
  41. <listener>
  42.  
  43. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  44.  
  45. </listener>
  46.  
  47. <!-- SpringMvc配置 -->
  48.  
  49. <servlet>
  50.  
  51. <servlet-name>springmvc</servlet-name>
  52.  
  53. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  54.  
  55. <init-param>
  56.  
  57. <param-name>contextConfigLocation</param-name>
  58.  
  59. <param-value>classpath:springmvc.xml</param-value>
  60.  
  61. </init-param>
  62.  
  63. <load-on-startup>1</load-on-startup> <!-- 如果不指定该参数,tomcat系统时不会初始化所有的action,等到第一次访问的时候才初始化 -->
  64.  
  65. </servlet>
  66.  
  67. <servlet-mapping>
  68.  
  69. <servlet-name>springmvc</servlet-name>
  70.  
  71. <url-pattern>*.htm</url-pattern>
  72.  
  73. </servlet-mapping>
  74.  
  75. <!-- 配置全局的错误页面 -->
  76.  
  77. <error-page>
  78.  
  79. <error-code>404</error-code>
  80.  
  81. <location>/404.jsp</location>
  82.  
  83. </error-page>
  84.  
  85. <error-page>
  86.  
  87. <error-code>500</error-code>
  88.  
  89. <location>/404.jsp</location>
  90.  
  91. </error-page>
  92.  
  93. </web-app>

applicationContex.xml配置

  1. <?xml version="1.0"encoding="UTF-8"?>
  2.  
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4.  
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
  6.  
  7. xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"
  8.  
  9. xmlns:context="http://www.springframework.org/schema/context"
  10.  
  11. xsi:schemaLocation="http://www.springframework.org/schema/beans
  12.  
  13. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  14.  
  15. http://www.springframework.org/schema/tx
  16.  
  17. http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
  18.  
  19. http://www.springframework.org/schema/aop
  20.  
  21. http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
  22.  
  23. http://www.springframework.org/schema/context
  24.  
  25. http://www.springframework.org/schema/context/spring-context-3.1.xsd">
  26.  
  27. <context:component-scan base-package="com.zf" />
  28.  
  29. <context:annotation-config />
  30.  
  31. <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 注解方式支持事务 (如果要让注解方式也支持事务,就要配置该项)-->
  32.  
  33. <aop:aspectj-autoproxy proxy-target-class="true"/>
  34.  
  35. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close">
  36.  
  37. <!-- 指定连接数据库的驱动 -->
  38.  
  39. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  40.  
  41. <!-- 指定连接数据库的URL -->
  42.  
  43. <property name="jdbcUrl" value="jdbc:mysql://192.168.1.140:3306/ajax"/>
  44.  
  45. <!-- 指定连接数据库的用户名 -->
  46.  
  47. <property name="user" value="root"/>
  48.  
  49. <!-- 指定连接数据库的密码 -->
  50.  
  51. <property name="password" value="root"/>
  52.  
  53. <!-- 指定连接数据库连接池的最大连接数 -->
  54.  
  55. <property name="maxPoolSize" value="20"/>
  56.  
  57. <!-- 指定连接数据库连接池的最小连接数 -->
  58.  
  59. <property name="minPoolSize" value="1"/>
  60.  
  61. <!-- 指定连接数据库连接池的初始化连接数 -->
  62.  
  63. <property name="initialPoolSize" value="1"/>
  64.  
  65. <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
  66.  
  67. <property name="maxIdleTime" value="20"/>
  68.  
  69. </bean>
  70.  
  71. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  72.  
  73. <property name="dataSource"ref="dataSource"></property>
  74.  
  75. <property name="hibernateProperties">
  76.  
  77. <props>
  78.  
  79. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
  80.  
  81. <prop key="hibernate.show_sql">true</prop>
  82.  
  83. <prop key="hibernate.query.substitutions">true 1,false 0</prop>
  84.  
  85. <prop key="hibernate.hbm2ddl.auto">update</prop>
  86.  
  87. <prop key="hibernate.cache.use_second_level_cache">true</prop>
  88.  
  89. <prop key="hibernate.cache.provider_class">org.hibernate.cache.OSCacheProvider</prop>
  90.  
  91. <prop key="hibernate.cache.use_query_cache">true</prop>
  92.  
  93. </props>
  94.  
  95. </property>
  96.  
  97. <property name="packagesToScan">
  98.  
  99. <list>
  100.  
  101. <value>com.zf.pojo</value>
  102.  
  103. </list>
  104.  
  105. </property>
  106.  
  107. </bean>
  108.  
  109. <!-- 事务管理器 -->
  110.  
  111. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  112.  
  113. <property name="sessionFactory"ref="sessionFactory"></property>
  114.  
  115. </bean>
  116.  
  117. <!-- XML方式配置事务 -->
  118.  
  119. <tx:advice transaction-manager="transactionManager"id="transactionAdvice">
  120.  
  121. <tx:attributes>
  122.  
  123. <tx:method name="*"propagation="REQUIRED" />
  124.  
  125. </tx:attributes>
  126.  
  127. </tx:advice>
  128.  
  129. <!-- AOP配置事务 -->
  130.  
  131. <aop:config>
  132.  
  133. <aop:pointcut expression="execution(*com.zf.service.*.*(..))" id="servicePoint"/>
  134.  
  135. <aop:advisor advice-ref="transactionAdvice"pointcut-ref="servicePoint"/>
  136.  
  137. </aop:config>
  138.  
  139. </beans>

springmvc.xml

  1. <?xml version="1.0"encoding="UTF-8"?>
  2.  
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4.  
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
  6.  
  7. xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"
  8.  
  9. xmlns:context="http://www.springframework.org/schema/context"
  10.  
  11. xsi:schemaLocation="http://www.springframework.org/schema/beans
  12.  
  13. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  14.  
  15. http://www.springframework.org/schema/tx
  16.  
  17. http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
  18.  
  19. http://www.springframework.org/schema/aop
  20.  
  21. http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
  22.  
  23. http://www.springframework.org/schema/context
  24.  
  25. http://www.springframework.org/schema/context/spring-context-3.1.xsd">
  26.  
  27. <context:annotation-config />
  28.  
  29. <context:component-scan base-package="com.zf.control" />
  30.  
  31. <aop:aspectj-autoproxy proxy-target-class="true"/>
  32.  
  33. <!-- Freemarker配置 -->
  34.  
  35. <bean
  36.  
  37. class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  38.  
  39. <property name="templateLoaderPath"value="/" />
  40.  
  41. <property name="freemarkerSettings">
  42.  
  43. <props>
  44.  
  45. <prop key="template_update_delay">0</prop> <!-- 测试时设为0,一般设为3600 -->
  46.  
  47. <prop key="defaultEncoding">utf-8</prop>
  48.  
  49. </props>
  50.  
  51. </property>
  52.  
  53. </bean>
  54.  
  55. <!-- Freemarker视图解析器 -->
  56.  
  57. <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
  58.  
  59. <property name="viewClass"
  60.  
  61. value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
  62.  
  63. <property name="suffix"value=".ftl" />
  64.  
  65. <property name="contentType"value="text/html; charset=UTF-8" />
  66.  
  67. <property name="allowSessionOverride"value="true" />
  68.  
  69. </bean>
  70.  
  71. <!-- View Resolver (如果用Freemarker就可以将该视图解析器去掉) -->
  72.  
  73. <!-- <bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"> -->
  74.  
  75. <!-- <property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /> -->
  76.  
  77. <!-- <property name="prefix"value="/" /> 指定Control返回的View所在的路径 -->
  78.  
  79. <!-- <property name="suffix"value=".jsp" /> 指定Control返回的ViewName默认文件类型 -->
  80.  
  81. <!-- </bean> -->
  82.  
  83. <!-- 将OpenSessionInView打开 -->
  84.  
  85. <bean id="openSessionInView" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
  86.  
  87. <property name="sessionFactory" ref="sessionFactory"></property>
  88.  
  89. </bean>
  90.  
  91. <!-- 处理在类级别上的@RequestMapping注解-->
  92.  
  93. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
  94.  
  95. <property name="interceptors"> <!-- 配置过滤器 -->
  96.  
  97. <list>
  98.  
  99. <ref bean="openSessionInView" />
  100.  
  101. </list>
  102.  
  103. </property>
  104.  
  105. </bean>
  106.  
  107. <!--JSON配置-->
  108.  
  109. <bean
  110.  
  111. class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  112.  
  113. <property name="messageConverters">
  114.  
  115. <list>
  116.  
  117. <!-- 该类只有org.springframework.web-3.1.2.RELEASE.jar及以上版本才有 使用该配置后,才可以使用JSON相关的一些注解-->
  118.  
  119. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  120.  
  121. <property name="objectMapper">
  122.  
  123. <bean class="com.fasterxml.jackson.databind.ObjectMapper"/>
  124.  
  125. </property>
  126.  
  127. </bean>
  128.  
  129. </list>
  130.  
  131. </property>
  132.  
  133. </bean>
  134.  
  135. </beans>

oscache.properties

  1. cache.memory=true
  2.  
  3. cache.key=__oscache_cache
  4.  
  5. cache.capacity=10000
  6.  
  7. cache.unlimited.disk=true

如果有些类在转换为JSON时,需要对其属性做一些格式那要用JSONjackson-annotations-.jar提供的一些注解如下:

  1. @JsonSerialize(using = DateJsonSerelized.class) //表示该字段转换为json时,用DateJsonSerelized类进行转换格式
  2.  
  3. @Temporal(TemporalType.DATE)
  4.  
  5. @Column(name = "date")
  6.  
  7. private Date date ;
  8.  
  9. @JsonIgnore //表示转换成JSON对象时忽略该字段
  10.  
  11. @OneToMany(mappedBy = "media" , fetch = FetchType.LAZY )
  12.  
  13. private List<Plane> planes ;

DateJsonSerelized类的定义如下:

  1. package com.zf.common;
  2.  
  3. import java.io.IOException;
  4.  
  5. import java.text.SimpleDateFormat;
  6.  
  7. import java.util.Date;
  8.  
  9. import com.fasterxml.jackson.core.JsonGenerator;
  10.  
  11. import com.fasterxml.jackson.core.JsonProcessingException;
  12.  
  13. import com.fasterxml.jackson.databind.JsonSerializer;
  14.  
  15. import com.fasterxml.jackson.databind.SerializerProvider;
  16.  
  17. public class DateJsonSerelized extends JsonSerializer<Date>{
  18.  
  19. private SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
  20.  
  21. @Override
  22.  
  23. public void serialize(Date value, JsonGenerator jgen,SerializerProvider sp)
  24.  
  25. throws IOException, JsonProcessingException {
  26.  
  27. jgen.writeString(sdf.format(value));
  28.  
  29. }
  30.  
  31. }

Spring 监听器

  1. package com.zf.common;
  2.  
  3. import javax.annotation.Resource;
  4.  
  5. import org.springframework.context.ApplicationEvent;
  6.  
  7. import org.springframework.context.ApplicationListener;
  8.  
  9. import org.springframework.stereotype.Component;
  10.  
  11. import com.zf.service.MediaService;
  12.  
  13. /**
  14.  
  15. * SpringMVC 监听器 在启动容器的时候会随着启动
  16.  
  17. * @author zhoufeng
  18.  
  19. *
  20.  
  21. */
  22.  
  23. @Component
  24.  
  25. public class StartUpHandler implementsApplicationListener<ApplicationEvent>{
  26.  
  27. @Resource(name = "MediaService")
  28.  
  29. private MediaService mediaService ;
  30.  
  31. @Override
  32.  
  33. public void onApplicationEvent(ApplicationEvent event) {
  34.  
  35. //将数据全部查询出来,放入缓存
  36.  
  37. mediaService.queryAll();
  38.  
  39. }
  40.  
  41. }

Spring类型转换器

  1. package com.zf.common;
  2.  
  3. import java.beans.PropertyEditorSupport;
  4.  
  5. import java.text.ParseException;
  6.  
  7. import java.text.SimpleDateFormat;
  8.  
  9. import org.springframework.stereotype.Component;
  10.  
  11. /**
  12.  
  13. * 自定义Date类型的类型转换器
  14.  
  15. * @author zhoufeng
  16.  
  17. *
  18.  
  19. */
  20.  
  21. @Component("DateEdite")
  22.  
  23. public class DateEdite extends PropertyEditorSupport{
  24.  
  25. private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  26.  
  27. @Override
  28.  
  29. public String getAsText() {
  30.  
  31. return getValue() == null ? "" : sdf.format(getValue());
  32.  
  33. }
  34.  
  35. @Override
  36.  
  37. public void setAsText(String text) throws IllegalArgumentException {
  38.  
  39. if(text == null || !text.matches("^\\d{4}-\\d{2}-\\d{2}$"))
  40.  
  41. setValue(null);
  42.  
  43. else
  44.  
  45. try {
  46.  
  47. setValue(sdf.parse(text));
  48.  
  49. } catch (ParseException e) {
  50.  
  51. setValue(null);
  52.  
  53. }
  54.  
  55. }
  56.  
  57. }

然后在需要转换的Controller里面注册该类型转换器就可以了

  1. /**
  2.  
  3. * 类型转换器
  4.  
  5. * @param binder
  6.  
  7. */
  8.  
  9. @InitBinder
  10.  
  11. public void initBinder(WebDataBinder binder){
  12.  
  13. binder.registerCustomEditor(Date.class, dateEdite);
  14.  
  15. }

Freemarker访问静态方法和属性

  1. /**
  2.  
  3. * Access static Method FTL访问静态方法和属性(可以将该方法提取出来,让所有的Controller继承,避免每个类中都要写一个该方法)
  4.  
  5. * @param packname
  6.  
  7. * @return
  8.  
  9. * @throwsTemplateModelException
  10.  
  11. */
  12.  
  13. private final static BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
  14.  
  15. private final static TemplateHashModel staticModels = wrapper.getStaticModels();
  16.  
  17. protected TemplateHashModel useStaticPacker(Class<?> clazz){
  18.  
  19. try {
  20.  
  21. return (TemplateHashModel) staticModels.get(clazz.getName());
  22.  
  23. } catch (TemplateModelException e) {
  24.  
  25. throw new RuntimeException(e);
  26.  
  27. }
  28.  
  29. };

然后在Action方法中加入下面的代码:

  1. mav.getModelMap().put("MediaService", useStaticPacker(MediaService.class)); //允许Freemarker访问MediaService类的静态方法

 转:spring 总结

spring 小结的更多相关文章

  1. Spring小结

    一.环境搭建 创建Maven项目 一般pom.xml会出错,本地若无相应版本的jar包,则无法下载或下载速度非常慢,我的解决方案是,查找本地仓库的jar,修改为本地仓库有的jar即可 pom.xml的 ...

  2. Spring mvc中@RequestMapping 6个基本用法小结(转载)

    小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMapping(value="/departments" ...

  3. Spring boot中使用springfox来生成Swagger Specification小结

    Rest接口对应Swagger Specification路径获取办法: 根据location的值获取api   json描述文件 也许有同学会问,为什么搞的这么麻烦,api json描述文件不就是h ...

  4. spring security 3中的10个典型用法小结

    spring security 3比较庞大,但功能很强,下面小结下spring security 3中值得 注意的10个典型用法 1)多个authentication-provide可以同时使用 &l ...

  5. spring mvc中的拦截器小结 .

    在spring mvc中,拦截器其实比较简单了,下面简单小结并demo下. preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们上一章的Control ...

  6. Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结

    Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...

  7. Spring mvc中@RequestMapping 6个基本用法小结

    Spring mvc中@RequestMapping 6个基本用法小结 小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMa ...

  8. Spring归纳小结(山东数漫江湖)

    前言 如果说有什么框架是Java程序员必然会学习.使用到的,那么Spring肯定是其中之一.本篇博客,将根据博主在日常工作中对Spring的使用做一个系统的归纳小结. Spring的一些概念和思想 S ...

  9. 转:Spring mvc中@RequestMapping 6个基本用法小结

    Spring mvc中@RequestMapping 6个基本用法小结 发表于3年前(2013-02-17 19:58)   阅读(11698) | 评论(1) 13人收藏此文章, 我要收藏 赞3 4 ...

随机推荐

  1. mysql IN 比等价的OR写法效率更高

  2. 第十章:鸟哥的Linux私房菜

    第十章.vim程式编辑器 1. vi与vim 1.1 为何要学vim2. vi的使用 2.1 简易执行范例 2.2 按键说明 2.3 一个案例的练习 2.4 vim的暂存档.救援回复与开启时的警告讯息 ...

  3. double-clicking

    <!doctype html> <button id="id0" onclick="w('id0','str0')">target0&l ...

  4. (转)面试题--JAVA中静态块、静态变量加载顺序详解

    public class Test { //1.第一步,准备加载类 public static void main(String[] args) { new Test(); //4.第四步,new一个 ...

  5. http响应状态码301和302

    HTTP返回码中301与302的区别 (2012-10-15 22:06:09) 一.官方说法 301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redir ...

  6. nginx生产配置

    user www www; worker_processes 8; error_log /data/logs/nginx_error.log crit; pid /usr/local/webserve ...

  7. Python中整数和浮点数

    Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致. 基本的运算: 1 + 2 + 3 # ==> 6 4 * 5 - 6 # ==> 14 7.5 ...

  8. [Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement]错误解决

    1.配置文件中将这行注销“secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7/Uploads" ”:很多人添加权限依然不 ...

  9. c语言main函数返回值、参数详解(返回值是必须的,0表示正常退出)

    C语言Main函数返回值 main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出. 很多人甚至市面上的一些书籍,都 ...

  10. 采用asyncore进行实时同步

    最近在维护项目的时候,发现某个实时数据同步功能非常容易失败,故静下心来彻底弄清楚该设计的实现原理,以及其中用到的python异步sockethandler : asyncore. 实时数据同步功能的设 ...