com.ibm.as400.util.html.URLParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: URLParser.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2001 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.util.html;
import java.util.Properties;
import java.util.StringTokenizer;
import java.beans.PropertyVetoException;
import javax.servlet.http.HttpServletRequest; // @B1A
import com.ibm.as400.util.servlet.ServletHyperlink;
import com.ibm.as400.access.Trace;
/**
* The URLParser class parses a URL string for the URI, properties, and reference (also known as the "anchor").
* The reference is indicated by the sharp sign character "#" followed by more characters. For example,
*
* http://www.toolbox.com/index.html#answer1
*
*
* The reference indicates that after the specified resource is retrieved, the application is specifically interested
* in that part of the document that has the tag answer1 attached to it.
*
*
For example, the following URL string can be parsed into its individual components:
*
* http://myWebSite.com/servlet/myServlet#2043562?parm1="/library/test1#partA"
*
*
* Here are the individual pieces of the URL:
*
* URL: http://myWebSite.com/servlet/myServlet#2043562?parm1="/library/test1#partA"
* URI: http://myWebSite.com/servlet/myServlet
* Reference: 2043562
* Parameter: {parm1="/library/test1#partA"}
*
**/
public class URLParser
{
private static final String copyright = "Copyright (C) 1997-2001 International Business Machines Corporation and others.";
private String url_;
private String uri_;
private String reference_;
private Properties parameters_;
/**
* Constructs a URLParser object with the specified url.
*
* @param url The url to parse.
**/
public URLParser(String url)
{
if (url == null)
throw new NullPointerException("url");
url_ = url;
parse(url);
}
/**
* Returns the URL.
* @return The URL.
**/
public String getURL()
{
return url_;
}
/**
* Returns the URI.
* @return The URI.
**/
public String getURI()
{
return uri_;
}
/* @B1A
According to the JSDK, HttpServletRequest.getServletPath() should
return the path to the servlet as a root relative path so that it
can be used to generate self-referencing URLs. This is equivalent
to the CGI environment variable SCRIPT_NAME. However, some webservers
only return the servlet name preceded by a slash (/) when your
appliation server has a path other than slash (/) configured.
(Note that the only application server that can have slash (/)
for a path is the default application server.)
request.getServletPath();
should return: /servlet/name vs. /name
What follows is a circumvention to accomplish the same thing.
The following code strips the path information from the
request URI.
*/
/**
* Returns the URI from the specified request.
*
* @param request The HttpServletRequest.
*
* @return The URI.
**/
public static String getURI(HttpServletRequest request) // @B1A
{ // @B1A
if (request == null) // @B1A
throw new NullPointerException("request"); // @B1A
// @B1A
String uri = request.getRequestURI(); // @B1A
// @B1A
String pathInfo = request.getPathInfo(); // @B1A
// @B1A
if (pathInfo != null) // @B1A
uri = uri.substring( 0, uri.lastIndexOf(pathInfo)); // @B1A
// @B1A
return uri; // @B1A
} // @B1A
/**
* Returns the reference, also known as the "anchor".
* @return The reference.
**/
public String getReference()
{
return reference_;
}
/**
* Returns the parameters.
* @return The parameters.
**/
public Properties getParameters()
{
return parameters_;
}
/**
* Returns the HTMLHyperlink.
* @param text
* @return The HTMLHyperlink.
**/
public HTMLHyperlink getHTMLHyperlink(String text)
{
if (text == null)
throw new NullPointerException("text");
return fillHyperlink(new HTMLHyperlink(), text);
}
/**
* Returns the ServletHyperlink.
* @param text
* @return The ServletHyperlink.
**/
public ServletHyperlink getServletHyperlink(String text)
{
if (text == null)
throw new NullPointerException("text");
return(ServletHyperlink)fillHyperlink(new ServletHyperlink(), text);
}
/**
* Fills in the HTMLHyperlink with the uri, bookmarks, and properties
* if they exist.
**/
private HTMLHyperlink fillHyperlink(HTMLHyperlink link, String text)
{
try
{
if (reference_ == null)
link.setLink(uri_);
else
link.setLink(uri_ + "#" + reference_);
if (parameters_ != null)
link.setProperties(parameters_);
link.setText(text);
}
catch (PropertyVetoException e)
{ /* Ignore */
}
return link;
}
/**
* Parse out the uri, reference or anchor, and properties from the url.
**/
private void parse(String url)
{
//@B2D
int index = url.indexOf("?");
String parms;
// first parse out the parameters from the URI
if (index != -1)
{
uri_ = url.substring(0, index);
parms = url.substring(index+1);
}
else
{
uri_ = url;
parms = null;
}
// now parse out the reference or anchor target
index = uri_.indexOf("#");
if (index != -1)
{
reference_ = uri_.substring(index+1);
uri_ = uri_.substring(0, index);
}
else
{
reference_ = null;
}
// then parse the parameters
if (parms != null)
{
parameters_ = new Properties();
StringTokenizer st = new StringTokenizer(parms, "&");
while (st.hasMoreTokens())
{
String parm = st.nextToken();
index = parm.indexOf("=");
String key;
String value;
if (index != -1)
{
key = parm.substring(0, index);
value = parm.substring(index+1);
}
else
{
key = parm;
value = "";
}
parameters_.put(key, value);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy