| Andrew Cooke | Contents | Latest | RSS | Twitter | Previous | Next

C[omp]ute

Welcome to my blog, which was once a mailing list of the same name and is still generated by mail. Please reply via the "comment" links.

Always interested in offers/projects/new ideas. Eclectic experience in fields like: numerical computing; Python web; Java enterprise; functional languages; GPGPU; SQL databases; etc. Based in Santiago, Chile; telecommute worldwide. CV; email.

Personal Projects

Lepl parser for Python.

Colorless Green.

Photography around Santiago.

SVG experiment.

Professional Portfolio

Calibration of seismometers.

Data access via web services.

Cache rewrite.

Extending OpenSSH.

Last 100 entries

I Want To Be A Redneck!; Reverse Racism; The Lost Art Of Nomography; IBM Data Center (Photo); Interesting Account Of Gamma Hack; The Most Interesting Audiophile In The World; How did the first world war actually end?; Ky - Restaurant Santiago; The Black Dork Lives!; The UN Requires Unaninmous Decisions; LPIR - Steganography in Practice; How I Am 6; Clear Explanation of Verizon / Level 3 / Netflix; Teenage Girls; Formalising NSA Attacks; Switching Brakes (Tektro Hydraulic); Naim NAP 100 (Power Amp); AKG 550 First Impressions; Facebook manipulates emotions (no really); Map Reduce "No Longer Used" At Google; Removing RAID metadata; New Bike (Good Bike Shop, Santiago Chile); Removing APE Tags in Linux; Compiling Python 3.0 With GCC 4.8; Maven is Amazing; Generating Docs from a GitHub Wiki; Modular Shelves; Bash Best Practices; Good Emergency Gasfiter (Santiago, Chile); Readings in Recent Architecture; Roger Casement; Integrated Information Theory (Or Not); Possibly undefined macro AC_ENABLE_SHARED; Update on Charges; Sunburst Visualisation; Spectral Embeddings (Distances -> Coordinates); Introduction to Causality; Filtering To Help Colour-Blindness; ASUS 1015E-DS02 Too; Ready Player One; Writing Clear, Fast Julia Code; List of LatAm Novels; Running (for women); Building a Jenkins Plugin and a Jar (for Command Line use); Headphone Test Recordings; Causal Consistency; The Quest for Randomness; Chat Wars; Real-life Financial Co Without ACID Database...; Flexible Muscle-Based Locomotion for Bipedal Creatures; SQL Performance Explained; The Little Manual of API Design; Multiple Word Sizes; CRC - Next Steps; FizzBuzz; Update on CRCs; Decent Links / Discussion Community; Automated Reasoning About LLVM Optimizations and Undefined Behavior; A Painless Guide To CRC Error Detection Algorithms; Tests in Julia; Dave Eggers: what's so funny about peace, love and Starship?; Cello - High Level C Programming; autoreconf needs tar; Will Self Goes To Heathrow; Top 5 BioInformatics Papers; Vasovagal Response; Good Food in Vina; Chilean Drug Criminals Use Subsitution Cipher; Adrenaline; Stiglitz on the Impact of Technology; Why Not; How I Am 5; Lenovo X240 OpenSuse 13.1; NSA and GCHQ - Psychological Trolls; Finite Fields in Julia (Defining Your Own Number Type); Julian Assange; Starting Qemu on OpenSuse; Noisy GAs/TMs; Venezuela; Reinstalling GRUB with EFI; Instructions For Disabling KDE Indexing; Evolving Speakers; Changing Salt Size in Simple Crypt 3.0.0; Logarithmic Map (Moved); More Info; Words Found in Voynich Manuscript; An Inventory Of 3D Space-Filling Curves; Foxes Using Magnetic Fields To Hunt; 5 Rounds RC5 No Rotation; JP Morgan and Madoff; Ori - Secure, Distributed File System; Physical Unclonable Functions (PUFs); Prejudice on Reddit; Recursion OK; Optimizing Julia Code; Cash Handouts in Brazil; Couple Nice Music Videos; It Also Works!; Adaptive Plaintext; It Works!; RC5 Without Rotation (2)

