springMVC框架 对BaseCtrl封装,简化开发
程序员文章站
2022-06-28 19:15:43
让你的项目有对象,你的项目如何才会有面向对象特征呢?没有面向对象特征的项目不是好项目哦。此篇博文会使用到面向对象特征中的封装继承,还有就是枚举类型。这篇博文教你如何让你的项目体现面向对象特征。 最近公司需要做一个后台系统,做了几个月了老系统的维护更新,真心有点受不了,毕竟一个项目经过了几个人的手,每 ......
让你的项目有对象,你的项目如何才会有面向对象特征呢?没有面向对象特征的项目不是好项目哦。此篇博文会使用到面向对象特征中的封装继承,还有就是枚举类型。这篇博文教你如何让你的项目体现面向对象特征。
最近公司需要做一个后台系统,做了几个月了老系统的维护更新,真心有点受不了,毕竟一个项目经过了几个人的手,每个人的代码风格都不一样,然后觉得花段时间对老架构进行优化封装,本人做事一般喜欢先开始把准备工作做好,“磨刀不误砍柴工” 是我做事一向的风格,喜欢带着匠心精神去做某件事这样才会有更大的进步,带着“如何写优质的代码?”“如何优化程序的性能”的心去写代码,在公司实现个人价值。做个个精致的人,做个猪猪男孩【滑稽】。项目遵循阿里巴巴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 session 25 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 request 41 * @param response 42 */ 43 @modelattribute 44 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对象返回给map 49 this.tsmember = (manager) this.session.getattribute(constants.session_userinfo);//constants.session_userinfo 为保存用户session的key 50 } 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 @override 12 @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 }
这样是不是很方便呢?喜欢的可以点赞哦【比心】