JavaWeb学习篇之----Jsp详解

Posted duangxcg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb学习篇之----Jsp详解相关的知识,希望对你有一定的参考价值。

今天我们来看一下Jsp的相关知识,首先来看看一下Jsp的相关定义:

简介:

JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP这门技术的最大的特点在于,写jsp就像在写html,但:
它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。

不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。

其原因为,程序的数据通常要美化后再输出:
让jsp既用Java代码产生动态数据,又做美化会导致页面难以维护。
让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。


Jsp的运行原理:

目标:
Web服务器是如何调用并执行一个jsp页面的?
Jsp页面中的html排版标签是如何被发送到客户端的?
Jsp页面中的java代码服务器是如何执行的?
Web服务器在调用jsp时,会给jsp提供一些什么java对象?

思考:JSP为什么可以像servlet一样,也可以叫做动态web资源的开发技术?

其实Jsp就是一个Servlet,所以我们要先介绍Servlet的相关技术,当我们第一次访问Jsp的时候,Jsp引擎都会将这个Jsp翻译成一个Servlet,这个文件存放在Tomcat中的work目录中,这里,我们新建一个MyJsp.jsp页面,然后访问以下,我们看一下翻译后的源码:

以下是MyJsp.jsp页面的内容:

[html]  view plain  copy  
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.       
  7.     <title>My JSP 'MyJsp.jsp' starting page</title>  
  8.       
  9.   </head>  
  10.     
  11.   <body>  
  12.     This is my JSP page. <br>  
  13.   </body>  
  14. </html>  

下面是翻译之后的源码:

[java]  view plain  copy  
  1. package org.apache.jsp;  
  2.   
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. import javax.servlet.jsp.*;  
  6. import java.util.*;  
  7.   
  8. public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase  
  9.     implements org.apache.jasper.runtime.JspSourceDependent   
  10.   
  11.   private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();  
  12.   
  13.   private static java.util.List _jspx_dependants;  
  14.   
  15.   private javax.el.ExpressionFactory _el_expressionfactory;  
  16.   private org.apache.AnnotationProcessor _jsp_annotationprocessor;  
  17.   
  18.   public Object getDependants()   
  19.     return _jspx_dependants;  
  20.     
  21.   
  22.   public void _jspInit()   
  23.     _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();  
  24.     _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());  
  25.     
  26.   
  27.   public void _jspDestroy()   
  28.     
  29.   
  30.   public void _jspService(HttpServletRequest request, HttpServletResponse response)  
  31.         throws java.io.IOException, ServletException   
  32.   
  33.     PageContext pageContext = null;  
  34.     HttpSession session = null;  
  35.     ServletContext application = null;  
  36.     ServletConfig config = null;  
  37.     JspWriter out = null;  
  38.     Object page = this;  
  39.     JspWriter _jspx_out = null;  
  40.     PageContext _jspx_page_context = null;  
  41.   
  42.   
  43.     try   
  44.       response.setContentType("text/html;charset=utf-8");  
  45.       pageContext = _jspxFactory.getPageContext(this, request, response,  
  46.                 nulltrue8192true);  
  47.       _jspx_page_context = pageContext;  
  48.       application = pageContext.getServletContext();  
  49.       config = pageContext.getServletConfig();  
  50.       session = pageContext.getSession();  
  51.       out = pageContext.getOut();  
  52.       _jspx_out = out;  
  53.   
  54.       out.write("\\r\\n");  
  55.       out.write("\\r\\n");  
  56.       out.write("<!DOCTYPE HTML PUBLIC \\"-//W3C//DTD HTML 4.01 Transitional//EN\\">\\r\\n");  
  57.       out.write("<html>\\r\\n");  
  58.       out.write("  <head>\\r\\n");  
  59.       out.write("    \\r\\n");  
  60.       out.write("    <title>My JSP 'MyJsp.jsp' starting page</title>\\r\\n");  
  61.       out.write("    \\r\\n");  
  62.       out.write("  </head>\\r\\n");  
  63.       out.write("  \\r\\n");  
  64.       out.write("  <body>\\r\\n");  
  65.       out.write("    This is my JSP page. <br>\\r\\n");  
  66.       out.write("  </body>\\r\\n");  
  67.       out.write("</html>\\r\\n");  
  68.      catch (Throwable t)   
  69.       if (!(t instanceof SkipPageException))  
  70. Java遇见HTML——JSP篇之JavaWeb简介

    javaWeb核心技术第九篇之JSP

    javaWeb核心技术第十四篇之easyui

    JavaWeb学习总结(十七)——JSP中的九个内置对象(转)

    JavaWeb详解(第四篇)之JSP 简介

    Javaweb二(JSP详解)