© 2006-2013 Andrew Cooke (site) / post authors (content).

Matching Clean URLs with Tomcat/Spring

From: "andrew cooke" <andrew@...>

Date: Sat, 11 Feb 2006 16:50:37 -0300 (CLST)

Martini in the Spring forums has done a huge amount of work trying to
clear up some confusion I (and at least one other person) had about
matching "any" URL - the root of the problem being that finally you render
the page with a jsp page, which itself is dispatched by Tomcat (and so
matches the "any" servlet, looping or crashig).

The thread starts at
http://forum.springframework.org/showthread.php?t=21840 but the answer is
at the end of this comment (page 2) -
http://forum.springframework.org/showpost.php?p=50421&postcount=20

  Anyways, I tried copy/pasting this configuration over to my own web.xml.
  But that didn't work too well, as it seems "/*" has higher precedence
  than "*.jsp". So I took a new look at the Servlet spec, only to find out
  that the "default pattern" is "/", not "/*". I changed DispatcherServlet's
  mapping from /* to just /, and then it worked. Out of curiousity, I then
  removed the explicit *.jsp mapping (to Jasper's JspServlet) to see if that
  would work as well. And it did.

Andrew

Rewriting Filter

From: "andrew cooke" <andrew@...>

Date: Sat, 11 Feb 2006 22:31:58 -0300 (CLST)

In the same thred, Dave Hewitt posted a link to this rewriter -
http://tuckey.org/urlrewrite/

Now that I finally understand what's happening, that does indeed look like
the best solution.

Final Tomcat/Spring/UrlRewriter Configuration

From: "andrew cooke" <andrew@...>

Date: Sun, 12 Feb 2006 10:41:00 -0300 (CLST)

OK, this seems to be the best way to get clean URLs with Tomcat and Spring:


urlrewrite.xml

<urlrewrite>
  <rule>
    <note>any url without a final file name goes to index</note>
    <from>^([^?]*)/(\?.*)?$</from>
    <to last="false">$1/index$2</to>
  </rule>
  <rule>
    <note>any url without a final file extension goes to .dynamic</note>
    <from>^([^?]*)/([^?/\.]+)(\?.*)?$</from>
    <to last="false">$1/$2.dynamic$3</to>
  </rule>
</urlrewrite>


web.xml (simplified)

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>
       org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
    </filter-class>
    <init-param>
      <param-name>logLevel</param-name>
      <param-value>DEBUG</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <url-pattern>*.dynamic</url-pattern>
  </servlet-mapping>

</web-app>


Code used to generate value of current form (for referencing in JSP):

public class InitialUrlInterceptor extends HandlerInterceptorAdapter {

  private String dropPostfix = ".dynamic";

  public void setDropPostfix(String dropPostfix) {
    this.dropPostfix = dropPostfix;
  }

  @Override
  public boolean preHandle(HttpServletRequest req,
                           HttpServletResponse res,
                           Object handler) {
    String path = SessionUtils.getRelativePath(req);
    if (path.endsWith(dropPostfix))
      path = path.substring(0, path.length() - dropPostfix.length());
    req.setAttribute("requestUrl", path);
    return true;
  }

}

tomcat default servlet patten matching -- thank you!

From: andrew cooke <andrew@...>

Date: Thu, 28 Jan 2010 00:48:29 -0300

[Sorry for the delay in approving this]

Date: Mon, 16 Nov 2009 22:25:40 -0500
From: chris marx <chrismarx@...>

  [...] ", as it seems "/*" has higher precedence
  than "*.jsp". So I took a new look at the Servlet spec, only to find out
  that the "default pattern" is "/", not "/*"."

brilliant thanks so much for posting this saved me so much time!!!!!!

Comment on this post