Zhiqim Httpd即知启蒙WEB容器,是Zhiqim Framework面向WEB开发的多例服务,提供更简洁配置、积木式组件模块和天然的模型模板设计。
HttpRequest.java30KB
/*
* 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙,邂逅框架梦]
*
* https://zhiqim.org/project/zhiqim_framework/zhiqim_httpd.htm
*
* Zhiqim Httpd is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package org.zhiqim.httpd;
import java.io.IOException;
import java.security.cert.X509Certificate;
import java.util.Iterator;
import java.util.List;
import org.zhiqim.httpd.validate.Validate;
import org.zhiqim.kernel.model.maps.HashMapSS;
import org.zhiqim.kernel.model.maps.MapSO;
import org.zhiqim.kernel.model.objects.Int;
/**
* HTTP请求接口定义
*
* @version v1.0.0 @author zouzhigang 2016-7-15 新建与整理
*/
public interface HttpRequest extends HttpHeader
{
/** 获取请求编号 */
public String getId();
/** 获取产生时间戳 */
public long getTimeMillis();
/***********************************************************************/
//请求状态处理和判断
/***********************************************************************/
/** 设置拦截中 */
public void setStepInterceptor();
/** 设置Action处理中 */
public void setStepAction();
/** 获取当前处理环节 */
public int getStep();
/** 获取当前处理环节描述 */
public String getStepDesc();
/** 是否可读,已读头部之后可读 */
public boolean isRead();
/** 是否可编辑,提交之前可编辑 */
public boolean isEditable();
/** 是否已提交,提交之后不允许再操作request和response */
public boolean isCommitted();
/***********************************************************************/
//获取和判断请求行信息,包括协议、方法、版本、URI等
/***********************************************************************/
/** 获取协议格式 */
public String getScheme();
/** 获取端口信息 */
public int getPort();
/** 获取URI信息 */
public String getRequestURI();
/** 获取URL信息 */
public String getRequestURL();
/***********************************************************************/
//获取和判断请求头部信息
/***********************************************************************/
/** 获取消息头名称迭代器 */
public Iterator<String> getHeaderNames();
/** 获取请求头字符串 */
public String getHeaderString();
/** 获取请求头属性 */
public String getHeader(String key, String defaultValue);
/** 获取请求头属性整型值 */
public int getHeaderInt(String key);
/** 获取请求头属性整型值 */
public int getHeaderInt(String key, int defaultValue);
/** 获取请求头属性长整型值 */
public long getHeaderLong(String key);
/** 获取请求头属性长整型值 */
public long getHeaderLong(String key, long defaultValue);
/** 获取组装内容类型 */
public String getContentTypeMimeEncoding();
/** 获取来源地址 */
public String getReferer();
/** 获取知启蒙定义的客户端类型(mobile|www),该值也会设置到request的属性中 */
public String getZhiqimClientType();
/** 是否是异isXMLHttpRequest */
public boolean isXMLHttpRequest();
/** 是否手机端 */
public boolean isMobile();
/** 是否微信 */
public boolean isMicroMessenger();
/** 是否IE浏览器 */
public boolean isIE();
/** 是否是火狐浏览器 */
public boolean isFirefox();
/** 是否是Webkit浏览器 */
public boolean isWebkit();
/** 是否是chrome浏览器 */
public boolean isChrome();
/** 是否是Safari浏览器 */
public boolean isSafari();
/***********************************************************************/
//获取监听、服务器、上下文环境、响应、会话相关
/***********************************************************************/
/** 获取请求对应的响应对象 */
public HttpResponse getResponse();
/** 获取请求所在的服务 */
public HttpServer getServer();
/** 获取上下文环境路径 */
public String getContextPath();
/** 获取上下文环境名称 */
public String getContextName();
/** 获取上下文环境版本 */
public String getContextVersion();
/** 设置上下文环境属性 */
public void setContextAttribute(String key, Object value);
/** 设置上下文环境属性值(通过类结构) */
public <T> void setContextAttribute(Class<T> key, T value);
/** 获取上下文环境属性值 */
public Object getContextAttribute(String key);
/** 获取上下文环境属性值(通过类结构) */
public <T> T getContextAttribute(Class<T> key);
/** 获取上下文环境属性值 */
public Object getContextAttribute(String key, Object defaultValue);
/** 获取上下文环境属性值字符串 */
public String getContextAttributeString(String key);
/** 获取上下文环境属性值字符串 */
public String getContextAttributeString(String key, String defaultValue);
/** 获取上下文环境属性值整型 */
public int getContextAttributeInt(String key);
/** 获取上下文环境属性值整型 */
public int getContextAttributeInt(String key, int defaultValue);
/** 获取上下文环境属性值长整型 */
public long getContextAttributeLong(String key);
/** 获取上下文环境属性值长整型 */
public long getContextAttributeLong(String key, long defaultValue);
/** 获取上下文环境属性值布尔型 */
public boolean getContextAttributeBoolean(String key, boolean defaultValue);
/** 判断上下文环境是否有属性值 */
public boolean hasContextAttribute(String key);
/** 获取当前WEB目录根目录,注意没有/结尾 */
public String getResourcePath();
/** 获取上下文环境下绝对路径转为根环境下的绝对路径,如contextPath=/doc,path=/index.htm,得到/doc/index.htm */
public String getRootPath(String path);
/** 获取当前WEB目录路径转换成绝对路径 */
public String getRealPath(String path);
/** 获取SSL证书 */
public X509Certificate[] getCertificates();
/***********************************************************************/
//设置和获取Session中属性
/***********************************************************************/
/** 获取请求用户名 */
public String getRequestName();
/** 设置请求用户名 */
public void setRequestName(String name);
/** 获取会话编号 */
public String getSessionId();
/** 获取请求对应的会话环境 */
public HttpSession getSession();
/** 删除会话 */
public void invalidateSession();
/** 判断是否绑定了登录用户 */
public boolean hasSessionUser();
/** 绑定会话登录用户 */
public void bindSessionUser(HttpSessionUser sessionUser);
/** 解除绑定会话登录用户 */
public void unbindSessionUser();
/** 判断是否绑定了登录用户,且指定的会话用户类(HttpSessionUser子类) */
public <T extends HttpSessionUser> boolean hasSessionUser(Class<T> clazz);
/** 获取会话用户信息,且指定的会话用户类(HttpSessionUser子类) */
public <T extends HttpSessionUser> T getSessionUser(Class<T> clazz);
/** 获取会话默认的用户信息 */
public HttpSessionUser getSessionUser();
/** 获取会话默认的登录名 */
public String getSessionName();
/** 设置会话属性 */
public void setSessionAttribute(String name, Object value);
/** 获取会话属性值 */
public Object getSessionAttribute(String name);
/** 获取会话属性值 */
public Object getSessionAttribute(String name, Object defaultValue);
/** 获取会话属性值字符串 */
public String getSessionAttributeString(String name);
/** 获取会话属性值字符串 */
public String getSessionAttributeString(String name, String defaultValue);
/** 获取会话属性值整型 */
public int getSessionAttributeInt(String name);
/** 获取会话属性值整型 */
public int getSessionAttributeInt(String name, int defaultValue);
/** 获取会话属性值长整型 */
public long getSessionAttributeLong(String name);
/** 获取会话属性值长整型 */
public long getSessionAttributeLong(String name, long defaultValue);
/** 判断会话是否有属性值 */
public boolean hasSessionAttribute(String name);
/***********************************************************************/
//获取Cookie数据或数组
/***********************************************************************/
/** 获取指定名称的Cookie */
public String getCookie(String name);
/** 获取Cookie,如果没有值或值为空字符串返回缺省值 */
public String getCookie(String name, String defaultValue);
/** 获取请求中Cookie数组 */
public HttpCookie[] getCookies();
/** 删除请求中的Cookie值 */
public void removeCookie(String name);
/** 增加Cookie到响应中 */
public void addCookieToResponse(String name, String value);
/** 增加Cookie到响应中 */
public void addCookieToResponse(String name, String value, int seconds);
/** 增加Cookie到响应中 */
public void addCookieToResponse(HttpCookie cookie);
/** 删除Cookie到响应中 */
public void removeCookieToResponse(String name);
/***********************************************************************/
//获取请求中URL匹配的参数
/***********************************************************************/
/** 获取通配符参数列表 */
public List<String> getParameterMatch();
/**
* 获取通配符参数值
*
* @param index 参数匹配位置
* @return 有过滤的参数值
*/
public String getParameterMatch(int index);
/**
* 获取通配符参数值
*
* @param index 参数匹配位置
* @return 有过滤的参数值
*/
public long getParameterMatchLong(int index);
/**
* 获取通配符参数值
*
* @param index 参数匹配位置
* @return 有过滤的参数值
*/
public int getParameterMatchInt(int index);
/***********************************************************************/
//获取请求中URL和Content中的数据,包括URL和Content中的数据
/***********************************************************************/
/**
* 获取参数哈唏表(未安全过滤),先填入url中参数表,再用content参数表覆盖,得到全部参数表
*
* @return 得到全部参数表
*/
public HashMapSS getParameterMap();
/** 判断是否有参数 */
public boolean hasParameter(String name);
/**
* 获取参数值并安全过滤,优先检查content中是否存在,如果不存在才检查url中
*
* @param name 参数名
* @return 有过滤的参数值
*/
public String getParameter(String name);
/**
* 获取动态参数对象信息
*
* @param clazz 类结构
* @return 返回赋值后的对象
* @throws 异常需要捕捉
*/
public <T> T getParameter(Class<T> clazz) throws IllegalAccessException;
/**
* 获取参数值(未过滤),优先检查content中是否存在,如果不存在才检查url中
*
* @param name 参数名
* @return 有过滤的参数值
*/
public String getParameterNoFilter(String name);
/**
* 获取参数值并安全过滤,优先检查content中是否存在,如果不存在才检查url中,都不存在或值为空白返回缺省值
*
* @param name 参数名
* @param defaultValue 不存在或为空时的缺省值
* @return 有过滤的参数值
*/
public String getParameter(String name, String defaultValue);
/**
* 获取参数值(未过滤),优先检查content中是否存在,如果不存在才检查url中,都不存在或值为空白返回缺省值
*
* @param name 参数名
* @param defaultValue 不存在或为空时的缺省值
* @return 有过滤的参数值
*/
public String getParameterNoFilter(String name, String defaultValue);
/**
* 获取参数整型,非整型返回-1的值
*
* @param name 参数名
* @return 整数值
*/
public int getParameterInt(String name);
/**
* 获取参数整型,非整型返回缺省值
*
* @param name 参数名
* @param defaultValue 缺省值
* @return 整数值
*/
public int getParameterInt(String name, int defaultValue);
/**
* 获取参数长整型,非整型返回-1的值
*
* @param name 参数名
* @return 长整型
*/
public long getParameterLong(String name);
/**
* 获取参数长整型,非整型返回-1的值
*
* @param name 参数名
* @param defaultValue 缺省值
* @return 长整型
*/
public long getParameterLong(String name, long defaultValue);
/**
* 获取参数布尔型,非布尔型返回null的值
*
* @param name 参数名
* @return 布尔型
*/
public Boolean getParameterBool(String name);
/**
* 获取参数布尔型,非布尔型返回false的值
*
* @param name 参数名
* @return 布尔型
*/
public boolean getParameterBoolean(String name);
/**
* 获取参数布尔型,非布尔型返回false的值
*
* @param name 参数名
* @param defaultValue 缺省值
* @return 布尔型
*/
public boolean getParameterBoolean(String name, boolean defaultValue);
/**
* 获取两位小数的金额值,格式不对返回-1
*
* @param name 参数名
* @return 金额值,如果从请求中获取的格式不对,则返回-1
*/
public int getParameterAmount2R(String name);
/**
* 获取两位小数的金额值
*
* @param name 参数名
* @param defaultValue 缺省值
* @return 金额值,如果从请求中获取的格式不对,则返回缺省值
*/
public int getParameterAmount2R(String name, int defaultValue);
/**
* 获取两位小数的金额值长整型,格式不对返回-1
*
* @param name 参数名
* @param defaultValue 缺省值
* @return 金额值,如果从请求中获取的格式不对,则返回-1
*/
public long getParameterAmount2RLong(String name);
/**
* 获取两位小数的金额值长整型
*
* @param name 参数名
* @param defaultValue 缺省值
* @return 金额值,如果从请求中获取的格式不对,则返回缺省值
*/
public long getParameterAmount2R(String name, long defaultValue);
/**
* 获取参数值并安全过滤,并转化为数组(逗号格式),优先检查content中是否存在,如果不存在才检查url中
*
* @param name 参数名
* @return 有过滤后的逗号格式数组值
*/
public String[] getParameterValues(String name);
/**
* 获取参数值(未过滤),并转化为数组(逗号格式),优先检查content中是否存在,如果不存在才检查url中
*
* @param name 参数名
* @return 有过滤后的逗号格式数组值
*/
public String[] getParameterValuesNoFilter(String name);
/***********************************************************************/
//获取请求中URL中的数据
/***********************************************************************/
/** 获取URL参数哈唏表(值未过滤) */
public HashMapSS getParameterMapOnURL();
/** 判断是否有URL参数 */
public boolean hasParameterOnURL(String name);
/** 获取URL参数值,并安全过滤 */
public String getParameterOnURL(String name);
/** 获取URL参数值,并安全过滤 */
public String getParameterOnURL(String name, String defaultValue);
/** 获取URL参数值(未过滤) */
public String getParameterNoFilterOnURL(String name);
/** 获取URL参数值(未过滤) */
public String getParameterNoFilterOnURL(String name, String defaultValue);
/** 获取URL参数整型,非整型返回-1的值 */
public int getParameterIntOnURL(String name);
/** 获取URL参数整型,非整型返回缺省值 */
public int getParameterIntOnURL(String name, int defaultValue);
/** 获取URL参数长整型,非整型返回-1的值 */
public long getParameterLongOnURL(String name);
/** 获取URL参数长整型,非整型返回-1的值 */
public long getParameterLongOnURL(String name, long defaultValue);
/** 获取两位小数的金额值 */
public int getParameterAmount2ROnURL(String name, int defaultValue);
/** 获取两位小数的金额值长整型 */
public long getParameterAmount2ROnURL(String name, long defaultValue);
/** 获取URL参数值数组,并安全过滤 */
public String[] getParameterValuesOnURL(String name);
/***********************************************************************/
//获取请求中Content中的数据
/***********************************************************************/
/** 获取内容输入流字符串 */
public String getInputStreamString();
/** 获取内容参数哈唏表(值未过滤) */
public HashMapSS getParameterMapOnCNT();
/** 判断是否有内容参数 */
public boolean hasParameterOnCNT(String name);
/** 获取内容参数值,并安全过滤 */
public String getParameterOnCNT(String name);
/** 获取内容参数值,并安全过滤 */
public String getParameterOnCNT(String name, String defaultValue);
/** 获取内容参数值(未过滤) */
public String getParameterNoFileterOnCNT(String name);
/** 获取内容参数值(未过滤) */
public String getParameterNoFileterOnCNT(String name, String defaultValue);
/** 获取内容参数整型,非整型返回-1的值 */
public int getParameterIntOnCNT(String name);
/** 获取内容参数整型,非整型返回缺省值 */
public int getParameterIntOnCNT(String name, int defaultValue);
/** 获取内容参数长整型,非整型返回-1的值 */
public long getParameterLongOnCNT(String name);
/** 获取内容参数长整型,非整型返回-1的值 */
public long getParameterLongOnCNT(String name, long defaultValue);
/** 获取内容参数两位小数的金额值 */
public int getParameterAmount2ROnCNT(String name, int defaultValue);
/** 获取内容参数两位小数的金额值长整型 */
public long getParameterAmount2ROnCNT(String name, long defaultValue);
/** 获取内容参数值数组 */
public String[] getParameterValuesOnCNT(String name);
/** 设置参数值到URL表中 */
public void setParameterOnURL(String name, Object value);
/** 设置参数值到CNT表中 */
public void setParameterOnCNT(String name, Object value);
/***********************************************************************/
//设置和获取请求中属性
/***********************************************************************/
/** 获取属性列表 */
public MapSO getAttributeMap();
/** 获取属性值 */
public Object getAttribute(String name);
/** 获取属性值,如果无该属性则返回缺省值 */
public Object getAttribute(String name, Object defaultValue);
/** 获取属性值字符串 */
public String getAttributeString(String name);
/** 获取属性值字符串,如果无该属性则返回缺省值 */
public String getAttributeString(String name, String defaultValue);
/** 获取属性值整型 */
public int getAttributeInt(String name);
/** 获取属性值整型,如果无该属性则返回缺省值 */
public int getAttributeInt(String name, int defaultValue);
/** 获取属性值整型 */
public long getAttributeLong(String name);
/** 获取属性值整型,如果无该属性则返回缺省值 */
public long getAttributeLong(String name, int defaultValue);
/** 判断属性是否存在 */
public boolean hasAttribute(String name);
/** 设置属性 */
public void setAttribute(String name, Object value);
/***********************************************************************/
//获取请求/会话/上下文环境中嵌套属性,有则返回
/***********************************************************************/
/** 获取属性值 */
public Object getNestAttribute(String name);
/** 获取属性值,如果无该属性则返回缺省值 */
public Object getNestAttribute(String name, Object defaultValue);
/** 获取属性值字符串 */
public String getNestAttributeString(String name);
/** 获取属性值字符串,如果无该属性则返回缺省值 */
public String getNestAttributeString(String name, String defaultValue);
/** 获取属性值整型 */
public int getNestAttributeInt(String name);
/** 获取属性值整型,如果无该属性则返回缺省值 */
public int getNestAttributeInt(String name, int defaultValue);
/** 获取属性值整型 */
public long getNestAttributeLong(String name);
/** 获取属性值整型,如果无该属性则返回缺省值 */
public long getNestAttributeLong(String name, int defaultValue);
/** 判断属性是否存在 */
public boolean hasNestAttribute(String name);
/***********************************************************************/
//内部重定向请求和上下文环境下绝对路径
/***********************************************************************/
/**
* 内部重定向请求,支持从一个Action内部转到新的Action处理
*
* @param pathInContext 上下文内部路径,即对应的新Action的配置路径
* @throws IOException IO异常
* @throws HttpException HTTP异常
*/
public void forwardTo(String pathInContext) throws HttpException, IOException;
/** 是否已标志为已内部重定向 */
public boolean hasForward();
/***********************************************************************/
//以下为响应相关配置
/***********************************************************************/
/***********************************************************************/
//从请求中设置属性到响应中
/***********************************************************************/
/**
* 设置响应配置信息
*
* @param view 转向到视图页
* @param include 转向到视图页的嵌套地址
* @param forward 转向到新的路径
* @param redirect 重定向到新的路径
* @param method 执行类的方法
* @param alert 执行后的警告信息
*/
public void setResponseConfig(String view, String include, String forward, String redirect, String method, String alert);
/** 设置响应私用缓存 */
public void setResponsePrivateCache();
/** 设置响应头不缓存 */
public void setResponseNoCache();
/** 设置响应为UTF8编码*/
public void setResponseEncodingUTF8();
/***********************************************************************/
//设置响应的配置信息
/***********************************************************************/
/** 修改为是否转向 */
public void setReturn(boolean isReturn);
/** 设置成功失败信息 */
public void setAlertMsg(String errorMsg);
/** 修改视图页和嵌套地址,和转向页互斥 */
public void setView(String view, String include);
/** 修改为内部转向地址 */
public void setForward(String forwardTo);
/** 修改重定向,状态码为602 */
public void setRedirect(String redirect);
/** 修改重定向,和视图页互斥,但不改变responseStatus值 */
public void setRedirectInner(String redirect);
/** 修改父页重定向,状态码为601 */
public void setRedirectParent(String redirect);
/** 修改顶页重定向 ,状态码为603*/
public void setRedirectTop(String redirect);
/** 修改重定向前提示错误,状态码为602 */
public void setRedirect(String redirect, String error);
/** 修改父页重定向前提示错误,状态码为601 */
public void setRedirectParent(String redirect, String error);
/** 修改顶页重定向前提示错误,状态码为603 */
public void setRedirectTop(String redirect, String error);
/***********************************************************************/
//从请求中设置响应状态和文本属性
/***********************************************************************/
/** 获取响应属性码 */
public int getResponseStatus();
/** 获取响应属性文本 */
public String getResponseText();
/** 判断响应属性是不是成功 */
public boolean isResponseSuccess();
/** 判断响应属性是不是重定向 */
public boolean isResponseRedirect();
/** 设置响应结果属性,指定状态码但不能小于0,不能填70-699之间已知的状态码 */
public void setResponseResult(int responseStatus, String responseText);
/** 设置响应结果属性,指定状态码但不能小于0,不能填70-699之间已知的状态码 */
public void setResponseResult(Int result);
/** 设置响应结果属性,状态码为0,表示成功 */
public void setResponseResult(String responseText);
/** 设置响应结果属性,状态码为699,表示通用的失败 */
public void setResponseError(String responseText);
/**********************************************/
//加上四个常用特性方法,用于运行时修改设置
/**********************************************/
/** 增加一个返回上一页快捷方式 */
public void returnHistory();
/** 增加一个错误返回上一页并提示错误的快捷方式 */
public void returnHistory(String errorMsg);
/** 增加一个弹出窗口时关闭快捷方式 */
public void returnCloseWindow();
/** 增加一个弹出窗口时关闭并提示错误的快捷方式 */
public void returnCloseWindow(String errorMsg);
/** 增加一个弹出对话框时关闭快捷方式 */
public void returnCloseDialog();
/** 增加一个弹出对话框时关闭并提示错误的快捷方式 */
public void returnCloseDialog(String errorMsg);
/** 增加参数 */
public void addParam(String key, Object value);
/*******************************************************************************/
//转向控制字段相关属性
/*******************************************************************************/
/**
* 检查是否转向,两种情况<br><br>
*
* 1、当设置成强制不转向时,即不转向<br>
* 2、当为转向时,检查视图页和转向页是否存在,存在一个即转向,否则不转向<br>
*/
public boolean isReturn();
/** 获取Action在execute中转向的方法名 */
public String getExecuteMethod();
/** 获取转向定制的提示信息 */
public String getAlertMsg();
/** 获取视图信息 */
public String getView();
/** 获取视图信息嵌套地址 */
public String getInclude();
/** 获取内转向地址 */
public String getForward(String encoding);
/** 获取重定向地址 */
public String getRedirect(String encoding);
/** 获取重定向内部定义的地址 */
public String getRedirectInner();
/***********************************************/
//以下判断是否强制要求转向
/***********************************************/
/**
* 是否强制转向
*
* 1.如果有失败提示或成功提示,需强制转向
* 2.由业务指定返回上一页或关闭,需强制转向
*/
public boolean isForceReturn();
/**
* 获取强制转向类型
*
* 1.返回上一页
* 2.关闭当前窗口
* 3.关闭对话框
* 4.调用Javascript
* 0.表示正常连接
* @return int 类型
*/
public int getForceReturnType();
/*******************************************************************************/
//验证相关属性
/*******************************************************************************/
/** 获取验证列表 */
public List<Validate> getValidateList();
/** 获取验证脚本 */
public String getValidateScript();
/** 获取验证提交脚本 */
public String getValidateSubmitScript();
/** 增加验证信息 */
public void addValidate(Validate validate);
/** 清除所有的验证信息 */
public void clearValidate();
/** 检查验证信息 */
public boolean chkValidate();
/** 检查验证Script,无验证返回空,有则返回Script */
public String chkValidateScript();
/** 设置验证确认信息 */
public void setValidateConfirm(String confirm);
/** 设置验证提交时是否按钮变灰,默认变灰 */
public void setValidateGray(boolean isGray);
}