zoukankan      html  css  js  c++  java
  • springMVC框架 对BaseCtrl封装,简化开发

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

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

     

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

  • 相关阅读:
    设计模式1 设计模式概述
    关于jdk的配置
    搭建webpack项目框架
    移动乐淘day1
    前后端开发(2):浏览器与PHP程序的交互
    Ajax中post与get的区别
    Web前端:2、盒模型的组成
    Web前端:1、HTML&CSS概述及结构
    VMware11虚拟机安装Redhat6.5视频演示
    VMware虚拟机中安装Linux系统步骤(Redhat6.5)
  • 原文地址:https://www.cnblogs.com/thirteen-zxh/p/9679142.html
Copyright © 2011-2022 走看看