springmvc整合redis架构搭建实例

  1 原文  http://www.cnblogs.com/dennisit/p/3614521.html
  2 
  3 新换环境,又有新东西可以学习了,哈皮! 抽空学习之余看了一下redis,个人对Springmvc的爱是忠贞不渝,所以整理了一下Springmvc整合redis的环境搭建.分享学习.
  4 
  5 第一步 : 创建 maven 项目 :
  6 
  7 实例pom.xml内容如下
  8 
  9 <?xml version="1.0" encoding="UTF-8"?>
 10 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 11   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 12 
 13   <modelVersion>4.0.0</modelVersion>
 14   <packaging>war</packaging>
 15 
 16   <name>orm-bae</name>
 17   <groupId>com.orm</groupId>
 18   <artifactId>orm-bae</artifactId>
 19   <version>0.0.1-SNAPSHOT</version>
 20   
 21   <properties>  
 22     <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
 23     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
 24   </properties>  
 25   
 26   <dependencies>
 27     
 28     <!-- config junit jar -->
 29     <dependency>  
 30       <groupId>junit</groupId>  
 31       <artifactId>junit</artifactId>  
 32       <version>4.8.2</version>  
 33       <scope>test</scope>  
 34     </dependency>  
 35   
 36     <!-- config redis data and client jar--> 
 37     <dependency>  
 38       <groupId>org.springframework.data</groupId>  
 39       <artifactId>spring-data-redis</artifactId>  
 40       <version>1.0.2.RELEASE</version>  
 41     </dependency>      
 42     <dependency>  
 43       <groupId>redis.clients</groupId>  
 44       <artifactId>jedis</artifactId>  
 45       <version>2.1.0</version>  
 46     </dependency>
 47     
 48     <!-- config need jar -->
 49     <dependency>
 50       <groupId>commons-lang</groupId>
 51       <artifactId>commons-lang</artifactId>
 52       <version>2.6</version>
 53     </dependency>
 54     
 55     <dependency>
 56       <groupId>org.apache.geronimo.specs</groupId>
 57       <artifactId>geronimo-servlet_3.0_spec</artifactId>
 58       <version>1.0</version>
 59     </dependency>
 60 
 61     <!-- cofig spring jar -->
 62     <dependency>  
 63       <groupId>org.springframework</groupId>  
 64       <artifactId>spring-core</artifactId>  
 65       <version>${org.springframework.version}</version>  
 66     </dependency>  
 67   
 68     <dependency>  
 69       <groupId>org.springframework</groupId>  
 70       <artifactId>spring-expression</artifactId>  
 71       <version>${org.springframework.version}</version>  
 72     </dependency>  
 73   
 74     <dependency>  
 75       <groupId>org.springframework</groupId>  
 76       <artifactId>spring-beans</artifactId>  
 77       <version>${org.springframework.version}</version>  
 78     </dependency>  
 79   
 80     <dependency>  
 81       <groupId>org.springframework</groupId>  
 82       <artifactId>spring-aop</artifactId>  
 83       <version>${org.springframework.version}</version>  
 84     </dependency>  
 85   
 86     <dependency>  
 87       <groupId>org.springframework</groupId>  
 88       <artifactId>spring-context</artifactId>  
 89       <version>${org.springframework.version}</version>  
 90     </dependency>  
 91   
 92     <dependency>  
 93       <groupId>org.springframework</groupId>  
 94       <artifactId>spring-context-support</artifactId>  
 95 <version>${org.springframework.version}</version>  
 96 </dependency>  
 97   
 98 <dependency>  
 99 <groupId>org.springframework</groupId>  
