📄 scriptaction.java
字号:
* parameters *@param manager The BSF manager to declare new parameters in *@return The name of the script to execute *@exception Exception If something goes wrong */ protected String parseScriptName(String url, BSFManager manager) throws Exception { if (LOG.isDebugEnabled()) { LOG.debug("Parsing " + url); } String name = null; if (url != null) { String[] parsed = split(url, "?"); name = parsed[0]; if (parsed.length == 2) { if (LOG.isDebugEnabled()) { LOG.debug("Found a query string"); } String[] args = split(parsed[1], "&"); for (int x = 0; x < args.length; x++) { String[] param = split(args[x], "="); Object o = manager.lookupBean(param[0]); if (o != null) { LOG.warn("BSF variable " + param[0] + " already exists"); param[0] = "_" + param[0]; } manager.declareBean(param[0], param[1], String.class); if (LOG.isDebugEnabled()) { LOG.debug("Registering param " + param[0] + " with value " + param[1]); } } } else { if (LOG.isDebugEnabled()) { LOG.debug("No query string:" + parsed.length); } } } return name; } /** * Loads the script from cache if possible. Reloads if the script has been * recently modified. * *@param name The name of the script *@param context The servlet context *@return The script object */ protected Script loadScript(String name, ServletContext context) { Script script = (Script) scripts.get(name); if (script == null) { script = new Script(); script.file = new File(context.getRealPath(name)); try { script.lang = BSFManager.getLangFromFilename(script.file.getName()); } catch (BSFException ex) { LOG.warn(ex, ex); } } boolean reloadScript = false; long scriptLastModified = script.file.lastModified(); if (scriptLastModified > script.timeLastLoaded) { if (LOG.isDebugEnabled()) { LOG.debug("Loading updated or new script: " + script.file.getName()); } reloadScript = true; } if (reloadScript || script.string == null) { synchronized (this) { script.timeLastLoaded = System.currentTimeMillis(); FileReader reader = null; try { reader = new FileReader(script.file); script.string = IOUtils.getStringFromReader(reader); } catch (IOException ex) { LOG.error("Unable to load script: " + script.file, ex); } finally { if (reader != null) { try { reader.close(); } catch (IOException ex) { LOG.debug(ex, ex); } } } } } return script; } /** * Loads and initializes the filters. * *@param props The properties defining the filters *@return An array of the loaded filters */ protected static BSFManagerFilter[] loadFilters(Properties props) { ArrayList list = new ArrayList(); for (Enumeration e = props.propertyNames(); e.hasMoreElements();) { String prop = (String) e.nextElement(); if (prop.startsWith(FILTERS_BASE) && prop.endsWith("class")) { String type = prop.substring(FILTERS_BASE.length(), prop.indexOf(".", FILTERS_BASE.length())); String claz = props.getProperty(prop); try { Class cls = Class.forName(claz); BSFManagerFilter f = (BSFManagerFilter) cls.newInstance(); f.init(type, props); list.add(f); if (LOG.isInfoEnabled()) { LOG.info("Loaded " + type + " filter: " + claz); } } catch (Exception ex) { LOG.error("Unable to load " + type + " filter: " + claz); } } } BSFManagerFilter[] filters = new BSFManagerFilter[list.size()]; filters = (BSFManagerFilter[]) list.toArray(filters); return filters; } /** * Splits a line with the given delimiter. * *@param line The line to split *@param delimiter The string to split with *@return An array of substrings */ protected static String[] split(String line, String delimiter) { if (line == null || "".equals(line)) { return new String[]{}; } List lst = new ArrayList(); for (Enumeration e = new StringTokenizer(line, delimiter); e.hasMoreElements();) { lst.add(e.nextElement()); } String[] ret = new String[lst.size()]; return (String[]) lst.toArray(ret); } // These methods seem necessary as some scripting engines are not able to // access Action's protected methods. Ugly? yes... any suggestions? /** * Saves a token. * *@param req The request object */ public void saveToken(HttpServletRequest req) { super.saveToken(req); } /** * Checks to see if the request is cancelled. * *@param req The request object *@return True if cancelled */ public boolean isCancelled(HttpServletRequest req) { return super.isCancelled(req); } /** * Checks to see if the token is valid. * *@param req The request object *@return True if valid */ public boolean isTokenValid(HttpServletRequest req) { return super.isTokenValid(req); } /** * Resets the token. * *@param req The request object */ public void resetToken(HttpServletRequest req) { super.resetToken(req); } /** * Gets the locale. * *@param req The request object *@return The locale value */ public Locale getLocale(HttpServletRequest req) { return super.getLocale(req); } /** * Saves the messages to the request. * *@param req The request object *@param mes The action messages */ public void saveMessages(HttpServletRequest req, ActionMessages mes) { super.saveMessages(req, mes); } /** * Saves the errors to the request. * *@param req The request object *@param errs The action errors *@deprecated Use saveErrors(HttpServletRequest, ActionMessages) instead. * This will be removed after Struts 1.2. */ public void saveErrors(HttpServletRequest req, ActionErrors errs) { super.saveErrors(req, errs); } /** Represents a saved script. */ class Script { /** The script file. */ public File file; /** The language the script is in. */ public String lang = null; /** The time when the script was last used. */ public long timeLastLoaded = 0; /** The contents of the script file. */ public String string = null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -