Package railo.runtime.tag

Source Code of railo.runtime.tag.Location

package railo.runtime.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import railo.commons.lang.StringUtil;
import railo.commons.net.HTTPUtil;
import railo.runtime.exp.Abort;
import railo.runtime.exp.ApplicationException;
import railo.runtime.exp.NativeException;
import railo.runtime.exp.PageException;
import railo.runtime.ext.tag.TagImpl;
import railo.runtime.listener.ApplicationContext;
import railo.runtime.op.Caster;


public final class Location extends TagImpl {

  /** Yes or No. clientManagement must be enabled. Yes appends client variable
  **     information to the URL you specify in the url. */
  private boolean addtoken=true;

  /** The URL of the HTML file or CFML page to open. */
  private String url="";
 
  private int statuscode=302;
 

  @Override
  public void release()  {
    super.release();
    addtoken=true;
    url="";
    statuscode=302;
  }

  /**
   * @param statuscode the statuscode to set
   * @throws ApplicationException
   */
  public void setStatuscode(double statuscode) throws ApplicationException {
    int sc=(int) statuscode;
    if(sc<300 || sc>307)
      throw new ApplicationException("invalid value for attribute statuscode ["+Caster.toString(statuscode)+"]",
          "attribute must have one of the folloing values [300|301|302|303|304|305|307]");
     
    this.statuscode = sc;
  }


  /** set the value addtoken
  *  Yes or No. clientManagement must be enabled. Yes appends client variable
  *     information to the URL you specify in the url.
  * @param addtoken value to set
  **/
  public void setAddtoken(boolean addtoken)  {
    this.addtoken=addtoken;
  }

  /** set the value url
  *  The URL of the HTML file or CFML page to open.
  * @param url value to set
   * @throws ApplicationException
  **/
  public void setUrl(String url) throws ApplicationException  {
    this.url=url.trim();
    if(this.url.length()==0) throw new ApplicationException("invalid url [empty string] for attribute url");
    if(StringUtil.hasLineFeed(url)) throw new ApplicationException("invalid url ["+url+"] for attribute url, carriage-return or line-feed inside the url are not allowed");
  }


  @Override
  public int doStartTag() throws PageException  {
    try {
      pageContext.getOut().clear();
    } catch (IOException e) {
      throw Caster.toPageException(e);
    }
    HttpServletResponse rsp = pageContext. getHttpServletResponse();
   
    url=HTTPUtil.encode(url);
   
    // add token
    if(addtoken && needId()) {
      String[] arr=url.split("\\?");
     
      // only string_name
      if(arr.length==1) {
        url+="?"+pageContext.getURLToken();
      }
      // script_name and query_string
      else if(arr.length>1) {
        url=arr[0]+"?"+pageContext.getURLToken();
        for(int i=1;i<arr.length;i++)url+="&"+arr[i];
      }
      url=rsp.encodeRedirectURL(url)
    }
   
    rsp.setHeader("Connection", "close"); // IE unter IIS6, Win2K3 und Resin
    rsp.setStatus(statuscode);
    rsp.setHeader("location", url);
   
   
    try {
      pageContext.forceWrite("<html>\n<head>\n\t<title>Document Moved</title>\n");
      //pageContext.forceWrite("\t<script>window.location='"+JSStringFormat.invoke(url)+"';</script>\n");
      pageContext.forceWrite("</head>\n<body>\n\t<h1>Object Moved</h1>\n\t     <a HREF=\""+url+"\">here</a>\n");
      pageContext.forceWrite("</body>\n</html>");
    } catch (IOException e) {
      throw new NativeException(e);
    }
        if(pageContext.getConfig().debug())pageContext.getDebugger().setOutput(false);
    throw new Abort(Abort.SCOPE_REQUEST);
  }
 
 


  private boolean needId() {
    ApplicationContext ac = pageContext.getApplicationContext();
    return ac.isSetClientManagement() || ac.isSetSessionManagement();
  }

  @Override
  public int doEndTag()  {
    return EVAL_PAGE;
  }
}
TOP

Related Classes of railo.runtime.tag.Location

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.