JSTL provides a simple tag - <x:transform>, that should handle most of your XSLT-transformation needs. The <x:transform> tag's two most basic attributes are xml and xslt. Given a source XML document (xml) and an XSLT stylesheet (xslt), the tag's default behavior is to apply the stylesheet to the source and output the result into the page. This simple use of the <x:transform> tag accepts a source document and a stylesheet, both of which are exposed by <c:import> tags. The tag then applies the XSLT stylesheet to the document and outputs the result:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>

////////////// sets xml variable

<c:set var="xml">
    This document uses <bold>unusual</bold> markup,
    which we want to replace with <bold>HTML</bold>.

////////////// sets xsl variable

<c:set var="xsl">
  <?xml version="1.0"?>
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="paragraph">
    <xsl:template match="bold">
      <b><xsl:value-of select="."/></b>

////////////// uses xml and xsl:

<x:transform xml="${xml}" xslt="${xsl}"/>