10

Is it possible to tell a standard Java EE servlet container to interpret and render a file as a JSP even if it doesn't have a .jsp extension?

Say I have a file called foo.xyz in the root directory of my WAR. This file contains some jstl logic as you would expect in a .jsp file. If I request http://myserver/myapp/foo.xyz I'm going to see the literal code from that file rendered as text. Is there a way to configure the web app such that it renders the file using the JSP interpreter without changing the files extension?

Please don't ask why I'd want to do this. The constraints are complicated.

Mike Deck
  • 18,045
  • 16
  • 68
  • 92

2 Answers2

11

You can add the following configuration in your web.xml to make files ending with .xyz beeing processed as JSP:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.xyz</url-pattern>
    </jsp-property-group>
</jsp-config>

This solution is working with Tomcat and Websphere. And probably with any JEE compliant server container.

LaurentG
  • 11,128
  • 9
  • 51
  • 66
  • Nice. Any idea how I could do that using annotations or some other mechanism instead of a `web.xml` file? So far I have been able to define and configure servlets using the new servlet annotations. – Garret Wilson Aug 05 '18 at 17:59
  • To answer my own question, I've been through the JSP specification and `web.xml` seems to be the only place one can indicate the JSP configuration to the container. – Garret Wilson Dec 12 '18 at 16:55
5

Add a JSP servlet mapping on that URL pattern to your webapp's web.xml.

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.xyz</url-pattern>
</servlet-mapping>

Note that this assumes that servletcontainer's own JSP servlet is registered with the servlet name of jsp which is the de facto standard servlet name of the JSP servlet. Verify the <servlet> entry inside servletcontainer's own web.xml to be sure. In case of for example Tomcat, that's the /conf/web.xml file in its installation folder.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • This solution is working on Tomcat but not on Websphere. I think this is a hack and not a *de facto standard*. – LaurentG Feb 19 '14 at 09:23
  • @LaurentG: the answer has already covered that. Just use the same `` as Websphere itself is using. – BalusC Feb 19 '14 at 11:14
  • Since I'm developing with Tomcat and deploying on Websphere, I think the most generic solution I proposed is better (I don't want to manage two web.xml). But for most common case, your solution works nice too. – LaurentG Feb 19 '14 at 11:45