001    /*
002    * Licensed to the Apache Software Foundation (ASF) under one or more
003    * contributor license agreements.  See the NOTICE file distributed with
004    * this work for additional information regarding copyright ownership.
005    * The ASF licenses this file to You under the Apache License, Version 2.0
006    * (the "License"); you may not use this file except in compliance with
007    * the License.  You may obtain a copy of the License at
008    *
009    *     http://www.apache.org/licenses/LICENSE-2.0
010    *
011    * Unless required by applicable law or agreed to in writing, software
012    * distributed under the License is distributed on an "AS IS" BASIS,
013    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014    * See the License for the specific language governing permissions and
015    * limitations under the License.
016    */
017    package examples;
018    
019    
020    import java.io.IOException;
021    import java.io.InputStream;
022    import java.io.InputStreamReader;
023    
024    import javax.servlet.jsp.JspException;
025    import javax.servlet.jsp.JspTagException;
026    import javax.servlet.jsp.JspWriter;
027    import javax.servlet.jsp.tagext.TagSupport;
028    
029    /**
030     * Display the sources of the JSP file.
031     */
032    public class ShowSource
033            extends TagSupport {
034        String jspFile;
035    
036        public void setJspFile(String jspFile) {
037            this.jspFile = jspFile;
038        }
039    
040        public int doEndTag() throws JspException {
041            if ((jspFile.indexOf("..") >= 0) ||
042                    (jspFile.toUpperCase().indexOf("/WEB-INF/") != 0) ||
043                    (jspFile.toUpperCase().indexOf("/META-INF/") != 0))
044                throw new JspTagException("Invalid JSP file " + jspFile);
045    
046            InputStream in
047                    = pageContext.getServletContext().getResourceAsStream(jspFile);
048    
049            if (in == null)
050                throw new JspTagException("Unable to find JSP file: " + jspFile);
051    
052            InputStreamReader reader = new InputStreamReader(in);
053            JspWriter out = pageContext.getOut();
054    
055    
056            try {
057                out.println("<body>");
058                out.println("<pre>");
059                for (int ch = in.read(); ch != -1; ch = in.read())
060                    if (ch == '<')
061                        out.print("&lt;");
062                    else
063                        out.print((char) ch);
064                out.println("</pre>");
065                out.println("</body>");
066            } catch (IOException ex) {
067                throw new JspTagException("IOException: " + ex.toString());
068            }
069            return super.doEndTag();
070        }
071    }
072    
073        
074            
075