经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
springMVC框架 对BaseCtrl封装,简化开发
来源:cnblogs  作者:求知若渴,虚心若愚  时间:2018/9/25 20:12:51  对本文有异议

  让你的项目有对象,你的项目如何才会有面向对象特征呢?没有面向对象特征的项目不是好项目哦。此篇博文会使用到面向对象特征中的封装继承,还有就是枚举类型。这篇博文教你如何让你的项目体现面向对象特征。

  最近公司需要做一个后台系统,做了几个月了老系统的维护更新,真心有点受不了,毕竟一个项目经过了几个人的手,每个人的代码风格都不一样,然后觉得花段时间对老架构进行优化封装,本人做事一般喜欢先开始把准备工作做好,“磨刀不误砍柴工”  是我做事一向的风格,喜欢带着匠心精神去做某件事这样才会有更大的进步,带着“如何写优质的代码?”“如何优化程序的性能”的心去写代码,在公司实现个人价值。做个个精致的人,做个猪猪男孩【滑稽】。项目遵循阿里巴巴java开发手则哦

 

 

主题开始!!

问题:使用springmvc 视图框架,有个很麻烦的地方就是,我们需要request和response 对象时我们就需要在方法参数栏中

public String index(HttpServletRequest request) 添加request接口,

作者觉得这样很麻烦,还有就是我想从session对象中读取登入用户,就需要写一条很长的代码,鄙人心里一万个mmp。

 1,BaseCtrl类的编写

  1. 1 package cc.royao.mana.ctrl.base;
  2. 2
  3. 3 import java.util.Map;
  4. 4
  5. 5 import javax.servlet.http.HttpServletRequest;
  6. 6 import javax.servlet.http.HttpServletResponse;
  7. 7 import javax.servlet.http.HttpSession;
  8. 8
  9. 9 import org.springframework.web.bind.annotation.ModelAttribute;
  10. 10
  11. 11 import com.alibaba.fastjson.JSONObject;
  12. 12
  13. 13 import cc.royao.common.Constants;
  14. 14 import cc.royao.mana.auth.model.Manager;
  15. 15 import cc.royao.mana.auth.model.TsMember;
  16. 16
  17. 17 /**
  18. 18 * 控制器基础类
  19. 19 * @author 朱孝辉
  20. 20 *
  21. 21 */
  22. 22 public class BaseCtrl {
  23. 23
  24. 24 //region HttpRequest Response Session
  25. 25 protected HttpServletRequest request;
  26. 26
  27. 27 protected HttpServletResponse response;
  28. 28
  29. 29 protected HttpSession session;
  30. 30
  31. 31 // 登入用户
  32. 32 protected Manager tsMember;
  33. 33
  34. 34 // 前端传来的参数
  35. 35 protected Map<String, Object> params;
  36. 36 /**
  37. 37 * 说明:@ModelAttribute的作用
  38. 38 1)放置在方法的形参上:表示引用Model中的数据
  39. 39 2)放置在方法上面:表示请求该类的每个Action前都会首先执行它,也可以将一些准备数据的操作放置在该方法里面。
  40. 40 * @param request
  41. 41 * @param response
  42. 42 */
  43. 43 @ModelAttribute
  44. 44 public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
  45. 45 this.request = request;
  46. 46 this.response = response;
  47. 47 this.session = request.getSession();
  48. 48 this.params = JSONObject.parseObject(request.getParameter("map"));// 前端传map对象(是转了json字符串的对象哦)到后台,得到json字符串最后转json对象返回给Map
  49. 49 this.tsMember = (Manager) this.session.getAttribute(Constants.SESSION_USERINFO);//Constants.SESSION_USERINFO 为保存用户session的key
  50. 50 }
  51. 51 protected String getIp(HttpServletRequest request) { //得到请求用户的ip地址
  52. 52 String ip = request.getHeader("x-forwarded-for");
  53. 53 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  54. 54 ip = request.getHeader("Proxy-Client-IP");
  55. 55 }
  56. 56 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  57. 57 ip = request.getHeader("WL-Proxy-Client-IP");
  58. 58 }
  59. 59 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  60. 60 ip = request.getRemoteAddr();
  61. 61 }
  62. 62 return ip;
  63. 63
  64. 64 }
  65. 65 }

当每次请求一个继承了BaseCtrl类的接口类,都会先执行setReqAndRes方法,有兴趣的同学可以去看看@ModelAttribute我上面也写了一些介绍。

这样我们就不用在接口方法参数栏中写request了,直接使用父类的request的成员变量就行。

 

  1. 1 @Controller
  2. 2 @RequestMapping("/wallet")
  3. 3 @SuppressWarnings("rawtypes")
  4. 4 public class WalletCtrl extends BaseCtrl implements BaseController{
  5. 5
  6. 6 private final Logger logger = Logger.getLogger(this.getClass()); //logger打印日志文件 ,log对象请使用 private final 修饰哦
  7. 7
  8. 8 /**
  9. 9 * 首页
  10. 10 */
  11. 11 @Override
  12. 12 @RequestMapping("/index.htm")
  13. 13 public String index() {
  14. 14 System.out.println(request);
  15. 15 System.out.println(response);
  16. 16 System.out.println(request.getSession().getAttribute(Constants.SESSION_USERINFO));
  17. 17 return "walletManage/wallet/list";
  18. 18 }

 

 

这样是不是很方便呢?喜欢的可以点赞哦【比心】

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号