JavaWeb---总结(十四)JSP原理

论坛 期权论坛     
选择匿名的用户   2021-5-24 00:10   723   0
<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>&lt;%&#64; page language&#61;&#34;java&#34; import&#61;&#34;java.util.*&#34; pageEncoding&#61;&#34;UTF-8&#34;%&gt;</p>
<p>&lt;%</p>
<p>String path &#61; request.getContextPath();</p>
<p>String basePath &#61; request.getScheme()&#43;&#34;://&#34;&#43;request.getServerName()&#43;&#34;:&#34;&#43;request.getServerPort()&#43;path&#43;&#34;/&#34;;</p>
<p>%&gt;</p>
<p> </p>
<p>&lt;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34;&gt;</p>
<p>&lt;html&gt;</p>
<p>  &lt;head&gt;</p>
<p>    &lt;base href&#61;&#34;&lt;%&#61;basePath%&gt;&#34;&gt;</p>
<p>    </p>
<p>    &lt;title&gt;First Jsp&lt;/title&gt;</p>
<p>    </p>
<p>  &lt;/head&gt;</p>
<p>  </p>
<p>  &lt;body&gt;</p>
<p>    &lt;%</p>
<p>        out.print(&#34;Hello Jsp&#34;);</p>
<p>    %&gt;</p>
<p>  &lt;/body&gt;</p>
<p>&lt;/html&gt;</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 &#61; 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 &#61; _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();</p>
<p>    _jsp_annotationprocessor &#61; (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 &#61; null;</p>
<p>    HttpSession session &#61; null;</p>
<p>    ServletContext application &#61; null;</p>
<p>    ServletConfig config &#61; null;</p>
<p>    JspWriter out &#61; null;</p>
<p>    Object page &#61; this;</p>
<p>    JspWriter _jspx_out &#61; null;</p>
<p>    PageContext _jspx_page_context &#61; null;</p>
<p> </p>
<p> </p>
<p>    try {<!-- --></p>
<p>      response.setContentType(&#34;text/html;charset&#61;UTF-8&#34;);</p>
<p>      pageContext &#61; _jspxFactory.getPageContext(this, request, response,</p>
<p>                  null, true, 8192, true);</p>
<p>      _jspx_page_context &#61; pageContext;</p>
<p>      application &#61; pageContext.getServletContext();</p>
<p>      config &#61; pageContext.getServletConfig();</p>
<p>      session &#61; pageContext.getSession();</p>
<p>      out &#61; pageContext.getOut();</p>
<p>      _jspx_out &#61; out;</p>
<p> </p>
<p>      out.write(&#39;\r&#39;);</p>
<p>      out.write(&#39;\n&#39;);</p>
<p> </p>
<p>String path &#61; request.getContextPath();</p>
<p>String basePath &#61; request.getScheme()&#43;&#34;://&#34;&#43;request.getServerName()&#43;&#34;:&#34;&#43;request.getServerPort()&#43;path&#43;&#34;/&#34;;</p>
<p> </p>
<p>      out.write(&#34;\r\n&#34;);</p>
<p>      out.write(&#34;\r\n&#34;);</p>
<p>      out.write(&#34;&lt;!DOCTYPE HTML PUBLIC \&#34;-//W3C//DTD HTML 4.01 Transitional//EN\&#34;&gt;\r\n&#34;);</p>
<p>      out.write(&#34;&lt;html&gt;\r\n&#34;);</p>
<p>      out.write(&#34;  &lt;head&gt;\r\n&#34;);</p>
<p>      out.write(&#34;    &lt;base href&#61;\&#34;&#34;);</p>
<p>      out.print(basePath);</p>
<p>      out.write(&#34;
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP