diff --git a/src/fr/devinsy/kiss4web/SimpleServletDispatcher.java b/src/fr/devinsy/kiss4web/SimpleServletDispatcher.java
index 929ccaa..c32eb48 100755
--- a/src/fr/devinsy/kiss4web/SimpleServletDispatcher.java
+++ b/src/fr/devinsy/kiss4web/SimpleServletDispatcher.java
@@ -1,12 +1,11 @@
/**
- * @author Christian Momon, June 2008.
- * This file is free software under the terms of the GNU Library General Public License
- * as published by the Free Software Foundation version 2 or any later version.
+ * @author Christian Momon, June 2008. This file is free software under the
+ * terms of the GNU Library General Public License as published by the
+ * Free Software Foundation version 2 or any later version.
*/
package fr.devinsy.kiss4web;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -22,28 +21,151 @@ import javax.servlet.http.HttpServletResponse;
import fr.devinsy.util.StringList;
-
/**
*
*/
public class SimpleServletDispatcher extends HttpServlet
{
private static final long serialVersionUID = -3471226305721330069L;
- static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger (ServletDispatcher.class);
+ static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(ServletDispatcher.class);
static final protected Pattern SHORT_REWRITED_URL_CLASS = Pattern.compile("^([^-]+)-.+\\.xhtml$");
static final protected Pattern SHORT_REWRITED_URL_PARAMETERS = Pattern.compile("^[^-]+-(.+)\\.xhtml$");
static final protected Pattern LONG_REWRITED_URL_CLASS = Pattern.compile("^([^-]+)-/.*$");
- //static final protected Pattern LONG_REWRITED_URL_PARAMETERS = Pattern.compile("^.+-/(.)+*$");
+ // static final protected Pattern LONG_REWRITED_URL_PARAMETERS =
+ // Pattern.compile("^.+-/(.)+*$");
static final protected Pattern REWRITE_PARAMETER = Pattern.compile("[^%\\w\\d]");
protected String webclassesRootPath;
-
+ /**
+ * "Code can be shortest, speedest and memory smallest, but not the three in same time, only two"
+ * , unknow citation.
+ *
+ * Note: characters array avalaible here
+ * http://fr.wikipedia.org/wiki/Table_des_caract
+ * %C3%A8res_Unicode_%280000-0FFF%29
+ */
+ static protected char NONE = (char) 0;
+
+ static protected int[] rewritingParameterMapping = {
+ /* 00 */NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
+ /* 10 */NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
+ /* 20 */'-', NONE, NONE, '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-',
+ /* 30 */'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '-', '-', '-', '-', '-',
+ /* 40 */'\u0040', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+ /* 50 */'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '-', '-', '-', '-', '-',
+ /* 60 */'-', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F',
+ /* 70 */'\u0070', '\u0071', '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '-', '-',
+ /* 80 */NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
+ /* 90 */NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
+ /* A0 */'\u00A0', '\u00A1', '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7', '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00AF',
+ /* B0 */'-', '\u00B1', '\u00B2', '\u00B3', '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9', '\u00BA', '\u00BB', '\u00BC', '\u00BD',
+ '\u00BE', '\u00BF',
+ /* C0 */'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i',
+ /* D0 */'\u00D0', '\u00D1', 'o', 'o', 'o', 'o', 'o', 'o', '\u00D8', 'u', 'u', 'u', 'u', 'y', '\u00DE', '\u00DF',
+ /* E0 */'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i',
+ /* F0 */'o', 'n', 'o', 'o', 'o', 'o', 'o', '\u00F7', '-', 'u', 'u', 'u', 'u', 'y', '-', 'y' };
+
/**
*
*/
- public void init () throws ServletException
+ @Override
+ public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException
+ {
+ doIt(request, response);
+ }
+
+ /**
+ *
+ *
+ */
+ public void doIt(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException
+ {
+ logger.info("==================================================");
+ logger.info("getContextPath=[" + request.getContextPath() + "]");
+ logger.info("getPathInfo=[" + request.getPathInfo() + "]");
+ logger.info("getPathTranslated=[" + request.getPathTranslated() + "]");
+ logger.info("getQueryString=[" + request.getQueryString() + "]");
+ logger.info("getRequestURI=[" + request.getRequestURI() + "]");
+ logger.info("getRequestURL=[" + request.getRequestURL() + "]");
+ logger.info("getServletPath=[" + request.getServletPath() + "]");
+
+ //
+ /*
+ * In past, possibility to use the servlet path was enable. It is too
+ * complexe, not kiss mind. String path; if (request.getPathInfo() ==
+ * null) { // web.xml url-pattern= *.xhtml path =
+ * request.getServletPath(); } else { // web.xml url-pattern = /* path =
+ * request.getPathInfo(); }
+ */
+ // String path = request.getRequestURI();
+ String path = request.getPathInfo();
+
+ if ((!path.endsWith("/")) && (!path.endsWith(".xhtml")) && (!path.contains("-/")))
+ {
+ // path = getServletContext().getRealPath("/") +
+ // request.getRequestURI();
+ path = getServletContext().getRealPath("/") + request.getPathInfo();
+
+ returnInlineFile(response, new File(path), getServletContext().getMimeType(path));
+ logger.info("File returned directly [" + path + "] with mimetype [" + getServletContext().getMimeType(path) + "].");
+ }
+ else
+ {
+ String className = pathInfoToClassName(path, this.webclassesRootPath);
+ logger.info("className=[" + className + "]");
+
+ HttpServlet servlet = instanciateServlet(className);
+
+ // servlet.getServletContext().setAttribute(arg0, arg1);
+
+ if (servlet == null)
+ {
+ response.setContentType("text/html");
+ PrintWriter out = response.getWriter();
+
+ out.println("
");
+ out.println("Unknow page.");
+ out.println("");
+
+ out.close();
+ }
+ else if (isAuthorized(request, response))
+ {
+ servlet.init(this.getServletConfig());
+ servlet.service(request, response);
+ }
+ else
+ {
+ /*
+ * TODO // response.setContentType ("text/html"); PrintWriter
+ * out = response.getWriter();
+ *
+ * out.println (""); out.println
+ * ("Not authorized page."); out.println ("");
+ */
+ }
+ }
+ }
+
+ /**
+ *
+ */
+ @Override
+ public void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException
+ {
+ doIt(request, response);
+ }
+
+ /**
+ *
+ */
+ @Override
+ public void init() throws ServletException
{
super.init();
this.webclassesRootPath = getInitParameter("webClassesRootPath");
@@ -55,31 +177,104 @@ public class SimpleServletDispatcher extends HttpServlet
try
{
System.out.println("Log configuration found (" + logFilepathname + "), will use it.");
- org.apache.log4j.PropertyConfigurator.configure (getServletContext().getRealPath("/") + logFilepathname);
+ org.apache.log4j.PropertyConfigurator.configure(getServletContext().getRealPath("/") + logFilepathname);
}
catch (Exception exception)
{
System.out.println("Log configuration FILE NOT FOUND (" + logFilepathname + "), use of the basic configurator.");
org.apache.log4j.BasicConfigurator.configure();
}
-
+
logger = org.apache.log4j.Logger.getLogger(this.getClass());
logger.info("Log initialization done.");
}
}
+ /**
+ *
+ */
+ public boolean isAuthorized(final HttpServletRequest request, final HttpServletResponse response)
+ {
+ boolean result;
+
+ result = true;
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ static public HttpServlet instanciateServlet(final String className)
+ {
+ HttpServlet result;
+
+ Class servletClass = null;
+ try
+ {
+ servletClass = (Class) Class.forName(className);
+ }
+ catch (java.lang.ClassNotFoundException exception)
+ {
+ result = null;
+ }
+
+ logger.info("class=" + servletClass);
+
+ if (servletClass == null)
+ {
+ result = null;
+ logger.error("Unknow page: (" + className + ")");
+ }
+ else
+ {
+ try
+ {
+ result = servletClass.newInstance();
+ }
+ catch (java.lang.InstantiationException exception)
+ {
+ logger.error("Can't instanciate servlet (" + className + ")");
+ result = null;
+ }
+ catch (java.lang.IllegalAccessException exception)
+ {
+ logger.error("(2) Can't instanciate servlet (" + className + ")");
+ result = null;
+ }
+ }
+
+ //
+ return (result);
+ }
+
+ /**
+ * Extract values from a path. Example: "/article-/123/doors/open.xhtml" =>
+ * "123", "doors" and "open".
+ */
+ static public String[] longRewritedUrlParameters(final String path)
+ {
+ String[] result;
+
+ result = path.substring(path.indexOf("-/") + 2).split("/");
+
+ //
+ return (result);
+ }
/**
* Convert a path in a class name, using easy conventions.
*
- * "/" => "Index_xhtml"
- * "/good/" => "good.Good_xhtml"
- * "/good/morning.xhtml" => "good.Morning_xhtml"
- * "/good/morning_girl.xhtml" => "good.Morning_girl_xhtml"
- * "/good/morning-123.xhtml" => "good.Morning_xhtml" ('123' is detected as a parameter, it will be decoded in the class called later).
- * "/good/morning-/12/toto.jpg" => "good.Morning" ('12' and 'toto.jpg" are detected as a parameter, they will be decoded in the class called later).
+ * "/" => "Index_xhtml" "/good/" => "good.Good_xhtml" "/good/morning.xhtml"
+ * => "good.Morning_xhtml" "/good/morning_girl.xhtml" =>
+ * "good.Morning_girl_xhtml" "/good/morning-123.xhtml" =>
+ * "good.Morning_xhtml" ('123' is detected as a parameter, it will be
+ * decoded in the class called later). "/good/morning-/12/toto.jpg" =>
+ * "good.Morning" ('12' and 'toto.jpg" are detected as a parameter, they
+ * will be decoded in the class called later).
*/
- static public String pathInfoToClassName (String pathInfo)
+ static public String pathInfoToClassName(final String pathInfo)
{
String result;
@@ -89,45 +284,47 @@ public class SimpleServletDispatcher extends HttpServlet
}
else
{
- if ( pathInfo.equals ("/"))
+ if (pathInfo.equals("/"))
{
result = "Index_xhtml";
}
else
{
int keywordIndex = pathInfo.lastIndexOf("-/");
-
+
if (keywordIndex != -1)
{
// Long rewrited URL case.
String[] tokens = pathInfo.substring(0, keywordIndex).split("/");
-
+
StringList name = new StringList();
- // Note: as pathInfo starts always with a '/', the first good token index is 1.
- for (int tokenCounter = 1; tokenCounter < tokens.length - 1; tokenCounter++)
+ // Note: as pathInfo starts always with a '/', the first
+ // good token index is 1.
+ for (int tokenCounter = 1; tokenCounter < (tokens.length - 1); tokenCounter++)
{
- name.append (tokens[tokenCounter]);
- name.append ('.');
+ name.append(tokens[tokenCounter]);
+ name.append('.');
}
-
+
String lastToken = tokens[tokens.length - 1];
- name.append (lastToken.substring(0, 1).toUpperCase()).append (lastToken.substring(1).replace('.', '_'));
- result = name.toString ();
+ name.append(lastToken.substring(0, 1).toUpperCase()).append(lastToken.substring(1).replace('.', '_'));
+ result = name.toString();
}
else
{
- String[] tokens = pathInfo.split ("/");
-
+ String[] tokens = pathInfo.split("/");
+
StringList name = new StringList();
- // Note: as pathInfo starts always with a '/', the first good token index is 1.
- for (int tokenCounter = 1; tokenCounter < tokens.length - 1; tokenCounter++)
+ // Note: as pathInfo starts always with a '/', the first
+ // good token index is 1.
+ for (int tokenCounter = 1; tokenCounter < (tokens.length - 1); tokenCounter++)
{
- name.append (tokens[tokenCounter]);
- name.append ('.');
+ name.append(tokens[tokenCounter]);
+ name.append('.');
}
-
+
String lastToken = tokens[tokens.length - 1];
- if (pathInfo.endsWith ("/"))
+ if (pathInfo.endsWith("/"))
{
name.append(lastToken).append(".").append(lastToken.substring(0, 1).toUpperCase()).append(lastToken.substring(1)).append("_xhtml");
}
@@ -137,35 +334,35 @@ public class SimpleServletDispatcher extends HttpServlet
if (matcher.matches())
{
// Short rewrited URL case.
- //logger.debug("group 1=[" + matcher.group(1) + "]");
+ // logger.debug("group 1=[" + matcher.group(1) +
+ // "]");
lastToken = matcher.group(1) + ".xhtml";
}
-
- name.append (lastToken.substring(0, 1).toUpperCase()).append (lastToken.substring(1).replace('.', '_'));
+
+ name.append(lastToken.substring(0, 1).toUpperCase()).append(lastToken.substring(1).replace('.', '_'));
}
-
- result = name.toString ();
- logger.debug ("==>[" + tokens[tokens.length - 1] + "]");
+
+ result = name.toString();
+ logger.debug("==>[" + tokens[tokens.length - 1] + "]");
}
}
}
-
- logger.info ("[" + pathInfo + "] => [" + result + "]");
+
+ logger.info("[" + pathInfo + "] => [" + result + "]");
//
return (result);
}
-
/**
*
*/
- static public String pathInfoToClassName (String pathInfo, String prefix)
+ static public String pathInfoToClassName(final String pathInfo, final String prefix)
{
String result;
String className = pathInfoToClassName(pathInfo);
-
+
if (prefix == null)
{
result = className;
@@ -177,287 +374,168 @@ public class SimpleServletDispatcher extends HttpServlet
else
{
result = prefix + "." + className;
- }
-
- //
- return (result);
- }
-
-
- /**
- *
- */
- static public HttpServlet instanciateServlet (String className)
- {
- HttpServlet result;
-
- Class servletClass = null;
- try
- {
- servletClass = (Class) Class.forName (className);
- }
- catch (java.lang.ClassNotFoundException exception)
- {
- result = null;
- }
-
- logger.info ("class=" + servletClass);
-
- if (servletClass == null)
- {
- result = null;
- logger.error ("Unknow page: (" + className + ")");
- }
- else
- {
- try
- {
- result = servletClass.newInstance ();
- }
- catch (java.lang.InstantiationException exception)
- {
- logger.error ("Can't instanciate servlet (" + className + ")");
- result = null;
- }
- catch (java.lang.IllegalAccessException exception)
- {
- logger.error ("(2) Can't instanciate servlet (" + className + ")");
- result = null;
- }
}
//
return (result);
}
-
/**
*
*/
- public boolean isAuthorized(HttpServletRequest request, HttpServletResponse response)
- {
- boolean result;
-
- result = true;
-
- //
- return(result);
- }
-
-
- /**
- *
- */
- static public void returnInlineFile(HttpServletResponse response, File file, String mimeType) throws IOException
- {
- returnFile(response, file, mimeType, false);
- }
-
-
- /**
- *
- */
- static public void returnAttachmentFile(HttpServletResponse response, File file, String mimeType) throws IOException
+ static public void returnAttachmentFile(final HttpServletResponse response, final File file, final String mimeType) throws IOException
{
returnFile(response, file, mimeType, true);
}
-
-
+
/**
*
*/
- static public void returnFile(HttpServletResponse response, File file, String mimeType, boolean isAttachment) throws IOException
+ static public void returnFile(final HttpServletResponse response, final File file, final String mimeType, final boolean isAttachment) throws IOException
{
-
- if ((file == null) || (!file.exists()))
- {
- response.sendError(HttpServletResponse.SC_NOT_FOUND);
- }
- else
- {
- /*
- response.setContentType("application/" + extension);
- response.setContentLength((int) data.length);
- response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");
- response.flushBuffer();
+
+ if ((file == null) || (!file.exists()))
+ {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ }
+ else
+ {
+ /*
+ * response.setContentType("application/" + extension);
+ * response.setContentLength((int) data.length);
+ * response.setHeader("Content-Disposition"
+ * ,"attachment; filename=\"" + filename + "\"");
+ * response.flushBuffer();
*/
- response.reset();
- response.setContentType(mimeType);
- response.setContentLength((int) file.length());
- response.setHeader("Content-Disposition","inline; filename=\"" + file.getName()+ "\"");
- response.flushBuffer();
+ response.reset();
+ response.setContentType(mimeType);
+ response.setContentLength((int) file.length());
+ response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");
+ response.flushBuffer();
- ServletOutputStream out = response.getOutputStream();
-
- FileInputStream in = null;
- try // Only for the in.
- {
- byte[] buffer = new byte[64*1024];
+ ServletOutputStream out = response.getOutputStream();
- in = new FileInputStream(file);
- boolean ended = false;
- while (!ended)
- {
- int count = in.read(buffer);
-
- if (count == -1)
- {
- ended = true;
- }
- else
- {
- out.write(buffer, 0, count);
- }
- }
- out.flush();
- out.close();
- }
- catch (IOException exception)
- {
- response.sendError(HttpServletResponse.SC_PARTIAL_CONTENT);
- }
- finally
- {
- if (in != null)
- {
- in.close();
- }
- }
- }
- }
-
-
- /**
- *
- *
- */
- public void doIt (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
- {
- logger.info ("==================================================");
- logger.info ("getContextPath=[" + request.getContextPath () + "]");
- logger.info ("getPathInfo=[" + request.getPathInfo () + "]");
- logger.info ("getPathTranslated=[" + request.getPathTranslated () + "]");
- logger.info ("getQueryString=[" + request.getQueryString () + "]");
- logger.info ("getRequestURI=[" + request.getRequestURI () + "]");
- logger.info ("getRequestURL=[" + request.getRequestURL () + "]");
- logger.info ("getServletPath=[" + request.getServletPath () + "]");
-
-
- //
- /* In past, possibility to use the servlet path was enable. It is too complexe, not kiss mind.
- String path;
- if (request.getPathInfo() == null)
- {
- // web.xml url-pattern= *.xhtml
- path = request.getServletPath();
- }
- else
- {
- // web.xml url-pattern = /*
- path = request.getPathInfo();
- }
- */
- String path = request.getRequestURI();
-
- if ((!path.endsWith("/")) && (!path.endsWith(".xhtml")) && (!path.contains("-/")))
- {
- path = getServletContext ().getRealPath("/") + request.getRequestURI();
-
- returnInlineFile(response, new File(path), getServletContext().getMimeType(path));
- logger.info("File returned directly [" + path + "] with mimetype [" + getServletContext().getMimeType(path) + "].");
- }
- else
- {
- String className = pathInfoToClassName (path, this.webclassesRootPath);
- logger.info ("className=[" + className + "]");
-
- HttpServlet servlet = instanciateServlet (className);
-
- //servlet.getServletContext().setAttribute(arg0, arg1);
-
- if (servlet == null)
+ FileInputStream in = null;
+ try
+ // Only for the in.
{
- response.setContentType ("text/html");
- PrintWriter out = response.getWriter();
-
- out.println ("");
- out.println ("Unknow page.");
- out.println ("");
-
+ byte[] buffer = new byte[64 * 1024];
+
+ in = new FileInputStream(file);
+ boolean ended = false;
+ while (!ended)
+ {
+ int count = in.read(buffer);
+
+ if (count == -1)
+ {
+ ended = true;
+ }
+ else
+ {
+ out.write(buffer, 0, count);
+ }
+ }
+ out.flush();
out.close();
}
- else if (isAuthorized(request, response))
+ catch (IOException exception)
{
- servlet.init(this.getServletConfig());
- servlet.service(request, response);
+ response.sendError(HttpServletResponse.SC_PARTIAL_CONTENT);
}
- else
+ finally
{
- /*
- * TODO
- //
- response.setContentType ("text/html");
- PrintWriter out = response.getWriter();
-
- out.println ("");
- out.println ("Not authorized page.");
- out.println ("");
- */
+ if (in != null)
+ {
+ in.close();
+ }
}
}
}
-
/**
- * "Code can be shortest, speedest and memory smallest, but not the three in same time, only two", unknow citation.
*
- * Note: characters array avalaible here http://fr.wikipedia.org/wiki/Table_des_caract%C3%A8res_Unicode_%280000-0FFF%29
*/
- static protected char NONE = (char) 0;
- static protected int[] rewritingParameterMapping =
+ static public void returnInlineFile(final HttpServletResponse response, final File file, final String mimeType) throws IOException
{
- /* 00 */ NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE ,
- /* 10 */ NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE ,
- /* 20 */ '-' , NONE , NONE , '-' , '-' , '-' , '-' , '-' , '-' , '-' , '-' , '-' , '-' , '-' , '-' , '-' ,
- /* 30 */ '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '-' , '-' , '-' , '-' , '-' , '-' ,
- /* 40 */ '\u0040', 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' ,
- /* 50 */ 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' , '-' , '-' , '-' , '-' , '-' ,
- /* 60 */ '-' , '\u0061', '\u0062', '\u0063', '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E', '\u006F',
- /* 70 */ '\u0070', '\u0071', '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D', '-' , '-' ,
- /* 80 */ NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE ,
- /* 90 */ NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE , NONE ,
- /* A0 */ '\u00A0', '\u00A1', '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7', '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD', '\u00AE', '\u00AF',
- /* B0 */ '-' , '\u00B1', '\u00B2', '\u00B3', '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9', '\u00BA', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
- /* C0 */ 'a' , 'a' , 'a' , 'a' , 'a' , 'a' , 'a' , 'c' , 'e' , 'e' , 'e' , 'e' , 'i' , 'i' , 'i' , 'i' ,
- /* D0 */ '\u00D0', '\u00D1', 'o' , 'o' , 'o' , 'o' , 'o' , 'o' , '\u00D8', 'u' , 'u' , 'u' , 'u' , 'y' , '\u00DE', '\u00DF',
- /* E0 */ 'a' , 'a' , 'a' , 'a' , 'a' , 'a' , 'a' , 'c' , 'e' , 'e' , 'e' , 'e' , 'i' , 'i' , 'i' , 'i' ,
- /* F0 */ 'o' , 'n' , 'o' , 'o' , 'o' , 'o' , 'o' , '\u00F7', '-' , 'u' , 'u' , 'u' , 'u' , 'y' , '-' , 'y'
- };
+ returnFile(response, file, mimeType, false);
+ }
+
+ /**
+ *
+ */
+ static public String[] rewritedUrlParameters(final HttpServletRequest request)
+ {
+ String[] result;
+
+ result = longRewritedUrlParameters(request.getRequestURI());
+
+ //
+ return (result);
+ }
+
+ /**
+ * This method gives a way for a long rewriting URL format. Long as in REST.
+ *
+ * Sometimes, URL has to be rewrited because we need to put parameter in the
+ * page name.
+ *
+ * Example: "/good/give_file?id=123&filename=foo.jpg" =>
+ * rewriteShorturl("/good/give_file", "123", "foo.jpg"); =>
+ * "/good/give_file-/123/foo.jpg"
+ *
+ * Note: "-/" is used to indicate the start of parameters.
+ *
+ */
+ static public String rewriteLongUrl(final String uri, final String... parameters)
+ {
+ String result;
+
+ StringList string = new StringList();
+
+ string.append(uri).append("-");
+ if ((parameters == null) || (parameters.length == 0))
+ {
+ string.append("/");
+ }
+ else
+ {
+ for (String parameter : parameters)
+ {
+ string.append("/").append(parameter);
+ }
+ }
+
+ result = string.toString();
+
+ //
+ return (result);
+ }
-
/**
*
*
* @param parameter
* @return
*/
- static String rewriteParameter (String parameter)
+ static String rewriteParameter(final String parameter)
{
String result;
-
+
StringBuffer buffer = new StringBuffer(parameter.length());
-
+
char previousCar = NONE;
for (int charIndex = 0; charIndex < parameter.length(); charIndex++)
{
- //logger.info("" + charIndex + " " + parameter.charAt(charIndex) + " " + (char) tab[parameter.charAt(charIndex)]);
+ // logger.info("" + charIndex + " " + parameter.charAt(charIndex) +
+ // " " + (char) tab[parameter.charAt(charIndex)]);
char car = (char) rewritingParameterMapping[parameter.charAt(charIndex)];
if (car != NONE)
{
if ((car != '-') || ((car == '-') && (previousCar != '-')))
{
- buffer.append(car);
- previousCar = car;
+ buffer.append(car);
+ previousCar = car;
}
}
}
@@ -466,36 +544,36 @@ public class SimpleServletDispatcher extends HttpServlet
{
buffer.setLength(buffer.length() - 1);
}
-
+
result = buffer.toString();
logger.info("[" + parameter + "] -> [" + result + "]");
//
return (result);
}
-
/**
* This method gives a way for a short rewriting URL format.
*
- * Sometimes, URL has to be rewrited because we need to put parameter in the page name.
+ * Sometimes, URL has to be rewrited because we need to put parameter in the
+ * page name.
*
- * Example:
- * "/good/article.xhtm?id=123&class=today&title=story's about me"
- * => rewriteShorturl("/good/article", "xhtml", "123", "Story's aboute me");
- * => "/good/article-123-today-story-s-about-me.xhtml"
+ * Example: "/good/article.xhtm?id=123&class=today&title=story's about me"
+ * => rewriteShorturl("/good/article", "xhtml", "123", "Story's aboute me");
+ * => "/good/article-123-today-story-s-about-me.xhtml"
*/
- static public String rewriteShortUrl(String uri, String extension, String... parameters)
+ static public String rewriteShortUrl(final String uri, final String extension, final String... parameters)
{
String result;
StringList string = new StringList();
-
+
string.append(uri);
for (String parameter : parameters)
{
- // Not use of String.replaceAll() method in goal to optimize Pattern compile action.
- //string.append("-").append(REWRITE_PARAMETER.matcher(parameter.toLowerCase()).replaceAll("-"));
+ // Not use of String.replaceAll() method in goal to optimize Pattern
+ // compile action.
+ // string.append("-").append(REWRITE_PARAMETER.matcher(parameter.toLowerCase()).replaceAll("-"));
string.append("-").append(rewriteParameter(parameter));
}
@@ -503,23 +581,68 @@ public class SimpleServletDispatcher extends HttpServlet
{
string.append(".").append(extension);
}
-
+
result = string.toString();
-
+
//
- return(result);
+ return (result);
}
+ /**
+ *
+ */
+ static public String shortRewritedUrlParameter(final HttpServletRequest request)
+ {
+ String result;
+
+ result = shortRewritedUrlParameter(request.getRequestURI());
+
+ //
+ return (result);
+ }
/**
- * Extract value from a path.
- * Example:
- * "/article-123.xhtml" => "123".
+ * Return value of the first parameter.
*/
- static public String[] shortRewritedUrlParameters(String path)
+ static public String shortRewritedUrlParameter(final String path)
+ {
+ String result;
+
+ String[] results = shortRewritedUrlParameters(path);
+
+ if ((results == null) || (results.length == 0))
+ {
+ result = null;
+ }
+ else
+ {
+ result = results[0];
+ }
+
+ //
+ return (result);
+ }
+
+ /**
+ *
+ */
+ static public String[] shortRewritedUrlParameters(final HttpServletRequest request)
{
String[] result;
-
+
+ result = shortRewritedUrlParameters(request.getRequestURI());
+
+ //
+ return (result);
+ }
+
+ /**
+ * Extract value from a path. Example: "/article-123.xhtml" => "123".
+ */
+ static public String[] shortRewritedUrlParameters(final String path)
+ {
+ String[] result;
+
Matcher matcher = SHORT_REWRITED_URL_PARAMETERS.matcher(path);
if (matcher.matches())
{
@@ -538,144 +661,6 @@ public class SimpleServletDispatcher extends HttpServlet
}
//
- return(result);
- }
-
-
- /**
- *
- */
- static public String[] shortRewritedUrlParameters(HttpServletRequest request)
- {
- String[] result;
-
- result = shortRewritedUrlParameters(request.getRequestURI());
-
- //
- return(result);
- }
-
-
- /**
- * Return value of the first parameter.
- */
- static public String shortRewritedUrlParameter(String path)
- {
- String result;
-
- String[] results = shortRewritedUrlParameters(path);
-
- if ((results == null) || (results.length == 0))
- {
- result = null;
- }
- else
- {
- result = results[0];
- }
-
- //
- return(result);
- }
-
-
- /**
- *
- */
- static public String shortRewritedUrlParameter(HttpServletRequest request)
- {
- String result;
-
- result = shortRewritedUrlParameter(request.getRequestURI());
-
- //
- return(result);
- }
-
-
- /**
- * This method gives a way for a long rewriting URL format. Long as in REST.
- *
- * Sometimes, URL has to be rewrited because we need to put parameter in the page name.
- *
- * Example:
- * "/good/give_file?id=123&filename=foo.jpg"
- * => rewriteShorturl("/good/give_file", "123", "foo.jpg");
- * => "/good/give_file-/123/foo.jpg"
- *
- * Note: "-/" is used to indicate the start of parameters.
- *
- */
- static public String rewriteLongUrl(String uri, String... parameters)
- {
- String result;
-
- StringList string = new StringList();
-
- string.append(uri).append("-");
- if ((parameters == null) || (parameters.length == 0))
- {
- string.append("/");
- }
- else
- {
- for (String parameter : parameters)
- {
- string.append("/").append(parameter);
- }
- }
-
- result = string.toString();
-
- //
- return(result);
- }
-
-
- /**
- * Extract values from a path.
- * Example:
- * "/article-/123/doors/open.xhtml" => "123", "doors" and "open".
- */
- static public String[] longRewritedUrlParameters(String path)
- {
- String[] result;
-
- result = path.substring(path.indexOf("-/") + 2).split("/");
-
- //
- return(result);
- }
-
-
- /**
- *
- */
- static public String[] rewritedUrlParameters(HttpServletRequest request)
- {
- String[] result;
-
- result = longRewritedUrlParameters(request.getRequestURI());
-
- //
- return(result);
- }
-
-
- /**
- *
- */
- public void doGet (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
- {
- doIt (request, response);
- }
-
-
- /**
- *
- */
- public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
- {
- doIt (request, response);
+ return (result);
}
}