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
- <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>My JSP 'MyJsp.jsp' starting page</title>
- </head>
- <body>
- This is my JSP page. <br>
- </body>
- </html>
下面是翻译之后的源码:
[java] view plain copy
- package org.apache.jsp;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import javax.servlet.jsp.*;
- import java.util.*;
- public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase
- implements org.apache.jasper.runtime.JspSourceDependent
- private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
- private static java.util.List _jspx_dependants;
- private javax.el.ExpressionFactory _el_expressionfactory;
- private org.apache.AnnotationProcessor _jsp_annotationprocessor;
- public Object getDependants()
- return _jspx_dependants;
- public void _jspInit()
- _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
- _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
- public void _jspDestroy()
- public void _jspService(HttpServletRequest request, HttpServletResponse response)
- throws java.io.IOException, ServletException
- PageContext pageContext = null;
- HttpSession session = null;
- ServletContext application = null;
- ServletConfig config = null;
- JspWriter out = null;
- Object page = this;
- JspWriter _jspx_out = null;
- PageContext _jspx_page_context = null;
- try
- response.setContentType("text/html;charset=utf-8");
- 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("\\r\\n");
- out.write("\\r\\n");
- out.write("<!DOCTYPE HTML PUBLIC \\"-//W3C//DTD HTML 4.01 Transitional//EN\\">\\r\\n");
- out.write("<html>\\r\\n");
- out.write(" <head>\\r\\n");
- out.write(" \\r\\n");
- out.write(" <title>My JSP 'MyJsp.jsp' starting page</title>\\r\\n");
- out.write(" \\r\\n");
- out.write(" </head>\\r\\n");
- out.write(" \\r\\n");
- out.write(" <body>\\r\\n");
- out.write(" This is my JSP page. <br>\\r\\n");
- out.write(" </body>\\r\\n");
- out.write("</html>\\r\\n");
- catch (Throwable t)
- if (!(t instanceof SkipPageException))
- Java遇见HTML——JSP篇之JavaWeb简介