ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springMVC框架 对BaseCtrl封装,简化开发

2021-04-13 16:02:07  阅读:127  来源: 互联网

标签:封装 springMVC ip request public protected BaseCtrl import response


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

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

 

 

主题开始!!

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

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

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

 1,BaseCtrl类的编写

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

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

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

 

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


 

标签:封装,springMVC,ip,request,public,protected,BaseCtrl,import,response
来源: https://blog.51cto.com/u_7605937/2703515

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有