<div class="blogpost-body" id="cnblogs_post_body">
<h2>一、什么是JSP?</h2>
<p> JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。<br> JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。</p>
<h2>二、JSP原理</h2>
<h3>2.1、Web服务器是如何调用并执行一个jsp页面的?</h3>
<p> 浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet,例如下面的代码:</p>
<p><strong>index.jsp</strong></p>
<p> </p>
<p><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%></p>
<p><%</p>
<p>String path = request.getContextPath();</p>
<p>String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";</p>
<p>%></p>
<p> </p>
<p><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"></p>
<p><html></p>
<p> <head></p>
<p> <base href="<%=basePath%>"></p>
<p> </p>
<p> <title>First Jsp</title></p>
<p> </p>
<p> </head></p>
<p> </p>
<p> <body></p>
<p> <%</p>
<p> out.print("Hello Jsp");</p>
<p> %></p>
<p> </body></p>
<p></html></p>
<p>当我们通过浏览器访问index.jsp时,服务器首先将index.jsp翻译成一个index_jsp.class,在Tomcat服务器的<strong>work\Catalina\localhost\项目名\org\apache\jsp</strong>目录下可以看到index_jsp.class的源代码文件index_jsp.java,index_jsp.java的代码如下:</p>
<p>package org.apache.jsp;</p>
<p> </p>
<p>import javax.servlet.*;</p>
<p>import javax.servlet.http.*;</p>
<p>import javax.servlet.jsp.*;</p>
<p>import java.util.*;</p>
<p> </p>
<p>public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase</p>
<p> implements org.apache.jasper.runtime.JspSourceDependent {<!-- --></p>
<p> </p>
<p> private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();</p>
<p> </p>
<p> private static java.util.List _jspx_dependants;</p>
<p> </p>
<p> private javax.el.ExpressionFactory _el_expressionfactory;</p>
<p> private org.apache.AnnotationProcessor _jsp_annotationprocessor;</p>
<p> </p>
<p> public Object getDependants() {<!-- --></p>
<p> return _jspx_dependants;</p>
<p> }</p>
<p> </p>
<p> public void _jspInit() {<!-- --></p>
<p> _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();</p>
<p> _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());</p>
<p> }</p>
<p> </p>
<p> public void _jspDestroy() {<!-- --></p>
<p> }</p>
<p> </p>
<p> public void _jspService(HttpServletRequest request, HttpServletResponse response)</p>
<p> throws java.io.IOException, ServletException {<!-- --></p>
<p> </p>
<p> PageContext pageContext = null;</p>
<p> HttpSession session = null;</p>
<p> ServletContext application = null;</p>
<p> ServletConfig config = null;</p>
<p> JspWriter out = null;</p>
<p> Object page = this;</p>
<p> JspWriter _jspx_out = null;</p>
<p> PageContext _jspx_page_context = null;</p>
<p> </p>
<p> </p>
<p> try {<!-- --></p>
<p> response.setContentType("text/html;charset=UTF-8");</p>
<p> pageContext = _jspxFactory.getPageContext(this, request, response,</p>
<p> null, true, 8192, true);</p>
<p> _jspx_page_context = pageContext;</p>
<p> application = pageContext.getServletContext();</p>
<p> config = pageContext.getServletConfig();</p>
<p> session = pageContext.getSession();</p>
<p> out = pageContext.getOut();</p>
<p> _jspx_out = out;</p>
<p> </p>
<p> out.write('\r');</p>
<p> out.write('\n');</p>
<p> </p>
<p>String path = request.getContextPath();</p>
<p>String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";</p>
<p> </p>
<p> out.write("\r\n");</p>
<p> out.write("\r\n");</p>
<p> out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");</p>
<p> out.write("<html>\r\n");</p>
<p> out.write(" <head>\r\n");</p>
<p> out.write(" <base href=\"");</p>
<p> out.print(basePath);</p>
<p> out.write(" |
|