ssm开发总结

1、表单提交数据时候的数据类型转换:

•   例如后台接收的参数中有日期格式的参数时,在Controller中添加代码

•   除了使用CustomDateEditor类型转换器之外,还可以参考org.springframework.beans.propertyeditors包下面更多的转换器,也可以参考源码自定义类型转换器。

2、使用spring task配置注解式定时任务

1、在applicationContext.xml文件中添加命名空间  :

2、添加

          queue-capacity="500" />

     

     

3、在@Service 标注的类下面,将@Scheduled(cron = "0 */10 * * * *")注解写在需要定时执行的方法上面即可

注:更多cron表达式的说明可以参考以下文档http://blog.csdn.net/lnara/article/details/8636656

3、velocity页面上使用自定义标签

1、在applicationContext.xml中配置具有json解析功能的bean,例如

2、在webmvc-conf.xml文件中的VelocityLayoutViewResolver中,给attributesMap属性配置前面声明的bean:

     

           

               

               

         

     

3、在vm页面中可以用$json.方法名;例如:$json.writeValueAsString(Object o);

4、VelocityLayoutViewResolver本身也提供了常用的工具标签,例如:日期函数dateToolAttribute,数字函数numberToolAttribute,这样就可以直接给该属性的value赋值,让页面上直接使用。

4、springmvc对静态资源的访问

1、在webmvc-conf.xml文件中,添加

          mapping="/resources/**" />,表示对项目中的静态资源可以直接已项目名/resources来进行访问。

2、Controller层返回json数据方法:在配置文件中增加如下配置

     

           

     

       

,在Controller的方法的返回类型前加@ResponseBody即可。

5.1、使用RestTemplate进行测试

1、在配置文件中增加如下代码:

         

         

         

               

                     

                      class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter">

                           

                           

5.2、使用RestTemplate进行测试

                                     

                                         class="org.springframework.http.converter.StringHttpMessageConverter">

                                           

                                     

                                     

                                       class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />

                                     

                                       class="org.springframework.http.converter.ResourceHttpMessageConverter" />

5.3、使用RestTemplate进行测试

                                       class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />

                                     

                                       class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />

                                     

                                       class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />

                                 

                           

                     

5.4、使用RestTemplate进行测试

     

                        class="org.springframework.http.converter.StringHttpMessageConverter">

                           

                     

               

         

     

5.5、使用RestTemplate进行测试

ÒÔÉÏÅäÖÃÖÐÐèҪעÒâSpring MVCµÄHTTPÇëÇóÐÅϢת»»Æ÷HttpMessageConverter:

ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;

StringHttpMessageConverter:   负责读取字符串格式的数据和写出二进制格式的数据;

ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据;

MappingJacksonHttpMessageConverter:  负责读取和写入json格式的数据;

其中给StringHttpMessageConverter的supportedMediaTypes属性配置了mdeiaTypes,这样可以处理我们提交测试数据时

候中文乱码的问题。

          application/x-www-form-urlencoded;charset=UTF-8

          multipart/form-data;charset=UTF-8

          text/plain

          text/html;charset=UTF-8

          application/xml;charset=UTF-8

。注:在使用util标签时候记得引入util命名空间。

5.6、使用RestTemplate进行测试

在添加完以上配置之后,可以在我们的测试类里面直接用来测试我们写好的Controller:

1、在测试类上加上该注解:@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = "classpath:config/applicationContext.xml")

2、然后注入resttemplate:

     @Autowired

     private RestTemplate restTemplate;

3、restTemplate.postForObject(url, map, String.class);

可参考资料:http://blog.csdn.net/wwwihpccn/article/details/30496089

6、使用RestTemplate访问第三方服务

RestTemplate既然可以测试我们本地写的springmvc服务,所以也可以访问第三方服务。访问的方式和测试时候一样,先注入RestTemplate,然后用RestTemplate进行get、post请求方式访问第三方服务。

6.1、spring事物管理

1、有2种方式:声明式事务:(注解,XML),编程式事务:(代码中嵌入);

我们门户中使用的是编程式事物,需要在代码中嵌入,可以更精确的控制事物。

首先在配置文件中,将数据源交给spring的事物进行控制:

     

      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

         

     

然后再注入transactionManager,在事物开始时:

DefaultTransactionDefinition def = new DefaultTransactionDefinition();

def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

TransactionStatus status = transactionManager.getTransaction(def);

6.2、spring事物管理

try {

     xxx

     xxx

     //提交事物

     transactionManager.commit(status);

      }catch (Exception e) {

     //出现异常需要回滚

     if (!status.isCompleted())

          transactionManager.rollback(status);

}

6.3、spring事物管理

声明式(注解式)事物:

     在配置文件中,把datasource交给spring管理之后,再增加如下配置:

     

然后在service类上面加上@Transactional或者@Transactional(rollbackFor=Exception.class),则会在遇到异常时候回滚。

7.1、security安全框架

1、Spring Security中进行身份验证的是AuthenticationManager接口,验证身份就是加载响应的UserDetails,

看看是否和用户输入的账号、密码、权限等信息匹配。

在配置文件中添加如下配置:

     

         

         

               

                     

               

         

     

在我们系统中就是实现了UserDetails接口的ItrusPortalUserDetailsService;当管理员在进行登录时,会执

行loadUserByUsername方法,用户存在就将用户授权信息放入到Collection中并缓存,不存在则抛出异常。

7.2、security安全框架

1、给需要权限验证的url用如下方式配置到配置文件中:

pattern表示需要权限验证的匹配的url;

access="hasAnyRole('ROLE_SUPPER','ROLE_PROJECTS')表示访问/projects/下面的所有url的用户,都必须是ROLE_SUPPER、ROLE_PROJECTS的角色

2、配置不需权限验证的外部访问接口:

pattern表示不需要权限验证的匹配的url;

create-session="stateless"主要是在RESTful API中,针对无状态的web调用;

security="none"表示该url不走安全过滤器,任何用户都可以访问该接口。

7.3、security安全框架

1、使用security:

在web.xml中声明DelegatingFilterProxy. :

      springSecurityFilterChain

      /*

表示项目中所有路径的资源都要经过SpringSecurity.

注:最好将DelegatingFilterProxy写在DispatcherServlet之前.否则 SpringSecurity可能不会正常工作.

2、引用指定的SpringSecurity配置

7.4、security安全框架

3、SpringSecurity配置文件:

 

          authentication-failure-url="/login?login_error=t"

          authentication-success-handler-ref="itrusPortalUserLoginSucess"

          authentication-failure-handler-ref="itrusPortalUserFailureSucess" />

                success-handler-ref="itrusPortalUserLogoutSucess" />

7.5、security安全框架

每个Spring Security应用,只要使用了命名空间,就必须包含对应的元素。 它负责注册

AuthenticationManager,为应用各提供验证服务。 它也允许你定义一个别名,为内部实例,在你的配置

中来使用。 这些都写在命名空间介绍中。 所有元素,创建了AuthenticationProvider实例, 应该是这个元

素的子元素。例如portal中authentication-manager元素的配置:

7.6、security安全

     

     

         

               

         

     

authentication-provider元素DaoAuthenticationProvider的简化形式,aoAuthenticationProvider读取用户信息,从 itrusPortalUserDetailsService中,比较用户名/密码,来进行用户登录。 itrusPortalUserDetailsService实例是一个实现了UserDetailsService接口的类:com.itrus.portal.login.ItrusPortalUserDetailsService。更多资料可以下载Spring Security 3.x的api参考文档

你可能感兴趣的:(ssm开发总结)