public abstract class BaseController这是一个基础的Controller
/**
* IP地址正则
*/
private static final String PATTERN_IP = "(\\d*\\.){3}\\d*";
private static final Pattern ipPattern = Pattern.compile(PATTERN_IP);
今天在看代码时,发现程序使用了 request.getScheme() 。不明白是什么意思,查了一下。结果整理如下:
1、request.getScheme() 返回当前链接使用的协议;一般应用返回http;SSL返回https;
2、在程序中的应用如下:
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//项目里面 大佬写的代码
private static final String PATTERN_IP = "(\\d*\\.){3}\\d*";
private static final Pattern ipPattern = Pattern.compile(PATTERN_IP);
basePath = (
ipPattern.matcher(request.getServerName()).find() ? request.getScheme() :"https")
//上面的代码返回当前链接使用的协议;一般应用返回http;SSL返回https;
+ "://" + request.getServerName() + port + request.getContextPath();
//最后一个完整的basePath地址就得到了,还是大佬厉害~
find()方法是部分匹配,是查找输入串中与模式匹配的子串,如果该匹配的串有组还可以使用group()函数。
matches()是全部匹配,是将整个输入串与模式匹配,如果要验证一个输入的数据是否为数字类型或其他类型,一般要用matches()。
这里复习一下request 的常用方法:
request.getSchema()可以返回当前页面使用的协议,http 或是 https;
request.getServerName()可以返回当前页面所在的服务器的名字;即服务器的IP地址
request.getServerPort()可以返回当前页面所在的服务器使用的端口,就是80;
request.getContextPath()可以返回当前页面所在的应用的名字;
关于@ModelAttribute的说明
@ModelAttribute的使用说明,转自【我不在乎等多久】
下面是CSDN上面对上面的各个方法的总结
关于request.getServletPath(),request.getContextPath()的总结
获取客户端的cookies信息封装到map集合中
// * 获取客户端的cookie,按照名称封装到map结构中
private Map<String, Cookie> getCookieMap(HttpServletRequest request) {
Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
Cookie[] cookies = request.getCookies();
if (null != cookies) {
for (Cookie cookie : cookies) {
cookieMap.put(cookie.getName(), cookie);
}
}
return cookieMap;
}
写入json字符串到客户端(content-type=application/json)
protected void writerJson(Object data) {
this.writer("application/json;charset=UTF-8", JSON.toJSONString(data, Constant.JSON_DATE_FORMAT_CONF));
}
//因为是BaseController所以当被继承之后有对象调用这个方法的时候,就会写入到客户端
写入文字到客户端
protected void writerTxt(String content) {
this.writer("text/html;charset=UTF-8", content);
}
写入数据到客户端
protected void writer(String contentType, String content) {
try {
response.setContentType(contentType);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.getWriter().write(content);
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
log.error("写入数据错误,错误信息:", e);
}
}
看完这个BaseController之后,发现了好多2年前使用的原生技术,比如写入客户端数据,写入到客户端文件信息等,当时是用jsp的技术,要求原生的Servlet技术特别高,对请求的原生方法要掌握的特别多,现在也忘记了好多。
最后默默致敬一下这位大佬
@作者 chuck
@时间 2018年10月16日
@版权 深圳市佛系派互联网科技集团