什么是页面特殊参数?
在Leopard中,定义的页面特殊参数就是在controller中只需要写上这个参数的名字,就可以在方法中拿到值 。比如:sessUserId, 就是从session中获取userId的值。
Leopard中定义了很多页面特殊参数,包括:
proxyIp:获取离服务器最近的机器IP
requestUri:当前请求的URI
sessCaptcha:session中的验证码
sessionId:获取sessionId
sessUserId:当前登录的用户ID
sessUsername:当前登录的用户名
userAgent:获取浏览器类型(User-Agent)
这些参数被定义为Leopard页面特殊参数,或者称之为关键字参数。以上页面特殊参数,就像java的关键字一样。在页面传递的时候,如果出现同名的参数,将被忽略页面参数值。举个例子:比如你在页面提交时有一个属性名为sessUserId,被赋值为1,而session中的sessUserId是2,那么在controller中全拿到的值是2,而不是1。1将被忽略,因此在页面传递时,请不要使用以上页面特殊参数。
通过上以上的描述,相信各位同学对页面特殊参数已经有了一定的了解。
对于页面特殊参数,那就是一个字“屌炸天”!对不起,请宽恕我,我是受坐山雕的影响!
在web系统中,难免会将一些会话中常用的值存入Session中,比如说:当前登录用户的机构信息、当前登录用户的角色信息、当前登录用户的用户信息等等。
当需要从Session中获取值时,通常会采取在Controller 的方法入口参数传入HttpServletRequest ,然后再调用request.getSession().getAttribute("xxxx")来获取值。严谨的写法,还需要判断requst.getSession、返回值等是否为空?
例如:在session中获取userId的值,通常的写法如下:
package io.leopard.util; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class SessionUtil { public static String getSessUserId(HttpServletRequest request) { String sessUserId = ""; HttpSession session = request.getSession(); if (session != null) { sessUserId = (String) session.getAttribute("sessUserId"); } return sessUserId; } }
那么在Controller里获取sessUserId如下:
package io.leopard.web.mvc.controller; import io.leopard.util.SessionUtil; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class UserController { @RequestMapping(value = "/checkMobile.do") public ModelAndView checkMobile(HttpServletRequest request) throws IOException { ModelAndView model = new ModelAndView("/web/user/checkMobile"); String userId = SessionUtil.getSessUserId(request); return model; } }
以上方法,有二点让我难以接受:
1、在checkMobile方法里传入了HttpServletRequest这个参数,因为HttpServletRequest是一个包装对象,编写测试代码时需要参照源码进行参数值设置。
2、每次获取userId都需要写一行代码:SessionUtil.getSessUserId(request);
原始的写法我们已经见识,那么在Leopard中的写法是怎么样的呢?只需要在方法入口中传入sessUserId这个参数即可,代码如下:
package io.leopard.web.mvc.controller; import java.io.IOException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class UserController { @RequestMapping(value = "/checkMobile.do") public ModelAndView checkMobile(String sessUserId) throws IOException { ModelAndView model = new ModelAndView("/web/user/checkMobile"); return model; } }
真是应了那一个字-“屌炸天”,那么sessUserId是怎么获取到对应的值的呢?只需要简单的二步即可以搞定:
1、实现接口PageParameter中的二个方法:getKey(), getValue(HttpServletRequest request);
2、注册实现类为bean,使用注解的形式。对了,别忘记在xml中进行扫描。
上例中sessUserId的实现代码如下:
package io.leopard.web4j.parameter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.lang.NotImplementedException; import org.springframework.stereotype.Service; /** * 获取当前登录的自定义用户Id * * @author 阿海 * */ @Service public class SessUserIdPageParameter implements PageParameter { @Override public String getValue(HttpServletRequest request) { String sessUserId = ""; HttpSession session = request.getSession(); if (session != null) { sessUserId = (String) session.getAttribute("sessUserId"); } return sessUserId; } @Override public String getKey() { return "sessUserId"; } }
Leopard不建议在session中存入过多的参数,尤其是对象参数。存入过多参数,在开启分布式时,有可能会导致情能问题!
相关推荐
NULL 博文链接:https://lindows.iteye.com/blog/672175
Git Mac 版本git-1.8.3-intel-universal-snow-leopard.dmg
Teneo的功能丰富的聊天客户端 •••••••• 关于 Leopard聊天UI是的功能丰富的聊天客户端。 Teneo能够随每个响应一起返回丰富的数据,而Leopard利用这些响应来呈现交互式...cd leopard-chat-ui-teneo npm instal
Leopard Tweaker为Leopard提供了一系列有用,省时和性能改进的工具。
Leopard CRM 是一种客户关系管理系统,旨在跟踪组织内的客户联系,包括销售联系、产品试用和技术支持历史记录。
[Leopard-Raws] Chuunibyou demo Koi ga Shitai! Ren OP (MX 1280x720 x264 AAC).ass
LeopardAssist 协助在不满足 867MHz 或更快处理器的最低系统要求的机器上安装 OS X Leopard。 它通过将脚本临时写入基于 G4 的 Mac 的 NVRAM 来实现这一点。 在启动时执行,此脚本将暂时强制系统报告安装了更快的...
黑苹果必用--leopard写入硬盘系统文件,用Leopard 硬盘安装助手给硬盘写入MAC OS的时候出现 not a HFS partition C,系统自带分区后一个10G一个30G 10G的盘符格式为FAT32 磁盘标识已用DiskGenius修改为AF ,但是用...
利用Leopard系统自带工具-预览-给图片添加注释.docx
Mac.OS.X.leopard(VMware.Workstation配置文件)
10.6-Leopard教程 每一步都附有截图,非常详细,本人刚刚装成功
MAC+OS+X+10.5+Leopard使用教程,里面包括安装双系统,以及如何使用mac的图解教程。
LeopardAssist协助在不满足867MHz或更快处理器的最低系统要求的计算机上安装OS X Leopard。 它是通过将脚本临时写入基于G4的Mac的NVRAM中来实现的。 在启动时执行此脚本,它将临时强制系统报告已安装了更快的处理器...
Mac OS X 10.5(PowerPC G4,PowerPC G5)的当前WebKit框架的内部版本。 为了复兴Snow Leopard,至少需要一名具备开发开源软件技能的志愿者!
必填下载,速度比较快,我用1晚上完成。好像是国外的种子,一般在10个以上。
新鲜出炉:leopard硬盘安装史重要更新:leopard硬盘安装助手!!支持iso文件! 1、格式化一盘为fat32,或将盘上所有文件(含隐藏的)删空 2、打开程序,选镜象文件(支持iso文件) 3、目标盘选刚才格的盘,点开始进行镜象 4、...
新鲜出炉:leopard硬盘安装史重要更新:leopard硬盘安装助手!!支持iso文件! 1、格式化一盘为fat32,或将盘上所有文件(含隐藏的)删空 2、打开程序,选镜象文件(支持iso文件) 3、目标盘选刚才格的盘,点开始进行镜象 4、...
This driver has been tested on Xilinx ZCU102 platform with a Leopard LI-IMXISX031MIPI-FMC camera board. The Xilinx's platform runs on Linux with V4l2 support for video capture and image processing. ...