`
kavy
  • 浏览: 888238 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSP引擎的工作原理

 
阅读更多

JSP运行环境:

执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎有WebLogic和Tomcat。把这些支持JSP的web服务器配置好后。就可以再客户端通过浏览器来访问JSP页面了。默认端口一般是7001.

JSP生命周期:

JSP处理请求的方法就是把这些请求都统一看做Servlet。由于这个原因,JSP的很多功能和生命周期,都由Java Servlet技术标准定义的。这种限制,在动态内容方面更加明显。所以学习JSP的时候,需要温习Servlet的内容和标准。

JSP网络应用服务器框架:

在符合J2EE规范的服务器构建起来之后,就可以编写JSP页面了,在HTML页面中嵌入JSP脚本,该页面就成为JSP页面了。JSP脚本用特定的标记括起来,如<%...%>,或者<JSP>…</JSP>。JSP的工作流程如下:当其读到HTML的代码的时候,就直接输出到客户端,而如果读到嵌入JSP脚本的时候,就需要对这些脚本进行另外的翻译和处理,得到输出之后再输出到客户端。

下面通过一个简单页面编写来了解JSP网络应用的框架:

1.JSP客户端交互

JSP的大部分工作就是与客户端进行交互。客户端一般指的是浏览器,它们与置于服务器端得JSP页面进行交互。JSP脚本中所有的Java语句都是在服务器执行,服务器接受客户端提交的请求,通过一定的处理之后,将结果返回给客户端,客户端得到的仅仅是HTML代码。下面是一个JSP的HelloWorld程序代码:

  1. [back=inherit][back=inherit]<[/back][back=inherit]html[/back][back=inherit]>[/back][back=inherit] [/back][/back]
  2. [back=inherit][/back][back=inherit]<[/back][back=inherit]head[/back][back=inherit]>[/back][back=inherit] [/back]
  3. [back=inherit][/back][back=inherit]<[/back][back=inherit]title[/back][back=inherit]>[/back][back=inherit]HelloWorld for JSP[/back][back=inherit]</[/back][back=inherit]title[/back][back=inherit]>[/back][back=inherit] [/back]
  4. [back=inherit][/back][back=inherit]</[/back][back=inherit]head[/back][back=inherit]>[/back][back=inherit] [/back]
  5. [back=inherit][/back][back=inherit]<[/back][back=inherit]body[/back][back=inherit]>[/back][back=inherit] [/back]
  6. [back=inherit][/back][back=inherit]<[/back][back=inherit]h1[/back][back=inherit]>[/back][back=inherit]HelloWord for JSP[/back][back=inherit]</[/back][back=inherit]h1[/back][back=inherit]>[/back][back=inherit] [/back]
  7. [back=inherit][/back][back=inherit]<[/back][back=inherit]%out.println("[/back][back=inherit]<[/back][back=inherit]h3[/back][back=inherit]>[/back][back=inherit]Hello World![/back][back=inherit]</[/back][back=inherit]h3[/back][back=inherit]>[/back][back=inherit]");%[/back][back=inherit]>[/back][back=inherit] [/back]
  8. [back=inherit][/back][back=inherit]</[/back][back=inherit]body[/back][back=inherit]>[/back][back=inherit] [/back]
  9. [back=inherit][/back][back=inherit]</[/back][back=inherit]html[/back][back=inherit]>[/back][back=inherit] [/back]

    2.交互过程的流程

    在一般的客户端和服务器端的交互中,是用HTTP协议,客户端通过下面4个步骤也服务器段进行交互:

    (1)客户端和服务器端建立连接

    (2)发送客户端请求

    (3)服务器返回应答给客户

    (4)客户端关闭连接

    所有的请求都是由客户端主动发出的,而服务器一直出于被动的监听状态。用户在浏览器键入要访问的地址,按回车键确认后,浏览器开始与服务器建立连接,从这时开始,就开始了一次交互过程。浏览器通过一段时间的等待后,从服务器得到响应,并且把相应的信息以HTML方式呈现给用户。用户在浏览网站的过程中,实际上包含了很多这样的交互应答过程。在客户端与JSP页面的交互过程中,只有服务器接收请求和返回应答的动作可能不一样,其他与上面过程基本一致。基本情况如下:

    (1)服务器在收到一个请求后首先要分析这个请求,如果请求的页面只是一般的HTML页面,服务器就直接读出HTML页面并返回给客户端

    (2)如果客户端请求的是JSP页面,服务器调用JSP引擎翻译处理所请求的JSP页面,并将翻译和处理之后的HTML返回给客户端

    (3)如果遇到JavaBeans组件,JSP引擎将调用相应的JavaBeans组件,得到JavaBeans的返回值,最后返回给JSP页面

    3.JSP引擎的工作原理

    当一个JSP页面第一次被访问的时候,JSP引擎将执行以下步骤:

    (1)将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时也是一个完整的java程序

    (2)JSP引擎调用java编译器对这个Servlet进行编译,得到可执行文件class

    (3)JSP引擎调用java虚拟机来解释执行class文件,生成向客户端发送的应答,然后发送给客户端

    以上三个步骤仅仅在JSP页面第一次被访问时才会执行,以后的访问速度会因为class文件已经生成而大大提高。当JSP引擎街道一个客户端的访问请求时,首先判断请求的JSP页面是否比对应的Servlet新,如果新,对应的JSP需要重新编译。

    4.对请求信息的处理

    在大部分的交互过程中,一个JSP页面首先对用户提出的请求进行分析,然后从请求中得到有用的数据,比如接收用户提交的数据或者请求的方法,然后进行相应的处理。而这就需要了解得到传入参数的方法和得到用户其他信息的方法。

    (1)得到传入参数的方法

    在交互过程中,服务器必须从客户端得到一些数据,来帮助处理过程的进行。这些数据包括用户身份验证数据(如用户名、密码等)以及其他中要信息。而这些数据的载体,就是用户提交的请求。请求的组成主要有两部分,一是头信息。头信息包含了以下信息:请求的方法(GET和POST)、请求的URL和浏览器信息。其他信息包含了一些数据信息。

    首先要了解的是GET方法发送请求时,这种方法是客户端用来向服务器段请求信息的,所以在请求中不包含信息体。用户只能把请求的内容作为参数附加在URL后面进行发送,参数之间用“[amp]”符号隔开,如代码:一个典型的GET请求的表单get.html

    1. [back=inherit][back=inherit]<[/back][back=inherit]html[/back][back=inherit]>[/back][back=inherit] [/back][/back]
    2. [back=inherit][/back][back=inherit]<[/back][back=inherit]head[/back][back=inherit]>[/back][back=inherit] [/back]
    3. [back=inherit][/back][back=inherit]<[/back][back=inherit]title[/back][back=inherit]>[/back][back=inherit]Get[/back][back=inherit]</[/back][back=inherit]title[/back][back=inherit]>[/back][back=inherit] [/back]
    4. [back=inherit][/back][back=inherit]</[/back][back=inherit]head[/back][back=inherit]>[/back][back=inherit] [/back]
    5. [back=inherit][/back][back=inherit]<[/back][back=inherit]body[/back][back=inherit]>[/back][back=inherit] [/back]
    6. [back=inherit][/back][back=inherit]<[/back][back=inherit]h1[/back][back=inherit]>[/back][back=inherit]Get Method[/back][back=inherit]</[/back][back=inherit]h1[/back][back=inherit]>[/back][back=inherit] [/back]
    7. [back=inherit][/back][back=inherit]<[/back][back=inherit]form[/back][back=inherit] [/back][back=inherit]action[/back][back=inherit] = [/back][back=inherit]"submit.jsp"[/back][back=inherit] [/back][back=inherit]method[/back][back=inherit] = [/back][back=inherit]"GET"[/back][back=inherit]>[/back][back=inherit] [/back]
    8. [back=inherit] username[/back][back=inherit]<[/back][back=inherit]input[/back][back=inherit] [/back][back=inherit]name[/back][back=inherit] = [/back][back=inherit]"uername"[/back][back=inherit] [/back][back=inherit]value[/back][back=inherit] = [/back][back=inherit]"aaa"[/back][back=inherit]>[/back][back=inherit]<[/back][back=inherit]br[/back][back=inherit]>[/back][back=inherit] [/back]
    9. [back=inherit] password[/back][back=inherit]<[/back][back=inherit]inpput[/back][back=inherit] [/back][back=inherit]type[/back][back=inherit] = [/back][back=inherit]password[/back][back=inherit] [/back][back=inherit]name[/back][back=inherit] = [/back][back=inherit]"password"[/back][back=inherit] [/back][back=inherit]value[/back][back=inherit] = [/back][back=inherit]"111111"[/back][back=inherit]>[/back][back=inherit]<[/back][back=inherit]br[/back][back=inherit]>[/back][back=inherit] [/back]
    10. [back=inherit] [/back][back=inherit]<[/back][back=inherit]input[/back][back=inherit] [/back][back=inherit]type[/back][back=inherit] = [/back][back=inherit]submit[/back][back=inherit] [/back][back=inherit]value[/back][back=inherit] = [/back][back=inherit]"submit"[/back][back=inherit]>[/back][back=inherit] [/back]
    11. [back=inherit][/back][back=inherit]</[/back][back=inherit]form[/back][back=inherit]>[/back][back=inherit] [/back]
    12. [back=inherit][/back][back=inherit]</[/back][back=inherit]body[/back][back=inherit]>[/back][back=inherit] [/back]
    13. [back=inherit][/back][back=inherit]</[/back][back=inherit]html[/back][back=inherit]>[/back][back=inherit] [/back]

      (代码中有一个表单,表单在定义的时候,定义了属性method=“GET”,这表明表单提交的方法是GET。这个表单向服务器提交两个参数,其中一个是username,缺省值为aaa,另外一个是password,其缺省值是111111。)

      这个页面只是得到了输入数据,只有submit.JSP才能实现提交这个页面的数据。这就是需要用到JSP了,代码如下:submit.JSP

      1. [back=inherit][back=inherit]<[/back][back=inherit]html[/back][back=inherit]>[/back][back=inherit] [/back][/back]
      2. [back=inherit][/back][back=inherit]<[/back][back=inherit]head[/back][back=inherit]>[/back][back=inherit] [/back]
      3. [back=inherit][/back][back=inherit]<[/back][back=inherit]title[/back][back=inherit]>[/back][back=inherit]submit[/back][back=inherit]</[/back][back=inherit]title[/back][back=inherit]>[/back][back=inherit] [/back]
      4. [back=inherit][/back][back=inherit]</[/back][back=inherit]head[/back][back=inherit]>[/back][back=inherit] [/back]
      5. [back=inherit][/back][back=inherit]<[/back][back=inherit]body[/back][back=inherit]>[/back][back=inherit] [/back]
      6. [back=inherit][/back][back=inherit]<[/back][back=inherit]h1[/back][back=inherit]>[/back][back=inherit]submit[/back][back=inherit]</[/back][back=inherit]h1[/back][back=inherit]>[/back][back=inherit] [/back]
      7. [back=inherit]request method:[/back][back=inherit]<[/back][back=inherit]%=request.getMethod() %[/back][back=inherit]>[/back][back=inherit]<[/back][back=inherit]br[/back][back=inherit]>[/back][back=inherit] [/back]
      8. [back=inherit]user name:[/back][back=inherit]<[/back][back=inherit]%=request.getParameter("user") %[/back][back=inherit]>[/back][back=inherit]<[/back][back=inherit]br[/back][back=inherit]>[/back][back=inherit] [/back]
      9. [back=inherit]password:[/back][back=inherit]<[/back][back=inherit]%=request.getParameter("password") %[/back][back=inherit]>[/back][back=inherit]<[/back][back=inherit]br[/back][back=inherit]>[/back][back=inherit] [/back]
      10. [back=inherit][/back][back=inherit]</[/back][back=inherit]body[/back][back=inherit]>[/back][back=inherit] [/back]
      11. [back=inherit][/back][back=inherit]</[/back][back=inherit]html[/back][back=inherit]>[/back][back=inherit] [/back]

        在这个JSP页面中是用了JSP的内置对象request的两个方法,一个是getMethod,用来获取当前请求的类型,另一个是getParameter,用来获取指定参数的值。在get.html中单击submit按钮,就可以显示表单请求方法,用户名以及密码等信息。

        (2)得到其他信息的方法

        得到非用户输入的其他参数信息,就需要用到其他的方法。如下所示是一个得到客户端信息的简单程序。根据这个程序我们可以初步了解如何得到客户端信息的大致思路。代码如下:

        1. [back=inherit][back=inherit]<[/back][back=inherit]html[/back][back=inherit]>[/back][back=inherit] [/back][/back]
        2. [back=inherit][/back][back=inherit]<[/back][back=inherit]head[/back][back=inherit]>[/back][back=inherit] [/back]
        3. [back=inherit][/back][back=inherit]<[/back][back=inherit]title[/back][back=inherit]>[/back][back=inherit]得到消息[/back][back=inherit]</[/back][back=inherit]title[/back][back=inherit]>[/back][back=inherit] [/back]
        4. [back=inherit][/back][back=inherit]</[/back][back=inherit]head[/back][back=inherit]>[/back][back=inherit] [/back]
        5. [back=inherit][/back][back=inherit]<[/back][back=inherit]body[/back][back=inherit]>[/back][back=inherit] [/back]
        6. [back=inherit] [/back][back=inherit]<[/back][back=inherit]h1[/back][back=inherit]>[/back][back=inherit]请求中所包含的URL[/back][back=inherit]</[/back][back=inherit]h1[/back][back=inherit]>[/back][back=inherit]<[/back][back=inherit]br[/back][back=inherit]>[/back][back=inherit] [/back]
        7. [back=inherit] [/back][back=inherit]<[/back][back=inherit]%=request.getQueryString()%[/back][back=inherit]>[/back][back=inherit]<[/back][back=inherit]br[/back][back=inherit]>[/back][back=inherit] [/back]
        8. [back=inherit][/back][back=inherit]</[/back][back=inherit]body[/back][back=inherit]>[/back][back=inherit] [/back]
        9. [back=inherit][/back][back=inherit]</[/back][back=inherit]html[/back][back=inherit]>[/back][back=inherit] [/back]
分享到:
评论

相关推荐

    jsp工作原理

    1. **JSP文件的读取与转换**:当用户首次访问某个JSP页面时,JSP引擎首先会读取该JSP文件,并将其转换为Java源代码。这一过程主要是解析JSP文件中的指令、脚本元素以及声明等,将它们转换为Java语言可以理解的形式。...

    了解JSP工作原理.ppt

    1. 客户端向服务器发出请求要访问某个JSP文件时,服务器会在磁盘上查找到该JSP文件,通过JSP引擎解释该文件代码,生成一个同名的Java文件,这个文件就是Servlet。 2. 然后将该文件编译生成Java Class字节码文件,它...

    JSP核心技术——JSP引擎内幕(2010).pdf

    #### 一、JSP引擎的工作原理 JSP(Java Server Pages)是一种基于Java的服务器端脚本技术,它允许开发者将动态内容嵌入到HTML网页中。JSP的核心功能是通过JSP引擎来实现的。JSP引擎负责接收来自客户端的请求,并将...

    JSP的工作原理.pptx

    2. **编译成Servlet**: 首次访问JSP页面时,JSP引擎会将JSP页面转换为一个Servlet源文件。这个过程称为JSP到Servlet的转换。JSP引擎自动地处理所有必要的导入、声明和指令,将Java代码插入到Servlet中。 3. **编译...

    jsp运行原理

    - 当用户首次访问某个JSP页面时,Web服务器上的JSP引擎首先读取JSP文件。 - 接着,JSP引擎将该JSP文件转化为一个Java源文件(Servlet)。这个过程被称为“翻译”。 - 转化的Java源文件会被编译成字节码文件(....

    jsp搜索引擎

    综上所述,"jsp搜索引擎"这个项目涵盖了从基础的JSP语法到复杂的搜索引擎技术和Web应用开发的多个方面,对于学习者来说,这是一个很好的实践平台,可以深入理解JSP和搜索引擎工作原理,同时锻炼前后端开发和优化能力...

    jsp原理及框架

    3. **模板引擎**:许多框架如FreeMarker、Velocity等,它们的模板语言和JSP有相似之处,学习JSP有助于理解和使用这些模板引擎。 然而,随着Web技术的发展,JSP的缺点也逐渐显现,如代码混合、维护困难等问题。因此...

    jsp毕业设计——JSP搜索引擎的研究与实现(源代码+论文+答辩PPT).zip

    2. **搜索引擎原理** 搜索引擎主要由爬虫、索引、查询处理和排序四大部分组成。首先,爬虫通过网络抓取网页;然后,索引器对抓取的网页进行处理,建立倒排索引;当用户输入查询时,查询处理器分析用户输入并匹配...

    web学习笔记.pdf

    Web技术的学习笔记涵盖了从基础的JSP引擎工作原理到高级的框架如Struts1和Struts2的使用。首先,JSP(JavaServer Pages)是Java平台上的动态网页技术,当Web容器接收到以JSP为扩展名的URL请求时,会交由JSP引擎处理...

    搜索引擎源代码用java、jsp编写的搜索引擎源代码

    本项目提供了一套用Java和JSP(JavaServer Pages)编写的搜索引擎源代码,这对于学习和理解搜索引擎的工作原理,以及Java后端开发与Web交互有极大的帮助。下面我们将深入探讨相关知识点。 首先,Java是一种广泛使用...

    JSP搜索引擎的研究与实现(源代码+论文+答辩PPT).rar

    3. **搜索引擎原理**:搜索引擎通常包括爬虫、索引、查询解析和排序四个主要部分。爬虫负责从互联网上抓取网页;索引阶段将抓取的网页进行预处理,如分词、去重等,形成倒排索引;查询解析将用户输入的查询转化为可...

    jsp开发 jsp高级编程 pdf格式

    本文详细介绍了JSP技术的发展历程、JSP引擎的工作原理以及Tomcat这一流行的JSP/Servlet容器的相关知识。此外,还具体讨论了Tomcat的安装配置方法及其与其他Web服务器的集成方案,为读者提供了全面的JSP开发指南。...

    智软工作流引擎v6.1

    而“工作流引擎”可能是一个包含实际工作流引擎代码或者相关文档的文件,用户可以通过解压并研究这个文件来深入了解引擎的内部工作原理和使用方法。 综合来看,智软工作流引擎v6.1是一个以JSP技术为基础,强调...

    JSP源码JSP搜索引擎的研究与实现(源代码+论文+答辩PPT)

    ### JSP搜索引擎的研究与实现 ...对于学习JSP技术和搜索引擎原理的学生来说,该项目具有很高的参考价值和实用意义。通过该项目的学习,可以深入了解JSP的工作机制以及如何将其应用于实际的Web开发中。

    JSP搜索引擎的研究与实现(源代码+论文+答辩PPT).zip

    本项目通过结合JSP技术和搜索引擎原理,构建了一个具有实际应用价值的搜索系统。 **1. JSP技术基础** JSP技术的核心在于将业务逻辑和显示逻辑分离,使得开发者可以专注于后端处理而无需关心页面展示。JSP页面由HTML...

    jspshell 一些JSP的工具

    开发者可以通过查看和学习这个文件来理解JSP的语法结构和工作原理,也可以将其作为模板来快速构建自己的应用功能。 总的来说,这个压缩包提供的工具集对于JSP开发者来说是极其宝贵的资源。它们可以帮助开发者更好地...

    JSP搜索引擎的研究与实现(源代码).zip

    总结来说,这个压缩包提供了学习和研究如何使用JSP构建搜索引擎的完整资料,包括源代码、文档和项目报告,对于想要深入理解搜索引擎工作原理以及JSP开发的人来说,这是一个宝贵的资源。通过阅读文档、分析源码和实践...

    jsp+servlet+jdbc+lucene 搜索引擎

    **搜索引擎技术概述** 搜索引擎是互联网信息检索的重要工具,它能够快速、准确地为用户提供所需的信息。本项目基于Java技术栈,结合JSP、...同时,Lucene的使用有助于提升对全文搜索引擎工作原理的理解和应用能力。

Global site tag (gtag.js) - Google Analytics