JSP Tutorials - Herong's Tutorial Examples - v5.11, by Herong Yang
Modifying the Servlet Converted from a JSP Page
This section provides a tutorial example on how to capture and modify the Servlet class converted from a JSP by the Tomcat server.
Since I learned that a JSP page is served on Apache Tomcat by executing the JSP Servlet Java class converted from the JSP page, I wanted to see if I capture the Servlet class converted from a JSP page by Tomcat and deploy it as a true Servlet.
1. Reuse the JSP page I created previously, Hello_Scripting.jsp, and save it to C:\local\tomcat\webapps\ROOT\:
<html><body> <!-- Hello_Scripting.jsp Copyright (c) 2002 HerongYang.com. All Rights Reserved. --> <pre> <%= greeting() %> <% out.println("Hello world!"); %> <%= "-- From JSP" %> </pre> </body></html> <%! private String greeting() { return "Scripting Elements:"; } %>
2. To force Tomcat to convert the JSP page, run a Web browser and enter this URL: http://localhost:8080/Hello_Scripting.jsp. I see this output on the browser screen:
Scripting Elements: Hello world! -- From JSP
3. Open the Servlet class, Hello_005fScripting_jsp.java, converted from Hello_Scripting.jsp by Tomcat at \local\tomcat\work\Catalina\localhost\_\org\apache\jsp\ and modify just one line:
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/9.0.12 * ... */ package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class Hello_005fScripting_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private String greeting() { return "Scripting Elements:"; } private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory(); private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext( getServletConfig().getServletContext() ).getExpressionFactory(); _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager( getServletConfig()); } public void _jspDestroy() { } public void _jspService( final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext( this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("<html><body>\r\n"); out.write("<!-- Hello_Scripting.jsp\r\n"); out.write( " Copyright (c) 2002 HerongYang.com. All Rights Reserved.\r\n"); out.write("-->\r\n"); out.write("<pre>\r\n"); out.print( greeting() ); out.write('\r'); out.write('\n'); out.println("Hello world!"); out.write('\r'); out.write('\n'); // out.print( "-- From JSP" ); out.print( "-- From JSP converted Servlet" ); out.write("\r\n"); out.write("</pre>\r\n"); out.write("</body></html>\r\n"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }
4. Save the modified Servlet class to the Servlet class folder: \local\tomcat\webapps\ROOT\WEB-INF\classes\org\apache\jsp
5. Compile the modifed Servlet class in a command window:
herong> set classpath=\local\tomcat\lib\servlet-api.jar; \ \local\tomcat\lib\jsp-api.jar; \ \local\tomcat\lib\jasper.jar; \ \local\tomcat\lib\el-api.jar; \ \local\tomcat\lib\tomcat-api.jar \local\tomcat\webapps\ROOT\WEB-INF\classes>javac \ Hello_005fScripting_jsp.java \local\tomcat\webapps\ROOT\WEB-INF\classes>dir 3,716 Hello_005fScripting_jsp.class 3,429 Hello_005fScripting_jsp.java
5. Map the modified Servlet to a URL path name on the Tomcat server by editing the "\local\tomcat\webapps\ROOT\web.xml" file:
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> ... <servlet> <servlet-name>Hello_Scripting</servlet-name> <servlet-class>org.apache.jsp.Hello_005fScripting_jsp</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello_Scripting</servlet-name> <url-pattern>/Hello_Scripting.servlet</url-pattern> </servlet-mapping> </web-app>
6. Access the Servlet class through the mapped URL "http://localhost:8080/Hello_Scripting.servlet" with any browser. The output of my first Servlet class shows up:
Scripting Elements: Hello world! -- From JSP converted Servlet
Congratulations! I have successfully modified a Servlet class converted from a JSP page by the Tomcat server!
Table of Contents
JSP (JavaServer Pages) Overview
Tomcat Installation on Windows Systems
Creating and Deploying a Servlet on Tomcat
Relationship between Servlet and JSP
►Modifying the Servlet Converted from a JSP Page
Syntax of JSP Pages and JSP Documents
JavaBean Objects and "useBean" Action Elements
Managing HTTP Response Header Lines
Non-ASCII Characters Support in JSP Pages
Overview of JSTL (JSP Standard Tag Libraries)
Multiple Tags Working Together
Using Tomcat on CentOS Systems
Connecting to SQL Server from Servlet