![JAR search and dependency download from the Maven repository](/logo.png)
com.tsc9526.monalisa.tools.servlet.MelpServlet Maven / Gradle / Ivy
/*******************************************************************************************
* Copyright (c) 2016, zzg.zhou([email protected])
*
* Monalisa is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*******************************************************************************************/
package com.tsc9526.monalisa.tools.servlet;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import java.util.zip.GZIPInputStream;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.tsc9526.monalisa.tools.clazz.MelpClass;
import com.tsc9526.monalisa.tools.datatable.DataMap;
import com.tsc9526.monalisa.tools.io.MelpFile;
import com.tsc9526.monalisa.tools.misc.MelpException;
/**
*
* @author zzg.zhou([email protected])
*/
public class MelpServlet {
private MelpServlet(){}
/**
* Webroot path : /example
* Servlet path : /dbs
* Request path : /example/dbs/xxx/yyy...
*
* return: xxx/yyy...
*
* @param request HttpServletRequest
* @return path without servlet content path.
*/
public static String getActionPath(HttpServletRequest request){
String uri = request.getRequestURI();
String prefix = request.getContextPath();
if(prefix==null){
prefix="";
}
prefix += request.getServletPath();
String pathRequest = uri.substring(prefix.length());
if (pathRequest.endsWith("/") && pathRequest.length() > 1) {
pathRequest = pathRequest.substring(0, pathRequest.length() - 1);
}
if (pathRequest.startsWith("/")) {
pathRequest = pathRequest.substring(1);
}
try {
pathRequest = URLDecoder.decode(pathRequest, "utf-8");
return pathRequest;
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
/**
*
* retrieve attributes in the following order (ignore the case of the key):
*
* 1. request.getParameter()
* 2. request.getAttribute()
* 3. request.getSession().getAttribute()
* 4. request.getServletContext().getAttribute()
*
* @param request the servlet request
* @return data map
*/
public static DataMap toDataMapAll(HttpServletRequest request){
DataMap m=new DataMap();
m.putAll(toDataMapAttrs(request));
m.putAll(toDataMapParas(request));
return m;
}
/**
* retrieve parameters from request.getParameter (ignore the case of the key).
* @param request the servlet request
* @return data map (ignore the case of the key)
*/
public static DataMap toDataMapParas(HttpServletRequest request){
DataMap m=new DataMap();
Map rs = request.getParameterMap();
for(Map.Entry entry: rs.entrySet()) {
String[] vs=entry.getValue();
if(vs.length==1){
m.put(entry.getKey(), vs[0]);
}else{
m.put(entry.getKey(), vs);
}
}
return m;
}
/**
*
* retrieve attributes in the following order (ignore the case of the key):
*
* 1. request.getAttribute()
* 2. request.getSession().getAttribute()
* 3. request.getServletContext().getAttribute()
*
* @param request the servlet request
* @return data map (ignore the case of the key)
*/
public static DataMap toDataMapAttrs(HttpServletRequest request){
DataMap m=new DataMap();
ServletContext sc=request.getServletContext();
Enumeration es=sc.getAttributeNames();
while(es.hasMoreElements()){
String name = es.nextElement();
Object value = sc.getAttribute(name);
m.put(name,value);
}
HttpSession session=request.getSession();
es=session.getAttributeNames();
while(es.hasMoreElements()){
String name = es.nextElement();
Object value = session.getAttribute(name);
m.put(name,value);
}
es=request.getAttributeNames();
while(es.hasMoreElements()){
String name = es.nextElement();
Object value = request.getAttribute(name);
m.put(name,value);
}
return m;
}
public static List parseArrays(T targetTemplate, javax.servlet.ServletRequest data, String... mappings) {
return MelpClass.parseArrays(targetTemplate, data, mappings);
}
public static String getBodyString(HttpServletRequest request,String ...charset)throws IOException{
byte[] bytes=getBodyBytes(request);
String cs= charset.length>0 ?charset[0] : "utf-8";
return new String(bytes,cs);
}
public static byte[] getBodyBytes(HttpServletRequest request)throws IOException{
int size = request.getContentLength();
if(size<=0){
return new byte[0];
}
InputStream is = request.getInputStream();
byte[] reqBodyBytes = MelpFile.readBytes(is, size);
String encoding=request.getHeader("Content-Encoding");
if(encoding!=null && encoding.indexOf("gzip")>=0){
GZIPInputStream gzip=new GZIPInputStream(new ByteArrayInputStream(reqBodyBytes));
ByteArrayOutputStream bos=new ByteArrayOutputStream();
byte[] buf=new byte[64*1024];
int len=gzip.read(buf);
while(len>0){
bos.write(buf,0,len);
len=gzip.read(buf);
}
return bos.toByteArray();
}else{
return reqBodyBytes;
}
}
public static String getRequestRealIp(HttpServletRequest request) {
String ip = null;
String[] ip_headers = new String[] {
"x-forwarded-for",
"X-Forwarded-For",
"HTTP_X_FORWARDED_FOR",
"Proxy-Client-IP",
"WL-Proxy-Client-IP",
"HTTP_CLIENT_IP"
};
for(int i=0;ip==null && i 0) {
ip = ip.substring(0, p);
}
return ip;
}
public static String getContextName(){
ClassLoader loader=MelpServlet.class.getClassLoader();
try{
//org.apache.catalina.loader.WebappClassLoader
Method gcn=loader.getClass().getMethod("getContextName");
return (String)gcn.invoke(loader);
}catch(Exception e){
return MelpException.throwRuntimeException(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy