test erm update

This commit is contained in:
thinkgem
2018-01-03 22:03:08 +08:00
parent 51579b11cd
commit 3ba8b0af97
3 changed files with 576 additions and 440 deletions

View File

@@ -1,439 +1,439 @@
/** /**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved. * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
*/ */
package com.jeesite.common.web.http; package com.jeesite.common.web.http;
import java.io.IOException; import java.io.IOException;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.TreeMap; import java.util.TreeMap;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import com.jeesite.common.collect.MapUtils; import com.jeesite.common.collect.MapUtils;
import com.jeesite.common.io.PropertiesUtils; import com.jeesite.common.io.PropertiesUtils;
import com.jeesite.common.lang.StringUtils; import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.mapper.JsonMapper; import com.jeesite.common.mapper.JsonMapper;
import com.jeesite.common.mapper.XmlMapper; import com.jeesite.common.mapper.XmlMapper;
/** /**
* Http与Servlet工具类. * Http与Servlet工具类.
* @author ThinkGem * @author ThinkGem
* @version 2014-8-19 * @version 2014-8-19
*/ */
public class ServletUtils { public class ServletUtils {
public static final String DEFAULT_PARAMS_PARAM = "params"; // 登录扩展参数JSON字符串优先级高于扩展参数前缀 public static final String DEFAULT_PARAMS_PARAM = "params"; // 登录扩展参数JSON字符串优先级高于扩展参数前缀
public static final String DEFAULT_PARAM_PREFIX_PARAM = "param_"; // 扩展参数前缀 public static final String DEFAULT_PARAM_PREFIX_PARAM = "param_"; // 扩展参数前缀
// 定义静态文件后缀静态文件排除URI地址 // 定义静态文件后缀静态文件排除URI地址
private static String[] staticFiles; private static String[] staticFiles;
private static String[] staticFileExcludeUri; private static String[] staticFileExcludeUri;
/** /**
* 获取当前请求对象 * 获取当前请求对象
* web.xml: <listener><listener-class> * web.xml: <listener><listener-class>
* org.springframework.web.context.request.RequestContextListener * org.springframework.web.context.request.RequestContextListener
* </listener-class></listener> * </listener-class></listener>
*/ */
public static HttpServletRequest getRequest(){ public static HttpServletRequest getRequest(){
HttpServletRequest request = null; HttpServletRequest request = null;
try{ try{
request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest(); request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
if (request == null){ if (request == null){
return null; return null;
} }
return request; return request;
}catch(Exception e){ }catch(Exception e){
return null; return null;
} }
} }
/** /**
* 获取当前相应对象 * 获取当前相应对象
* web.xml: <filter><filter-name>requestContextFilter</filter-name><filter-class> * web.xml: <filter><filter-name>requestContextFilter</filter-name><filter-class>
* org.springframework.web.filter.RequestContextFilter</filter-class></filter><filter-mapping> * org.springframework.web.filter.RequestContextFilter</filter-class></filter><filter-mapping>
* <filter-name>requestContextFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping> * <filter-name>requestContextFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
*/ */
public static HttpServletResponse getResponse(){ public static HttpServletResponse getResponse(){
HttpServletResponse response = null; HttpServletResponse response = null;
try{ try{
response = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getResponse(); response = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getResponse();
if (response == null){ if (response == null){
return null; return null;
} }
}catch(Exception e){ }catch(Exception e){
return null; return null;
} }
return response; return response;
} }
/** /**
* 是否是Ajax异步请求 * 是否是Ajax异步请求
* @param request * @param request
*/ */
public static boolean isAjaxRequest(HttpServletRequest request){ public static boolean isAjaxRequest(HttpServletRequest request){
String accept = request.getHeader("accept"); String accept = request.getHeader("accept");
if (accept != null && accept.indexOf("application/json") != -1){ if (accept != null && accept.indexOf("application/json") != -1){
return true; return true;
} }
String xRequestedWith = request.getHeader("X-Requested-With"); String xRequestedWith = request.getHeader("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1){ if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1){
return true; return true;
} }
String uri = request.getRequestURI(); String uri = request.getRequestURI();
if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")){ if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")){
return true; return true;
} }
String ajax = request.getParameter("__ajax"); String ajax = request.getParameter("__ajax");
if (StringUtils.inStringIgnoreCase(ajax, "json", "xml")){ if (StringUtils.inStringIgnoreCase(ajax, "json", "xml")){
return true; return true;
} }
return false; return false;
} }
/** /**
* 判断访问URI是否是静态文件请求 * 判断访问URI是否是静态文件请求
* @throws Exception * @throws Exception
*/ */
public static boolean isStaticFile(String uri){ public static boolean isStaticFile(String uri){
if (staticFiles == null){ if (staticFiles == null){
PropertiesUtils pl = PropertiesUtils.getInstance(); PropertiesUtils pl = PropertiesUtils.getInstance();
try{ try{
staticFiles = StringUtils.split(pl.getProperty("web.staticFile"), ","); staticFiles = StringUtils.split(pl.getProperty("web.staticFile"), ",");
staticFileExcludeUri = StringUtils.split(pl.getProperty("web.staticFileExcludeUri"), ","); staticFileExcludeUri = StringUtils.split(pl.getProperty("web.staticFileExcludeUri"), ",");
}catch(NoSuchElementException nsee){ }catch(NoSuchElementException nsee){
; // 什么也不做 ; // 什么也不做
} }
if (staticFiles == null){ if (staticFiles == null){
try { try {
throw new Exception("检测到“jeesite.yml”中没有配置“web.staticFile”属性。" throw new Exception("检测到“jeesite.yml”中没有配置“web.staticFile”属性。"
+ "配置示例:\n#静态文件后缀\nweb.staticFile=.css,.js,.png,.jpg,.gif," + "配置示例:\n#静态文件后缀\nweb.staticFile=.css,.js,.png,.jpg,.gif,"
+ ".jpeg,.bmp,.ico,.swf,.psd,.htc,.crx,.xpi,.exe,.ipa,.apk"); + ".jpeg,.bmp,.ico,.swf,.psd,.htc,.crx,.xpi,.exe,.ipa,.apk");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
if (staticFileExcludeUri != null){ if (staticFileExcludeUri != null){
for (String s : staticFileExcludeUri){ for (String s : staticFileExcludeUri){
if (StringUtils.contains(uri, s)){ if (StringUtils.contains(uri, s)){
return false; return false;
} }
} }
} }
if (StringUtils.endsWithAny(uri, staticFiles)){ if (StringUtils.endsWithAny(uri, staticFiles)){
return true; return true;
} }
return false; return false;
} }
/** /**
* 返回结果JSON字符串支持JsonP请求参数加__callback=回调函数名) * 返回结果JSON字符串支持JsonP请求参数加__callback=回调函数名)
* @param result Global.TRUE or Globle.False * @param result Global.TRUE or Globle.False
* @param message 执行消息 * @param message 执行消息
* @param data 消息数据 * @param data 消息数据
* @return JSON字符串{result:'true',message:''} * @return JSON字符串{result:'true',message:''}
*/ */
public static String renderResult(String result, String message) { public static String renderResult(String result, String message) {
return renderResult(result, message, null); return renderResult(result, message, null);
} }
/** /**
* 返回结果JSON字符串支持JsonP请求参数加__callback=回调函数名) * 返回结果JSON字符串支持JsonP请求参数加__callback=回调函数名)
* @param result Global.TRUE or Globle.False * @param result Global.TRUE or Globle.False
* @param message 执行消息 * @param message 执行消息
* @param data 消息数据 * @param data 消息数据
* @return JSON字符串{result:'true',message:'', if map then key:value,key2:value2... else data:{} } * @return JSON字符串{result:'true',message:'', if map then key:value,key2:value2... else data:{} }
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static String renderResult(String result, String message, Object data) { public static String renderResult(String result, String message, Object data) {
Map<String, Object> resultMap = MapUtils.newHashMap(); Map<String, Object> resultMap = MapUtils.newHashMap();
resultMap.put("result", result); resultMap.put("result", result);
resultMap.put("message", message); resultMap.put("message", message);
if (data != null){ if (data != null){
if (data instanceof Map){ if (data instanceof Map){
resultMap.putAll((Map<String, Object>)data); resultMap.putAll((Map<String, Object>)data);
}else{ }else{
resultMap.put("data", data); resultMap.put("data", data);
} }
} }
HttpServletRequest request = ServletUtils.getRequest(); HttpServletRequest request = ServletUtils.getRequest();
String uri = request.getRequestURI(); String uri = request.getRequestURI();
if (StringUtils.endsWithIgnoreCase(uri, ".xml")){ if (StringUtils.endsWithIgnoreCase(uri, ".xml")){
return XmlMapper.toXml(resultMap); return XmlMapper.toXml(resultMap);
}else{ }else{
String functionName = request.getParameter("__callback"); String functionName = request.getParameter("__callback");
if (StringUtils.isNotBlank(functionName)){ if (StringUtils.isNotBlank(functionName)){
return JsonMapper.toJsonp(functionName, resultMap); return JsonMapper.toJsonp(functionName, resultMap);
}else{ }else{
return JsonMapper.toJson(resultMap); return JsonMapper.toJson(resultMap);
} }
} }
} }
/** /**
* 直接将结果JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名) * 直接将结果JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名)
* @param response 渲染对象:{result:'true',message:'',data:{}} * @param response 渲染对象:{result:'true',message:'',data:{}}
* @param result Global.TRUE or Globle.False * @param result Global.TRUE or Globle.False
* @param message 执行消息 * @param message 执行消息
* @return null * @return null
*/ */
public static String renderResult(HttpServletResponse response, String result, String message) { public static String renderResult(HttpServletResponse response, String result, String message) {
return renderString(response, renderResult(result, message), null); return renderString(response, renderResult(result, message), null);
} }
/** /**
* 直接将结果JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名) * 直接将结果JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名)
* @param response 渲染对象:{result:'true',message:'',data:{}} * @param response 渲染对象:{result:'true',message:'',data:{}}
* @param result Global.TRUE or Globle.False * @param result Global.TRUE or Globle.False
* @param message 执行消息 * @param message 执行消息
* @param data 消息数据 * @param data 消息数据
* @return null * @return null
*/ */
public static String renderResult(HttpServletResponse response, String result, String message, Object data) { public static String renderResult(HttpServletResponse response, String result, String message, Object data) {
return renderString(response, renderResult(result, message, data), null); return renderString(response, renderResult(result, message, data), null);
} }
/** /**
* 将对象转换为JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名) * 将对象转换为JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名)
* @param response 渲染对象 * @param response 渲染对象
* @param object 待转换JSON并渲染的对象 * @param object 待转换JSON并渲染的对象
* @return null * @return null
*/ */
public static String renderObject(HttpServletResponse response, Object object) { public static String renderObject(HttpServletResponse response, Object object) {
HttpServletRequest request = ServletUtils.getRequest(); HttpServletRequest request = ServletUtils.getRequest();
String uri = request.getRequestURI(); String uri = request.getRequestURI();
if (StringUtils.endsWithIgnoreCase(uri, ".xml")){ if (StringUtils.endsWithIgnoreCase(uri, ".xml")){
return XmlMapper.toXml(object); return XmlMapper.toXml(object);
}else{ }else{
String functionName = request.getParameter("__callback"); String functionName = request.getParameter("__callback");
if (StringUtils.isNotBlank(functionName)){ if (StringUtils.isNotBlank(functionName)){
return renderString(response, JsonMapper.toJsonp(functionName, object)); return renderString(response, JsonMapper.toJsonp(functionName, object));
}else{ }else{
return renderString(response, JsonMapper.toJson(object)); return renderString(response, JsonMapper.toJson(object));
} }
} }
} }
/** /**
* 将字符串渲染到客户端 * 将字符串渲染到客户端
* @param response 渲染对象 * @param response 渲染对象
* @param string 待渲染的字符串 * @param string 待渲染的字符串
* @return null * @return null
*/ */
public static String renderString(HttpServletResponse response, String string) { public static String renderString(HttpServletResponse response, String string) {
return renderString(response, string, null); return renderString(response, string, null);
} }
/** /**
* 将字符串渲染到客户端 * 将字符串渲染到客户端
* @param response 渲染对象 * @param response 渲染对象
* @param string 待渲染的字符串 * @param string 待渲染的字符串
* @return null * @return null
*/ */
public static String renderString(HttpServletResponse response, String string, String type) { public static String renderString(HttpServletResponse response, String string, String type) {
try { try {
// response.reset(); // 先注释掉否则以前设置的Header会被清理掉如ajax登录设置记住我Cookie // response.reset(); // 先注释掉否则以前设置的Header会被清理掉如ajax登录设置记住我Cookie
response.setContentType(type == null ? "application/json" : type); response.setContentType(type == null ? "application/json" : type);
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
response.getWriter().print(string); response.getWriter().print(string);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
/** /**
* 获得请求参数值 * 获得请求参数值
*/ */
public static String getParameter(String name) { public static String getParameter(String name) {
HttpServletRequest request = getRequest(); HttpServletRequest request = getRequest();
if (request == null){ if (request == null){
return null; return null;
} }
return request.getParameter(name); return request.getParameter(name);
} }
/** /**
* 获得请求参数Map * 获得请求参数Map
*/ */
public static Map<String, Object> getParameters() { public static Map<String, Object> getParameters() {
return getParameters(getRequest()); return getParameters(getRequest());
} }
/** /**
* 获得请求参数Map * 获得请求参数Map
*/ */
public static Map<String, Object> getParameters(ServletRequest request) { public static Map<String, Object> getParameters(ServletRequest request) {
if (request == null){ if (request == null){
return MapUtils.newHashMap(); return MapUtils.newHashMap();
} }
return getParametersStartingWith(request, ""); return getParametersStartingWith(request, "");
} }
/** /**
* 取得带相同前缀的Request Parameters, copy from spring WebUtils. * 取得带相同前缀的Request Parameters, copy from spring WebUtils.
* 返回的结果的Parameter名已去除前缀. * 返回的结果的Parameter名已去除前缀.
*/ */
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public static Map<String, Object> getParametersStartingWith(ServletRequest request, String prefix) { public static Map<String, Object> getParametersStartingWith(ServletRequest request, String prefix) {
Validate.notNull(request, "Request must not be null"); Validate.notNull(request, "Request must not be null");
Enumeration paramNames = request.getParameterNames(); Enumeration paramNames = request.getParameterNames();
Map<String, Object> params = new TreeMap<String, Object>(); Map<String, Object> params = new TreeMap<String, Object>();
String pre = prefix; String pre = prefix;
if (pre == null) { if (pre == null) {
pre = ""; pre = "";
} }
while (paramNames != null && paramNames.hasMoreElements()) { while (paramNames != null && paramNames.hasMoreElements()) {
String paramName = (String) paramNames.nextElement(); String paramName = (String) paramNames.nextElement();
if ("".equals(pre) || paramName.startsWith(pre)) { if ("".equals(pre) || paramName.startsWith(pre)) {
String unprefixed = paramName.substring(pre.length()); String unprefixed = paramName.substring(pre.length());
String[] values = request.getParameterValues(paramName); String[] values = request.getParameterValues(paramName);
if (values == null || values.length == 0) { if (values == null || values.length == 0) {
values = new String[]{}; values = new String[]{};
// Do nothing, no values found at all. // Do nothing, no values found at all.
} else if (values.length > 1) { } else if (values.length > 1) {
params.put(unprefixed, values); params.put(unprefixed, values);
} else { } else {
params.put(unprefixed, values[0]); params.put(unprefixed, values[0]);
} }
} }
} }
return params; return params;
} }
/** /**
* 组合Parameters生成Query String的Parameter部分,并在paramter name上加上prefix. * 组合Parameters生成Query String的Parameter部分,并在paramter name上加上prefix.
*/ */
public static String encodeParameterStringWithPrefix(Map<String, Object> params, String prefix) { public static String encodeParameterStringWithPrefix(Map<String, Object> params, String prefix) {
StringBuilder queryStringBuilder = new StringBuilder(); StringBuilder queryStringBuilder = new StringBuilder();
String pre = prefix; String pre = prefix;
if (pre == null) { if (pre == null) {
pre = ""; pre = "";
} }
Iterator<Entry<String, Object>> it = params.entrySet().iterator(); Iterator<Entry<String, Object>> it = params.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
Entry<String, Object> entry = it.next(); Entry<String, Object> entry = it.next();
queryStringBuilder.append(pre).append(entry.getKey()).append("=").append(entry.getValue()); queryStringBuilder.append(pre).append(entry.getKey()).append("=").append(entry.getValue());
if (it.hasNext()) { if (it.hasNext()) {
queryStringBuilder.append("&"); queryStringBuilder.append("&");
} }
} }
return queryStringBuilder.toString(); return queryStringBuilder.toString();
} }
/** /**
* 从请求对象中扩展参数数据格式JSON 或 param_ 开头的参数 * 从请求对象中扩展参数数据格式JSON 或 param_ 开头的参数
* @param request 请求对象 * @param request 请求对象
* @return 返回Map对象 * @return 返回Map对象
*/ */
public static Map<String, Object> getExtParams(ServletRequest request) { public static Map<String, Object> getExtParams(ServletRequest request) {
Map<String, Object> paramMap = null; Map<String, Object> paramMap = null;
String params = StringUtils.trim(request.getParameter(DEFAULT_PARAMS_PARAM)); String params = StringUtils.trim(request.getParameter(DEFAULT_PARAMS_PARAM));
if (StringUtils.isNotBlank(params) && StringUtils.startsWith(params, "{")) { if (StringUtils.isNotBlank(params) && StringUtils.startsWith(params, "{")) {
paramMap = JsonMapper.fromJson(params, Map.class); paramMap = JsonMapper.fromJson(params, Map.class);
} else { } else {
paramMap = getParametersStartingWith(ServletUtils.getRequest(), DEFAULT_PARAM_PREFIX_PARAM); paramMap = getParametersStartingWith(ServletUtils.getRequest(), DEFAULT_PARAM_PREFIX_PARAM);
} }
return paramMap; return paramMap;
} }
/** /**
* 设置客户端缓存过期时间 的Header. * 设置客户端缓存过期时间 的Header.
*/ */
public static void setExpiresHeader(HttpServletResponse response, long expiresSeconds) { public static void setExpiresHeader(HttpServletResponse response, long expiresSeconds) {
// Http 1.0 header, set a fix expires date. // Http 1.0 header, set a fix expires date.
response.setDateHeader(HttpHeaders.EXPIRES, System.currentTimeMillis() + expiresSeconds * 1000); response.setDateHeader(HttpHeaders.EXPIRES, System.currentTimeMillis() + expiresSeconds * 1000);
// Http 1.1 header, set a time after now. // Http 1.1 header, set a time after now.
response.setHeader(HttpHeaders.CACHE_CONTROL, "private, max-age=" + expiresSeconds); response.setHeader(HttpHeaders.CACHE_CONTROL, "private, max-age=" + expiresSeconds);
} }
/** /**
* 设置禁止客户端缓存的Header. * 设置禁止客户端缓存的Header.
*/ */
public static void setNoCacheHeader(HttpServletResponse response) { public static void setNoCacheHeader(HttpServletResponse response) {
// Http 1.0 header // Http 1.0 header
response.setDateHeader(HttpHeaders.EXPIRES, 1L); response.setDateHeader(HttpHeaders.EXPIRES, 1L);
response.addHeader(HttpHeaders.PRAGMA, "no-cache"); response.addHeader(HttpHeaders.PRAGMA, "no-cache");
// Http 1.1 header // Http 1.1 header
response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0"); response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0");
} }
/** /**
* 设置LastModified Header. * 设置LastModified Header.
*/ */
public static void setLastModifiedHeader(HttpServletResponse response, long lastModifiedDate) { public static void setLastModifiedHeader(HttpServletResponse response, long lastModifiedDate) {
response.setDateHeader(HttpHeaders.LAST_MODIFIED, lastModifiedDate); response.setDateHeader(HttpHeaders.LAST_MODIFIED, lastModifiedDate);
} }
/** /**
* 设置Etag Header. * 设置Etag Header.
*/ */
public static void setEtag(HttpServletResponse response, String etag) { public static void setEtag(HttpServletResponse response, String etag) {
response.setHeader(HttpHeaders.ETAG, etag); response.setHeader(HttpHeaders.ETAG, etag);
} }
/** /**
* 根据浏览器If-Modified-Since Header, 计算文件是否已被修改. * 根据浏览器If-Modified-Since Header, 计算文件是否已被修改.
* 如果无修改, checkIfModify返回false ,设置304 not modify status. * 如果无修改, checkIfModify返回false ,设置304 not modify status.
* @param lastModified 内容的最后修改时间. * @param lastModified 内容的最后修改时间.
*/ */
public static boolean checkIfModifiedSince(HttpServletRequest request, HttpServletResponse response, public static boolean checkIfModifiedSince(HttpServletRequest request, HttpServletResponse response,
long lastModified) { long lastModified) {
long ifModifiedSince = request.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE); long ifModifiedSince = request.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE);
if ((ifModifiedSince != -1) && (lastModified < ifModifiedSince + 1000)) { if ((ifModifiedSince != -1) && (lastModified < ifModifiedSince + 1000)) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return false; return false;
} }
return true; return true;
} }
/** /**
* 根据浏览器 If-None-Match Header, 计算Etag是否已无效. * 根据浏览器 If-None-Match Header, 计算Etag是否已无效.
* 如果Etag有效, checkIfNoneMatch返回false, 设置304 not modify status. * 如果Etag有效, checkIfNoneMatch返回false, 设置304 not modify status.
* @param etag 内容的ETag. * @param etag 内容的ETag.
*/ */
public static boolean checkIfNoneMatchEtag(HttpServletRequest request, HttpServletResponse response, String etag) { public static boolean checkIfNoneMatchEtag(HttpServletRequest request, HttpServletResponse response, String etag) {
String headerValue = request.getHeader(HttpHeaders.IF_NONE_MATCH); String headerValue = request.getHeader(HttpHeaders.IF_NONE_MATCH);
if (headerValue != null) { if (headerValue != null) {
boolean conditionSatisfied = false; boolean conditionSatisfied = false;
if (!"*".equals(headerValue)) { if (!"*".equals(headerValue)) {
StringTokenizer commaTokenizer = new StringTokenizer(headerValue, ","); StringTokenizer commaTokenizer = new StringTokenizer(headerValue, ",");
while (!conditionSatisfied && commaTokenizer.hasMoreTokens()) { while (!conditionSatisfied && commaTokenizer.hasMoreTokens()) {
String currentToken = commaTokenizer.nextToken(); String currentToken = commaTokenizer.nextToken();
if (currentToken.trim().equals(etag)) { if (currentToken.trim().equals(etag)) {
conditionSatisfied = true; conditionSatisfied = true;
} }
} }
} else { } else {
conditionSatisfied = true; conditionSatisfied = true;
} }
if (conditionSatisfied) { if (conditionSatisfied) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
response.setHeader(HttpHeaders.ETAG, etag); response.setHeader(HttpHeaders.ETAG, etag);
return false; return false;
} }
} }
return true; return true;
} }
} }

136
web/db/oracle/core.sql Normal file
View File

@@ -0,0 +1,136 @@
/* Drop Tables */
DROP TABLE test_data CASCADE CONSTRAINTS;
DROP TABLE test_data_child CASCADE CONSTRAINTS;
DROP TABLE test_tree CASCADE CONSTRAINTS;
/* Create Tables */
-- test_data
CREATE TABLE test_data
(
id varchar2(64) NOT NULL,
test_input varchar2(200),
test_textarea varchar2(200),
test_select varchar2(10),
test_select_multiple varchar2(200),
test_radio varchar2(10),
test_checkbox varchar2(200),
test_date timestamp,
test_datetime timestamp,
test_user_code varchar2(64),
test_office_code varchar2(64),
test_company_code varchar2(64),
status char(1) DEFAULT '0' NOT NULL,
create_by varchar2(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar2(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar2(500),
PRIMARY KEY (id)
);
-- test_data_child
CREATE TABLE test_data_child
(
id varchar2(64) NOT NULL,
test_sort number(10,0),
test_data_id varchar2(64),
test_input varchar2(200),
test_textarea varchar2(200),
test_select varchar2(10),
test_select_multiple varchar2(200),
test_radio varchar2(10),
test_checkbox varchar2(200),
test_date timestamp,
test_datetime timestamp,
test_user_code varchar2(64),
test_office_code varchar2(64),
test_company_code varchar2(64),
PRIMARY KEY (id)
);
-- test_tree
CREATE TABLE test_tree
(
id varchar2(64) NOT NULL,
parent_code varchar2(64) NOT NULL,
parent_codes varchar2(2000) NOT NULL,
tree_sort number(10) NOT NULL,
tree_sorts varchar2(1200) NOT NULL,
tree_leaf char(1) NOT NULL,
tree_level number(4) NOT NULL,
tree_names varchar2(2000) NOT NULL,
tree_name nvarchar2(200) NOT NULL,
status char(1) DEFAULT '0' NOT NULL,
create_by varchar2(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar2(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar2(500),
PRIMARY KEY (id)
);
/* Comments */
COMMENT ON TABLE test_data IS 'test_data';
COMMENT ON COLUMN test_data.id IS '编号';
COMMENT ON COLUMN test_data.test_input IS '单行文本';
COMMENT ON COLUMN test_data.test_textarea IS '多行文本';
COMMENT ON COLUMN test_data.test_select IS '下拉框';
COMMENT ON COLUMN test_data.test_select_multiple IS '下拉多选';
COMMENT ON COLUMN test_data.test_radio IS '单选框';
COMMENT ON COLUMN test_data.test_checkbox IS '复选框';
COMMENT ON COLUMN test_data.test_date IS '日期选择';
COMMENT ON COLUMN test_data.test_datetime IS '日期时间选择';
COMMENT ON COLUMN test_data.test_user_code IS '用户选择';
COMMENT ON COLUMN test_data.test_office_code IS '部门选择';
COMMENT ON COLUMN test_data.test_company_code IS '公司选择';
COMMENT ON COLUMN test_data.status IS '状态0正常 1删除 2停用';
COMMENT ON COLUMN test_data.create_by IS '创建者';
COMMENT ON COLUMN test_data.create_date IS '创建时间';
COMMENT ON COLUMN test_data.update_by IS '更新者';
COMMENT ON COLUMN test_data.update_date IS '更新时间';
COMMENT ON COLUMN test_data.remarks IS '备注信息';
COMMENT ON TABLE test_data_child IS 'test_data_child';
COMMENT ON COLUMN test_data_child.id IS '编号';
COMMENT ON COLUMN test_data_child.test_sort IS '排序号';
COMMENT ON COLUMN test_data_child.test_data_id IS '父表主键';
COMMENT ON COLUMN test_data_child.test_input IS '单行文本';
COMMENT ON COLUMN test_data_child.test_textarea IS '多行文本';
COMMENT ON COLUMN test_data_child.test_select IS '下拉框';
COMMENT ON COLUMN test_data_child.test_select_multiple IS '下拉多选';
COMMENT ON COLUMN test_data_child.test_radio IS '单选框';
COMMENT ON COLUMN test_data_child.test_checkbox IS '复选框';
COMMENT ON COLUMN test_data_child.test_date IS '日期选择';
COMMENT ON COLUMN test_data_child.test_datetime IS '日期时间选择';
COMMENT ON COLUMN test_data_child.test_user_code IS '用户选择';
COMMENT ON COLUMN test_data_child.test_office_code IS '部门选择';
COMMENT ON COLUMN test_data_child.test_company_code IS '公司选择';
COMMENT ON TABLE test_tree IS 'test_tree';
COMMENT ON COLUMN test_tree.id IS '编号';
COMMENT ON COLUMN test_tree.parent_code IS '父级编号';
COMMENT ON COLUMN test_tree.parent_codes IS '所有父级编号';
COMMENT ON COLUMN test_tree.tree_sort IS '本级排序号(升序)';
COMMENT ON COLUMN test_tree.tree_sorts IS '所有级别排序号';
COMMENT ON COLUMN test_tree.tree_leaf IS '是否最末级';
COMMENT ON COLUMN test_tree.tree_level IS '层次级别';
COMMENT ON COLUMN test_tree.tree_names IS '全节点名';
COMMENT ON COLUMN test_tree.tree_name IS '树节点名';
COMMENT ON COLUMN test_tree.status IS '状态0正常 1删除 2停用';
COMMENT ON COLUMN test_tree.create_by IS '创建者';
COMMENT ON COLUMN test_tree.create_date IS '创建时间';
COMMENT ON COLUMN test_tree.update_by IS '更新者';
COMMENT ON COLUMN test_tree.update_date IS '更新时间';
COMMENT ON COLUMN test_tree.remarks IS '备注信息';

View File

@@ -12,7 +12,7 @@
<category_index>0</category_index> <category_index>0</category_index>
<zoom>1.0</zoom> <zoom>1.0</zoom>
<x>0</x> <x>0</x>
<y>0</y> <y>48</y>
<default_color> <default_color>
<r>128</r> <r>128</r>
<g>128</g> <g>128</g>