title: Why are there magic attributes exposed in the Servlet spec?
body: <p>It's always seemed a little at odds with the principles of Java that the Java Servlet Spec (2.5 version <a href="http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index2.html" rel="nofollow noreferrer">here</a>) includes a set of magic attributes containing info about included resources, namely:</p>
  
  <pre><code>javax.servlet.include.request_uri
  javax.servlet.include.context_path
  javax.servlet.include.servlet_path
  javax.servlet.include.path_info
  javax.servlet.include.query_string
  </code></pre>
  
  <p>It's not even specifically pointed out in the <a href="http://java.sun.com/products/servlet/2.5/docs/servlet-2_5-mr2/index.html" rel="nofollow noreferrer">API documentation</a>, only in the spec where it is a must for correct implementation.</p>
  
  <p>This approach feels very wrong, an exposed implementation detail that clients will use and depend on. Why is this information exposed in this way?</p>