100 <artifactId>spring-tx</artifactId>  
101 <version>${org.springframework.version}</version>  
102 </dependency>  
103   
104 <dependency>  
105 <groupId>org.springframework</groupId>  
106 <artifactId>spring-jdbc</artifactId>  
107 <version>${org.springframework.version}</version>  
108 </dependency>  
109 
110 <dependency>  
111 <groupId>org.springframework</groupId>  
112 <artifactId>spring-orm</artifactId>  
113 <version>${org.springframework.version}</version>  
114 </dependency>  
115   
116 <dependency>  
117 <groupId>org.springframework</groupId>  
118 <artifactId>spring-oxm</artifactId>  
119 <version>${org.springframework.version}</version>  
120 </dependency>  
121   
122 <dependency>  
123 <groupId>org.springframework</groupId>  
124 <artifactId>spring-web</artifactId>  
125 <version>${org.springframework.version}</version>  
126 </dependency>  
127 
128 <dependency>  
129 <groupId>org.springframework</groupId>  
130 <artifactId>spring-webmvc</artifactId>  
131 <version>${org.springframework.version}</version>  
132 </dependency>  
133   
134 <dependency>  
135 <groupId>org.springframework</groupId>  
136 <artifactId>spring-webmvc-portlet</artifactId>  
137 <version>${org.springframework.version}</version>  
138 </dependency>  
139   
140 <dependency>  
141 <groupId>org.springframework</groupId>  
142 <artifactId>spring-test</artifactId>  
143 <version>${org.springframework.version}</version>  
144 <scope>test</scope>  
145 </dependency>  
146   
147 </dependencies>
148 
149 <build>
150 <resources>
151 <resource>
152 <directory>/src/main/resources</directory>
153 <filtering>true</filtering>
154 </resource>
155 </resources>
156 </build>
157 </project>
158 第二步 : 配置文件整合
159 
160 Web.xml文件配置
161 
162 <?xml version="1.0" encoding="UTF-8"?>
163 <web-app version="2.4"
164      xmlns="http://java.sun.com/xml/ns/j2ee"
165      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
166      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
167 
168   <listener>
169     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
170   </listener>
171   
172   <context-param>
173     <param-name>contextConfigLocation</param-name>
174     <param-value>/WEB-INF/context/spring-context.xml</param-value>
175   </context-param>
176   
177   <!-- Spring字符集过滤器 -->
178   <filter>
179     <filter-name>SpringEncodingFilter</filter-name>
180     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
181     <init-param>
182       <param-name>encoding</param-name>
183       <param-value>UTF-8</param-value>
184     </init-param>
185     <init-param>
186       <param-name>forceEncoding</param-name>
187       <param-value>true</param-value>
188     </init-param>
189   </filter>
190   <filter-mapping>
191     <filter-name>SpringEncodingFilter</filter-name>
192     <url-pattern>/*</url-pattern>
193   </filter-mapping>
194   
195   
196   <servlet>
197     <servlet-name>mvc</servlet-name>
198     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
199     <init-param>
200          <param-name>contextConfigLocation</param-name>
201          <param-value>/WEB-INF/context/spring-mvc.xml</param-value>
202      </init-param>
203      <load-on-startup>2</load-on-startup>
204   </servlet>
205   
206   <servlet-mapping>
207     <servlet-name>mvc</servlet-name>
208     <url-pattern>/</url-pattern>
209   </servlet-mapping>
210 
211   <welcome-file-list>
212     <welcome-file>index.jsp</welcome-file>
213   </welcome-file-list>
214 
215 </web-app>
216 spring-context.xml内容
217 
218 <?xml version="1.0" encoding="UTF-8"?>
219 <beans xmlns="http://www.springframework.org/schema/beans"
220     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
221     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
222     xmlns:util="http://www.springframework.org/schema/util"
223     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
224       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
225       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd          
226       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
227     
228     
229     <!-- 激活@Controller模式 -->
230     <mvc:annotation-driven />
231     
232     <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 需要更改 -->
233     <context:component-scan base-package="com.pudp.bae.*" />
234     
235     <!-- 引入同文件夹下的redis属性配置文件 -->
236     <import resource="redis-context.xml"/>
237 
238 </beans>
239 redis-context.xml内容
240 
241 <beans     xmlns="http://www.springframework.org/schema/beans" 
242        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
243        xmlns:p="http://www.springframework.org/schema/p" 
244        xmlns:tx="http://www.springframework.org/schema/tx"
245        xmlns:context="http://www.springframework.org/schema/context"
246        xsi:schemaLocation="
247       http://www.springframework.org/schema/beans 
248       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
249       http://www.springframework.org/schema/tx 
250       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
251       http://www.springframework.org/schema/context
252       http://www.springframework.org/schema/context/spring-context-3.0.xsd
253          ">
254   
255   <!-- scanner redis properties  --> 
256   <context:property-placeholder location="/WEB-INF/property/redis.properties" />
257   
258   <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
259     <property name="maxIdle" value="${redis.maxIdle}" />  
260     <property name="maxActive" value="${redis.maxActive}" />  
261     <property name="maxWait" value="${redis.maxWait}" />  
262     <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
263   </bean>  
264     
265   <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  
266     p:host-name="${redis.host}" 
267     p:port="${redis.port}" 
268     p:password="${redis.pass}"  
269     p:pool-config-ref="poolConfig"/>  
270     
271   <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">  
272     <property name="connectionFactory"   ref="connectionFactory" />  
273   </bean>      
274    
275 </beans>               
276 Redis.properties文件内容
277 
278 # Redis settings
279 #redis.host=192.168.20.101
280 #redis.port=6380
281 #redis.pass=foobared
282 redis.host=127.0.0.1
283 redis.port=6379
284 redis.pass=
285   
286 redis.maxIdle=300
287 redis.maxActive=600
288 redis.maxWait=1000
289 redis.testOnBorrow=true
290 第三步 :Springmvc 对 Redis 的支持与实例应用 .
291 
292 实例对象
293 
294 
295 package com.pudp.bae.model;
296 
297 import com.pudp.bae.base.BaseModel;
298 
299 public class Member extends BaseModel{
300 
301   /**
302    * 
303    */
304   private static final long serialVersionUID = -1959528436584592183L;
305   
306   
307   private String id;
308   private String nickname;
309   
310   public Member(){}
311   
312   public Member(String id, String nickname){
313     this.setId(id);
314     this.setNickname(nickname);
315   }
316   
317   public String getId() {
318     return id;
319   }
320   public void setId(String id) {
321     this.id = id;
322   }
323   public String getNickname() {
324     return nickname;
325   }
326   public void setNickname(String nickname) {
327     this.nickname = nickname;
328   }
329   
330 }
331 View Code
332 Redis对象持久化操作
333 
334 package com.pudp.bae.base;
335 
336 import java.io.Serializable;
337 
338 import org.springframework.beans.factory.annotation.Autowired;
339 import org.springframework.data.redis.core.RedisTemplate;
340 import org.springframework.data.redis.serializer.RedisSerializer;
341 
342 public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {
343   
344   @Autowired
345   protected RedisTemplate<K,V> redisTemplate ;
346 
347   /** 
348    * 设置redisTemplate 
349    * @param redisTemplate the redisTemplate to set 
350    */  
351   public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {  
352     this.redisTemplate = redisTemplate;  
353   }  
354     
355   /** 
356    * 获取 RedisSerializer 
357    * <br>------------------------------<br> 
358    */  
359   protected RedisSerializer<String> getRedisSerializer() {  
360     return redisTemplate.getStringSerializer();  
361   }  
362   
363 }
364 package com.pudp.bae.base;
365 
366 import java.io.Serializable;
367 
368 import org.springframework.beans.factory.annotation.Autowired;
369 import org.springframework.data.redis.core.RedisTemplate;
370 import org.springframework.data.redis.serializer.RedisSerializer;
371 
372 public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {
373   
374   @Autowired
375   protected RedisTemplate<K,V> redisTemplate ;
376 
377   /** 
378    * 设置redisTemplate 
379    * @param redisTemplate the redisTemplate to set 
380    */  
381   public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {  
382     this.redisTemplate = redisTemplate;  
383   }  
384     
385   /** 
386    * 获取 RedisSerializer 
387    * <br>------------------------------<br> 
388    */  
389   protected RedisSerializer<String> getRedisSerializer() {  
390     return redisTemplate.getStringSerializer();  
391   }  
392   
393 }
394 redis对象操作
395 
396 package com.pudp.bae.dao.redis;
397 
398 import java.util.ArrayList;
399 import java.util.List;
400 
401 import org.springframework.dao.DataAccessException;
402 import org.springframework.data.redis.connection.RedisConnection;
403 import org.springframework.data.redis.core.RedisCallback;
404 import org.springframework.data.redis.serializer.RedisSerializer;
405 import org.springframework.stereotype.Repository;
406 import org.springframework.util.Assert;
407 
408 import com.pudp.bae.base.RedisGeneratorDao;
409 import com.pudp.bae.model.Member;
410 
411 
412 /**
413  * 参看博客 <br>
414  * -------------------------------------------------------------------------------
415  *  http://blog.csdn.net/java2000_wl/article/details/8543203
416  * -------------------------------------------------------------------------------
417  */
418 
419 @Repository(value="memberDao")
420 public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{
421 
422   
423   /**
424    * 添加对象
425    */
426   @Override
427   public boolean add(final Member member) {  
428     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
429       public Boolean doInRedis(RedisConnection connection)  
430           throws DataAccessException {  
431         RedisSerializer<String> serializer = getRedisSerializer();  
432         byte[] key  = serializer.serialize(member.getId());  
433         byte[] name = serializer.serialize(member.getNickname());  
434         return connection.setNX(key, name);  
435       }  
436     });  
437     return result;  
438   }  
439 
440   /**
441    * 添加集合
442    */
443   @Override
444   public boolean add(final List<Member> list) {
445     Assert.notEmpty(list);  
446     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
447       public Boolean doInRedis(RedisConnection connection)  
448           throws DataAccessException {  
449         RedisSerializer<String> serializer = getRedisSerializer();  
450         for (Member member : list) {  
451           byte[] key  = serializer.serialize(member.getId());  
452           byte[] name = serializer.serialize(member.getNickname());  
453           connection.setNX(key, name);  
454         }  
455         return true;  
456       }  
457     }, false, true);  
458     return result; 
459   }  
460   
461   /**
462    * 删除对象 ,依赖key
463    */
464   public void delete(String key) {  
465     List<String> list = new ArrayList<String>();  
466     list.add(key);  
467     delete(list);  
468   }  
469   
470   /**
471    * 删除集合 ,依赖key集合
472    */
473   public void delete(List<String> keys) {  
474     redisTemplate.delete(keys);  
475   }  
476   
477   /**
478    * 修改对象 
479    */
480   public boolean update(final Member member) {  
481     String key = member.getId();  
482     if (get(key) == null) {  
483       throw new NullPointerException("数据行不存在, key = " + key);  
484     }  
485     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
486       public Boolean doInRedis(RedisConnection connection)  
487           throws DataAccessException {  
488         RedisSerializer<String> serializer = getRedisSerializer();  
489         byte[] key  = serializer.serialize(member.getId());  
490         byte[] name = serializer.serialize(member.getNickname());  
491         connection.set(key, name);  
492         return true;  
493       }  
494     });  
495     return result;  
496   }  
497   
498   /**
499    * 根据key获取对象
500    */
501   public Member get(final String keyId) {  
502     Member result = redisTemplate.execute(new RedisCallback<Member>() {  
503       public Member doInRedis(RedisConnection connection)  
504           throws DataAccessException {  
505         RedisSerializer<String> serializer = getRedisSerializer();  
506         byte[] key = serializer.serialize(keyId);  
507         byte[] value = connection.get(key);  
508         if (value == null) {  
509           return null;  
510         }  
511         String nickname = serializer.deserialize(value);  
512         return new Member(keyId, nickname);  
513       }  
514     });  
515     return result;  
516   }  
517 
518 }
519 package com.pudp.bae.dao.redis;
520 
521 import java.util.ArrayList;
522 import java.util.List;
523 
524 import org.springframework.dao.DataAccessException;
525 import org.springframework.data.redis.connection.RedisConnection;
526 import org.springframework.data.redis.core.RedisCallback;
527 import org.springframework.data.redis.serializer.RedisSerializer;
528 import org.springframework.stereotype.Repository;
529 import org.springframework.util.Assert;
530 
531 import com.pudp.bae.base.RedisGeneratorDao;
532 import com.pudp.bae.model.Member;
533 
534 
535 /**
536  * 参看博客 <br>
537  * -------------------------------------------------------------------------------
538  *  http://blog.csdn.net/java2000_wl/article/details/8543203
539  * -------------------------------------------------------------------------------
540  */
541 
542 @Repository(value="memberDao")
543 public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{
544 
545   
546   /**
547    * 添加对象
548    */
549   @Override
550   public boolean add(final Member member) {  
551     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
552       public Boolean doInRedis(RedisConnection connection)  
553           throws DataAccessException {  
554         RedisSerializer<String> serializer = getRedisSerializer();  
555         byte[] key  = serializer.serialize(member.getId());  
556         byte[] name = serializer.serialize(member.getNickname());  
557         return connection.setNX(key, name);  
558       }  
559     });  
560     return result;  
561   }  
562 
563   /**
564    * 添加集合
565    */
566   @Override
567   public boolean add(final List<Member> list) {
568     Assert.notEmpty(list);  
569     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
570       public Boolean doInRedis(RedisConnection connection)  
571           throws DataAccessException {  
572         RedisSerializer<String> serializer = getRedisSerializer();  
573         for (Member member : list) {  
574           byte[] key  = serializer.serialize(member.getId());  
575           byte[] name = serializer.serialize(member.getNickname());  
576           connection.setNX(key, name);  
577         }  
578         return true;  
579       }  
580     }, false, true);  
581     return result; 
582   }  
583   
584   /**
585    * 删除对象 ,依赖key
586    */
587   public void delete(String key) {  
588     List<String> list = new ArrayList<String>();  
589     list.add(key);  
590     delete(list);  
591   }  
592   
593   /**
594    * 删除集合 ,依赖key集合
595    */
596   public void delete(List<String> keys) {  
597     redisTemplate.delete(keys);  
598   }  
599   
600   /**
601    * 修改对象 
602    */
603   public boolean update(final Member member) {  
604     String key = member.getId();  
605     if (get(key) == null) {  
606       throw new NullPointerException("数据行不存在, key = " + key);  
607     }  
608     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
609       public Boolean doInRedis(RedisConnection connection)  
610           throws DataAccessException {  
611         RedisSerializer<String> serializer = getRedisSerializer();  
612         byte[] key  = serializer.serialize(member.getId());  
613         byte[] name = serializer.serialize(member.getNickname());  
614         connection.set(key, name);  
615         return true;  
616       }  
617     });  
618     return result;  
619   }  
620   
621   /**
622    * 根据key获取对象
623    */
624   public Member get(final String keyId) {  
625     Member result = redisTemplate.execute(new RedisCallback<Member>() {  
626       public Member doInRedis(RedisConnection connection)  
627           throws DataAccessException {  
628         RedisSerializer<String> serializer = getRedisSerializer();  
629         byte[] key = serializer.serialize(keyId);  
630         byte[] value = connection.get(key);  
631         if (value == null) {  
632           return null;  
633         }  
634         String nickname = serializer.deserialize(value);  
635         return new Member(keyId, nickname);  
636       }  
637     });  
638     return result;  
639   }  
640 
641 }
642 Controller实现
643 
644 package com.pudp.bae.controller;
645 
646 import java.util.HashMap;
647 import java.util.Map;
648 
649 import javax.annotation.Resource;
650 import javax.servlet.http.HttpServletRequest;
651 import javax.servlet.http.HttpServletResponse;
652 
653 import org.springframework.stereotype.Controller;
654 import org.springframework.web.bind.annotation.ModelAttribute;
655 import org.springframework.web.bind.annotation.PathVariable;
656 import org.springframework.web.bind.annotation.RequestMapping;
657 import org.springframework.web.bind.annotation.RequestMethod;
658 import org.springframework.web.servlet.ModelAndView;
659 
660 import com.pudp.bae.base.BaseMultiController;
661 import com.pudp.bae.model.Member;
662 import com.pudp.bae.service.MemberService;
663 
664 @Controller
665 @RequestMapping(value="/member")
666 public class MemberController extends BaseMultiController{
667 
668   @Resource(name="memberService")
669   private MemberService memberService;
670   
671   public void setMemberService(MemberService memberService) {
672     this.memberService = memberService;
673   }
674   
675   @RequestMapping(value={"/add","/add.html"},method={RequestMethod.GET})
676   public ModelAndView add(HttpServletRequest request,HttpServletResponse response){
677     Map<String,Object> map = new HashMap<String, Object>();
678     return toView("member/add", map);
679   }
680   
681   @RequestMapping(value={"/add","/add.html"},method={RequestMethod.POST})
682   public ModelAndView addMember(HttpServletRequest request,HttpServletResponse response,
683       @ModelAttribute("member")Member member){
684     Map<String,Object> map = new HashMap<String, Object>();
685     System.out.println(member);
686     map.put("message", "成功添加数据到库," + member);
687     this.memberService.add(member);
688     return toView("member/message", map);
689   }
690   
691   @RequestMapping(value={"/{id:\\d+}/query","/{id:\\d+}/query.html"},method={RequestMethod.GET,RequestMethod.POST})
692   public ModelAndView queryMember(HttpServletRequest request,HttpServletResponse response,
693       @PathVariable("id")String id){
694     Map<String,Object> map = new HashMap<String, Object>();
695     System.out.println(id);
696     Member member = this.memberService.get(id);
697     if(null!=member){
698       map.put("message", "查询Id=" + id + "的用户名为:" + member.getNickname());
699     }else{
700       map.put("message", "没有查询到与Id=" + id + "相关的数据");
701     }
702     return toView("member/message", map);
703   }
704   
705   @RequestMapping(value={"/{id:\\d+}/delete","/{id:\\d+}/delete.html"},method={RequestMethod.GET,RequestMethod.POST})
706   public ModelAndView deleteMember(HttpServletRequest request, HttpServletResponse response,
707       @PathVariable("id")String id){
708     Map<String,Object> map = new HashMap<String, Object>();
709     try {
710       this.memberService.delete(id);
711       map.put("message", "删除Id为" + id +"的用户成功.");
712     } catch (Exception e) {
713       e.printStackTrace();
714       map.put("message", "删除Id为" + id +"的用户失败, "+e.getMessage());
715     }
716     return toView("member/message", map);    
717   }
718   
719 }

 

posted @ 2016-08-26 16:09  奋斗,坚持  阅读(7368)  评论(1编辑  收藏  举报