📄 webutil.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.util;
import java.io.*;
import java.math.*;
import java.net.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import java.util.logging.*;
import javax.mail.internet.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.ecs.*;
import org.apache.ecs.xhtml.*;
import org.compiere.model.*;
/**
* Servlet Utilities
*
* @author Jorg Janke
* @version $Id: WebUtil.java,v 1.12 2005/10/01 23:56:56 jjanke Exp $
*/
public final class WebUtil
{
/** Static Logger */
private static CLogger log = CLogger.getCLogger (WebUtil.class);
/**
* Create Timeout Message
*
* @param request request
* @param response response
* @param servlet servlet
* @param message - optional message
* @throws ServletException
* @throws IOException
*/
public static void createTimeoutPage (HttpServletRequest request, HttpServletResponse response,
HttpServlet servlet, String message) throws ServletException, IOException
{
log.info(message);
WebSessionCtx wsc = WebSessionCtx.get(request);
String windowTitle = "Timeout";
if (wsc != null)
windowTitle = Msg.getMsg(wsc.ctx, "Timeout");
WebDoc doc = WebDoc.create (windowTitle);
// Body
body body = doc.getBody();
// optional message
if (message != null && message.length() > 0)
body.addElement(new p(message, AlignType.CENTER));
// login button
body.addElement(getLoginButton(wsc == null ? null : wsc.ctx));
//
body.addElement(new hr());
body.addElement(new small(servlet.getClass().getName()));
// fini
createResponse (request, response, servlet, null, doc, false);
} // createTimeoutPage
/**
* Create Error Message
*
* @param request request
* @param response response
* @param servlet servlet
* @param message message
* @throws ServletException
* @throws IOException
*/
public static void createErrorPage (HttpServletRequest request, HttpServletResponse response,
HttpServlet servlet, String message)
throws ServletException, IOException
{
log.info( message);
WebSessionCtx wsc = WebSessionCtx.get(request);
String windowTitle = "Error";
if (wsc != null)
windowTitle = Msg.getMsg(wsc.ctx, "Error");
if (message != null)
windowTitle += ": " + message;
WebDoc doc = WebDoc.create (windowTitle);
// Body
body b = doc.getBody();
b.addElement(new p(servlet.getServletName(), AlignType.CENTER));
b.addElement(new br());
// fini
createResponse (request, response, servlet, null, doc, true);
} // createErrorPage
/**
* Create Exit Page "Log-off".
* <p>
* - End Session
* - Go to start page (e.g. /compiere/index.html)
*
* @param request request
* @param response response
* @param servlet servlet
* @param ctx context
* @param AD_Message messahe
* @throws ServletException
* @throws IOException
*/
public static void createLoginPage (HttpServletRequest request, HttpServletResponse response,
HttpServlet servlet, Properties ctx, String AD_Message) throws ServletException, IOException
{
request.getSession().invalidate();
String url = WebEnv.getBaseDirectory("index.html");
//
WebDoc doc = null;
if (ctx != null && AD_Message != null && !AD_Message.equals(""))
doc = WebDoc.create (Msg.getMsg(ctx, AD_Message));
else if (AD_Message != null)
doc = WebDoc.create (AD_Message);
else
doc = WebDoc.create (false);
script script = new script("window.top.location.replace('" + url + "');");
doc.getBody().addElement(script);
//
createResponse (request, response, servlet, null, doc, false);
} // createLoginPage
/**
* Create Login Button - replace Window
*
* @param ctx context
* @return Button
*/
public static button getLoginButton (Properties ctx)
{
String text = "Login";
if (ctx != null)
text = Msg.getMsg (ctx, "Login");
button button = new button();
button.setType("button").setName("Login").addElement(text);
StringBuffer cmd = new StringBuffer ("window.top.location.replace('");
cmd.append(WebEnv.getBaseDirectory("index.html"));
cmd.append("');");
button.setOnClick(cmd.toString());
return button;
} // getLoginButton
/**************************************************************************
* Get Cookie Properties
*
* @param request request
* @return Properties
*/
public static Properties getCookieProprties(HttpServletRequest request)
{
// Get Properties
Cookie[] cookies = request.getCookies();
if (cookies != null)
{
for (int i = 0; i < cookies.length; i++)
{
if (cookies[i].getName().equals(WebEnv.COOKIE_INFO))
return propertiesDecode(cookies[i].getValue());
}
}
return new Properties();
} // getProperties
/**
* Get String Parameter.
*
* @param request request
* @param parameter parameter
* @return string or null
*/
public static String getParameter (HttpServletRequest request, String parameter)
{
if (request == null || parameter == null)
return null;
String enc = request.getCharacterEncoding();
try
{
if (enc == null)
{
request.setCharacterEncoding(WebEnv.ENCODING);
enc = request.getCharacterEncoding();
}
}
catch (Exception e)
{
log.log(Level.SEVERE, "Set CharacterEncoding=" + WebEnv.ENCODING, e);
enc = request.getCharacterEncoding();
}
String data = request.getParameter(parameter);
if (data == null || data.length() == 0)
return data;
// Convert
if (enc != null && !WebEnv.ENCODING.equals(enc))
{
try
{
String dataEnc = new String(data.getBytes(enc), WebEnv.ENCODING);
log.log(Level.FINER, "Convert " + data + " (" + enc + ")-> "
+ dataEnc + " (" + WebEnv.ENCODING + ")");
data = dataEnc;
}
catch (Exception e)
{
log.log(Level.SEVERE, "Convert " + data + " (" + enc + ")->" + WebEnv.ENCODING);
}
}
// Convert � to character (JSTL input)
String inStr = data;
StringBuffer outStr = new StringBuffer();
int i = inStr.indexOf("&#");
while (i != -1)
{
outStr.append(inStr.substring(0, i)); // up to &#
inStr = inStr.substring(i+2, inStr.length()); // from &#
int j = inStr.indexOf(";"); // next ;
if (j < 0) // no second tag
{
inStr = "&#" + inStr;
break;
}
String token = inStr.substring(0, j);
try
{
int intToken = Integer.parseInt(token);
outStr.append((char)intToken); // replace context
}
catch (Exception e)
{
log.log(Level.SEVERE, "Token=" + token, e);
outStr.append("&#").append(token).append(";");
}
inStr = inStr.substring(j+1, inStr.length()); // from ;
i = inStr.indexOf("&#");
}
outStr.append(inStr); // add remainder
String retValue = outStr.toString();
/**
StringBuffer debug = new StringBuffer();
char[] cc = data.toCharArray();
for (int j = 0; j < cc.length; j++)
{
debug.append(cc[j]);
int iii = (int)cc[j];
debug.append("[").append(iii).append("]");
}
log.finest(parameter + "=" + data + " -> " + retValue + " == " + debug);
**/
log.finest(parameter + "=" + data + " -> " + retValue);
return retValue;
} // getParameter
/**
* Get integer Parameter - 0 if not defined.
*
* @param request request
* @param parameter parameter
* @return int result or 0
*/
public static int getParameterAsInt (HttpServletRequest request, String parameter)
{
if (request == null || parameter == null)
return 0;
String data = getParameter(request, parameter);
if (data == null || data.length() == 0)
return 0;
try
{
return Integer.parseInt(data);
}
catch (Exception e)
{
log.warning (parameter + "=" + data + " - " + e);
}
return 0;
} // getParameterAsInt
/**
* Get numeric Parameter - 0 if not defined
*
* @param request request
* @param parameter parameter
* @return big decimal result or 0
*/
public static BigDecimal getParameterAsBD (HttpServletRequest request, String parameter)
{
if (request == null || parameter == null)
return Env.ZERO;
String data = getParameter(request, parameter);
if (data == null || data.length() == 0)
return Env.ZERO;
try
{
return new BigDecimal (data);
}
catch (Exception e)
{
}
try
{
DecimalFormat format = DisplayType.getNumberFormat(DisplayType.Number);
Object oo = format.parseObject(data);
if (oo instanceof BigDecimal)
return (BigDecimal)oo;
else if (oo instanceof Number)
return new BigDecimal (((Number)oo).doubleValue());
return new BigDecimal (oo.toString());
}
catch (Exception e)
{
log.fine(parameter + "=" + data + " - " + e);
}
return Env.ZERO;
} // getParameterAsBD
/**
* Get date Parameter - null if not defined.
* Date portion only
* @param request request
* @param parameter parameter
* @return timestamp result or null
*/
public static Timestamp getParameterAsDate (HttpServletRequest request,
String parameter)
{
return getParameterAsDate (request, parameter, null);
} // getParameterAsDate
/**
* Get date Parameter - null if not defined.
* Date portion only
* @param request request
* @param parameter parameter
* @param language optional language
* @return timestamp result or null
*/
public static Timestamp getParameterAsDate (HttpServletRequest request,
String parameter, Language language)
{
if (request == null || parameter == null)
return null;
String data = getParameter(request, parameter);
if (data == null || data.length() == 0)
return null;
// Language Date Format
if (language != null)
{
try
{
DateFormat format = DisplayType.getDateFormat(DisplayType.Date, language);
java.util.Date date = format.parse(data);
if (date != null)
return new Timestamp (date.getTime());
}
catch (Exception e)
{
}
}
// Default Simple Date Format
try
{
SimpleDateFormat format = DisplayType.getDateFormat(DisplayType.Date);
java.util.Date date = format.parse(data);
if (date != null)
return new Timestamp (date.getTime());
}
catch (Exception e)
{
}
// JDBC Format
try
{
return Timestamp.valueOf(data);
}
catch (Exception e)
{
}
log.warning(parameter + " - cannot parse: " + data);
return null;
} // getParameterAsDate
/**
* Get boolean Parameter.
* @param request request
* @param parameter parameter
* @return true if found
*/
public static boolean getParameterAsBoolean (HttpServletRequest request,
String parameter)
{
return getParameterAsBoolean(request, parameter, null);
} // getParameterAsBoolean
/**
* Get boolean Parameter.
* @param request request
* @param parameter parameter
* @param expected optional expected value
* @return true if found and if optional value matches
*/
public static boolean getParameterAsBoolean (HttpServletRequest request,
String parameter, String expected)
{
if (request == null || parameter == null)
return false;
String data = getParameter(request, parameter);
if (data == null || data.length() == 0)
return false;
// Ignore actual value
if (expected == null)
return true;
//
return expected.equalsIgnoreCase(data);
} // getParameterAsBoolean
/**************************************************************************
* Create Standard Response Header with optional Cookie and print document.
* D:\j2sdk1.4.0\docs\guide\intl\encoding.doc.html
*
* @param request request
* @param response response
* @param servlet servlet
* @param cookieProperties cookie properties
* @param doc doc
* @param debug debug
* @throws IOException
*/
public static void createResponse (HttpServletRequest request, HttpServletResponse response,
HttpServlet servlet, Properties cookieProperties, WebDoc doc, boolean debug) throws IOException
{
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/html; charset=UTF-8");
//
// Update Cookie - overwrite
if (cookieProperties != null)
{
Cookie cookie = new Cookie (WebEnv.COOKIE_INFO, propertiesEncode(cookieProperties));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -