HttpServletResponse工具类和HttpServletRequest工具类,前台参数接收方式和后台返回(JSON)数据格式
RequestUtils.java 操作类
package cn.utils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.util.UrlPathHelper; import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer; /**
* HttpServletRequest 工具类
*/
public class RequestUtils { private static final Logger log = LoggerFactory
.getLogger(RequestUtils.class); /**
* HTTP POST请求
*/
public static final String POST = "POST"; /**
* UTF-8编码
*/
public static final String UTF8 = "UTF-8"; /**
* 获取QueryString的参数,并使用URLDecoder以UTF-8格式转码。如果请求是以post方法提交的,
* 那么将通过HttpServletRequest#getParameter获取。
*
* @param request
* web请求
* @param name
* 参数名称
* @return
*/
public static String getQueryParam(HttpServletRequest request, String name) {
if (StringUtils.isBlank(name)) {
return null;
}
if (request.getMethod().equalsIgnoreCase(POST)) {
return request.getParameter(name);
}
String s = request.getQueryString();
if (StringUtils.isBlank(s)) {
return null;
}
try {
s = URLDecoder.decode(s, UTF8);
} catch (UnsupportedEncodingException e) {
log.error("encoding " + UTF8 + " not support?", e);
}
String[] values = parseQueryString(s).get(name);
if (values != null && values.length > 0) {
return values[values.length - 1];
} else {
return null;
}
} @SuppressWarnings("unchecked")
public static Map<String, Object> getQueryParams(HttpServletRequest request) {
Map<String, String[]> map;
if (request.getMethod().equalsIgnoreCase(POST)) {
map = request.getParameterMap();
} else {
String s = request.getQueryString();
if (StringUtils.isBlank(s)) {
return new HashMap<String, Object>();
}
try {
s = URLDecoder.decode(s, UTF8);
} catch (UnsupportedEncodingException e) {
log.error("encoding " + UTF8 + " not support?", e);
}
map = parseQueryString(s);
} Map<String, Object> params = new HashMap<String, Object>(map.size());
int len;
for (Map.Entry<String, String[]> entry : map.entrySet()) {
len = entry.getValue().length;
if (len == 1) {
params.put(entry.getKey(), entry.getValue()[0]);
} else if (len > 1) {
params.put(entry.getKey(), entry.getValue());
}
}
return params;
} /**
*
* Parses a query string passed from the client to the server and builds a
* <code>HashTable</code> object with key-value pairs. The query string
* should be in the form of a string packaged by the GET or POST method,
* that is, it should have key-value pairs in the form <i>key=value</i>,
* with each pair separated from the next by a & character.
*
* <p>
* A key can appear more than once in the query string with different
* values. However, the key appears only once in the hashtable, with its
* value being an array of strings containing the multiple values sent by
* the query string.
*
* <p>
* The keys and values in the hashtable are stored in their decoded form, so
* any + characters are converted to spaces, and characters sent in
* hexadecimal notation (like <i>%xx</i>) are converted to ASCII characters.
*
* @param s
* a string containing the query to be parsed
*
* @return a <code>HashTable</code> object built from the parsed key-value
* pairs
*
* @exception IllegalArgumentException
* if the query string is invalid
*
*/
public static Map<String, String[]> parseQueryString(String s) {
String valArray[] = null;
if (s == null) {
throw new IllegalArgumentException();
}
Map<String, String[]> ht = new HashMap<String, String[]>();
StringTokenizer st = new StringTokenizer(s, "&");
while (st.hasMoreTokens()) {
String pair = (String) st.nextToken();
int pos = pair.indexOf('=');
if (pos == -1) {
continue;
}
String key = pair.substring(0, pos);
String val = pair.substring(pos + 1, pair.length());
if (ht.containsKey(key)) {
String oldVals[] = (String[]) ht.get(key);
valArray = new String[oldVals.length + 1];
for (int i = 0; i < oldVals.length; i++) {
valArray[i] = oldVals[i];
}
valArray[oldVals.length] = val;
} else {
valArray = new String[1];
valArray[0] = val;
}
ht.put(key, valArray);
}
return ht;
} public static Map<String, String> getRequestMap(HttpServletRequest request,
String prefix) {
return getRequestMap(request, prefix, false);
} public static Map<String, String> getRequestMapWithPrefix(
HttpServletRequest request, String prefix) {
return getRequestMap(request, prefix, true);
} @SuppressWarnings("unchecked")
private static Map<String, String> getRequestMap(
HttpServletRequest request, String prefix, boolean nameWithPrefix) {
Map<String, String> map = new HashMap<String, String>();
Enumeration<String> names = request.getParameterNames();
String name, key, value;
while (names.hasMoreElements()) {
name = names.nextElement();
if (name.startsWith(prefix)) {
key = nameWithPrefix ? name : name.substring(prefix.length());
value = StringUtils.join(request.getParameterValues(name), ',');
map.put(key, value);
}
}
return map;
} /**
* 获取访问者IP
*
* 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。
*
* 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割),
* 如果还不存在则调用Request .getRemoteAddr()。
*
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Real-IP");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
if(ip.contains("../")||ip.contains("..\\")){
return "";
}
return ip;
}
ip = request.getHeader("X-Forwarded-For");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个IP值,第一个为真实IP。
int index = ip.indexOf(',');
if (index != -1) {
ip= ip.substring(0, index);
}
if(ip.contains("../")||ip.contains("..\\")){
return "";
}
return ip;
} else {
ip=request.getRemoteAddr();
if(ip.contains("../")||ip.contains("..\\")){
return "";
}
if(ip.equals("0:0:0:0:0:0:0:1")){
ip="127.0.0.1";
}
return ip;
} } /**
* 获得当的访问路径
*
* HttpServletRequest.getRequestURL+"?"+HttpServletRequest.getQueryString
*
* @param request
* @return
*/
public static String getLocation(HttpServletRequest request) {
UrlPathHelper helper = new UrlPathHelper();
StringBuffer buff = request.getRequestURL();
String uri = request.getRequestURI();
String origUri = helper.getOriginatingRequestUri(request);
buff.replace(buff.length() - uri.length(), buff.length(), origUri);
String queryString = helper.getOriginatingQueryString(request);
if (queryString != null) {
buff.append("?").append(queryString);
}
return buff.toString();
} public static Map<String,String> getSignMap(HttpServletRequest request){
Map<String,String>param=new HashMap<String, String>();
Enumeration penum=(Enumeration) request.getParameterNames();
while(penum.hasMoreElements()){
String pKey=(String) penum.nextElement();
String value=request.getParameter(pKey);
//sign和uploadFile不参与 值为空也不参与
if(!pKey.equals("sign")&&!pKey.equals("uploadFile")
&&StringUtils.isNotBlank(value)){
param.put(pKey,value);
}
}
return param;
} public static void main(String[] args) {
}
}
ResponseUtils.java 操作类
package cn.utils; import java.io.IOException; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* HttpServletResponse 工具类
*/
public final class ResponseUtils {
public static final Logger log = LoggerFactory
.getLogger(ResponseUtils.class); /**
* 发送文本。使用UTF-8编码。
*
* @param response
* HttpServletResponse
* @param text
* 发送的字符串
*/
public static void renderText(HttpServletResponse response, String text) {
render(response, "text/plain;charset=UTF-8", text);
} /**
* 发送json。使用UTF-8编码。
*
* @param response
* HttpServletResponse
* @param text
* 发送的字符串
*/
public static void renderJson(HttpServletResponse response, String text) {
render(response, "application/json;charset=UTF-8", text);
} /**
* 发送xml。使用UTF-8编码。
*
* @param response
* HttpServletResponse
* @param text
* 发送的字符串
*/
public static void renderXml(HttpServletResponse response, String text) {
render(response, "text/xml;charset=UTF-8", text);
} /**
* 发送内容。使用UTF-8编码。
*
* @param response
* @param contentType
* @param text
*/
public static void render(HttpServletResponse response, String contentType,
String text) {
response.setContentType(contentType);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
try {
response.getWriter().write(text);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
} public static void renderApiJson(HttpServletResponse response,
HttpServletRequest request,ApiResponse apiResult) {
//js跨域请求
String callback = request.getParameter("callback");
if(StringUtils.isNotBlank(callback)){
ResponseUtils.renderJson(response,callback+"(" + apiResult.toString() + ")" );
}else{
ResponseUtils.renderJson(response, apiResult.toString());
}
}
}
ApiResponse.java
package cn.utils;
public class ApiResponse {
public ApiResponse(String body, String message, String status) {
super();
this.body = body;
this.message = message;
this.status = status;
}
/**
* 返回信息主体
*/
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
/**
* API调用提示信息
*/
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
/**
* API接口调用状态
*/
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public String toString() {
return "{\"body\":" + body + ", \"message\":" + message + ",\"status\":" + status + "}";
}
private String body;
private String message;
private String status;
}
HttpServletResponse工具类和HttpServletRequest工具类,前台参数接收方式和后台返回(JSON)数据格式的更多相关文章
- .net mvc前台如何接收和解析后台的字典类型的数据 二分搜索算法 window.onunload中使用HTTP请求 网页关闭 OpenCvSharp尝试 简单爬虫
.net mvc前台如何接收和解析后台的字典类型的数据 很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是 ...
- spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500:no convertter for return value of type
问题描述 spring Boot 中文返回给浏览器乱码 解析成问号?? fastJson jackJson spring boot 新增配置解决后台返回 json 到前台中文乱码之后,出现返回json ...
- 后台返回json数据,前台显示代码
List list = "从DAL获取的数据集合" //取出分页标签html int pageIndex = context.Request["pageIndex&quo ...
- Struts2中的JSON问题——后台返回JSON字符串到前台
最近做一个项目遇到一个比较棘手的问题,项目后台采用struts2+Hibernate3+Spring3,前台采用ExtJs4.笔者目前仍是一名大二学生吗,后台框架完全是毫无任何基础,从零学,现学现用. ...
- .net mvc前台如何接收和解析后台的字典类型的数据
很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是没有找到. 今天想记录一下这样一个小的需求的做法.先说一下我 ...
- SSM获取前台参数的方式
1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"="application/ ...
- SpringMVC通过实体类返回json格式的字符串,并在前端显示
一.除了搭建springmvc框架需要的jar包外,还需要这两个jar包 jackson-core-asl-1.9.2.jar和jackson-mapper-asl-1.9.2.jar 二.web,. ...
- JAVA工具类获取HttpServletRequest、HttpServletResponse 对象
添加依赖 <!-- Spring Web --> <dependency> <groupId>org.springframework</groupId> ...
- jdbc工具类的封装,以及表单验证数据提交后台
在之前已经写过了jdbc的工具类,不过最近学习了新的方法,所以在这里重新写一遍,为后面的javaEE做铺垫: 首先我们要了解javaEE项目中,文件构成,新建一个javaEE项目,在项目中,有一个we ...
随机推荐
- LOJ 2555 & 洛谷 P4602 [CTSC2018]混合果汁(二分+主席树)
LOJ 题目链接 & 洛谷题目链接 题意:商店里有 \(n\) 杯果汁,第 \(i\) 杯果汁有美味度 \(d_i\),单价为 \(p_i\) 元/升.最多可以添加 \(l_i\) 升.有 \ ...
- Codeforces Round #691 (Div. 2) 题解
A 不多说了吧,直接扫一遍求出 \(r_i>b_i\) 的个数和 \(r_i<b_i\) 的个数 B 稍微打个表找个规律就可以发现,当 \(n\) 为奇数的时候,答案为 \(\dfrac{ ...
- Codeforces 1406E - Deleting Numbers(根分+数论)
Codeforces 题面传送门 & 洛谷题面传送门 一道个人感觉挺有意思的交互题,本人一开始想了个奇奇怪怪的做法,还以为卡不进去,结果发现竟然过了,而且还是正解( 首先看到这类题目可以考虑每 ...
- Codeforces 193E - Fibonacci Number(打表找规律+乱搞)
Codeforces 题目传送门 & 洛谷题目传送门 蠢蠢的我竟然第一眼想套通项公式?然鹅显然 \(5\) 在 \(\bmod 10^{13}\) 意义下并没有二次剩余--我真是活回去了... ...
- Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)
Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...
- 洛谷 P6478 - [NOI Online #2 提高组] 游戏(二项式反演+树形 dp)
题面传送门 没错这就是我 boom0 的那场 NOIOL 的 T3 一年前,我在 NOIOL #2 的赛场上折戟沉沙,一年后,我从倒下的地方爬起. 我成功了,我不再是从前那个我了 我们首先假设 A 拥 ...
- 8核cpu,,负载
今天有一个电话面试,面试官问我:CentOS怎么查看CPU负载?我说:看top的第一行有load average.面试官又问:为什么从这就判定是负载高呢?依据是什么呢?然后... 然后我就尴尬了,挂了 ...
- 8.7 进程间的通讯:管道、消息队列、共享内存、信号量、信号、Socket
进程间的通讯 进程间为什么需要通讯? 共享数据.数据传输.消息通知.进程控制 进程间的通讯有哪些类型? 首先,联系前面讲过的知识,进程之间的用户地址空间是相互独立的,不能进行互相访问,但是,内核空间却 ...
- Flink(六)【ParameterTool类】
ParameterTool 工具类 object ParameterToolTest { def main(args: Array[String]): Unit = { val params: Par ...
- Hadoop fs.copyToLocalFile错误
fs.copyToLocalFile(new Path("/study1/1.txt"), new Path("C:/Users/Administrator/Deskto ...