JSP引擎的工作原理

  • 本文介绍JSP引擎的工作原理,以及JSP运行环境,JSP生命周期和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. <html> 
    2. <head> 
    3. <title>HelloWorld for JSP</title> 
    4. </head> 
    5. <body> 
    6. <h1>HelloWord for JSP</h1> 
    7. <%out.println("<h3>Hello World!</h3>");%> 
    8. </body> 
    9. </html> 

    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后面进行发送,参数之间用“&”符号隔开,如代码:一个典型的GET请求的表单get.html

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

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

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

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

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

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

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

    1. <html> 
    2. <head> 
    3. <title>得到消息</title> 
    4. </head> 
    5. <body> 
    6.     <h1>请求中所包含的URL</h1><br> 
    7.     <%=request.getQueryString()%><br> 
    8. </body> 
    9. </html> 
### JSP工作原理详解 JSP(JavaServer Pages)是一种用于开发动态Web资源的技术,由SUN公司定义。它允许开发者在HTML页面中嵌入Java代码,从而为用户提供动态数据[^3]。JSP工作原理主要涉及以下几个阶段: #### 1. JSP文件请求 当客户端向服务器发送一个针对JSP文件的请求时,Web服务器会将这个请求转发给JSP引擎JSP引擎本身也是一个Servlet,负责处理JSP文件的编译和执行。 #### 2. JSP文件转换 在第一次调用某个JSP文件时,JSP引擎会将该JSP文件转换成一个Java源文件。这个Java源文件实际上是一个Servlet类,包含了JSP页面中的所有静态内容和动态代码。如果在转换过程中发现JSP文件存在语法错误,转换过程将中断,并向服务端和客户端输出出错信息[^4]。 #### 3. 编译生成.class文件 一旦JSP文件成功转换为Java源文件,JSP引擎会使用`javac`编译器将该Java源文件编译成相应的`.class`文件,并将其加载到内存中。这个`.class`文件就是JSP页面对应的Servlet类[^4]。 #### 4. Servlet类的执行 JSP引擎会通过Web服务器调用Servlet引擎来加载并执行这个Servlet类。在执行过程中,Servlet会产生HTML格式的输出,并将其内嵌于HTTP响应中返回给Web服务器[^5]。 #### 5. 缓存机制 在首次编译和加载之后,JSP文件会被缓存在内存中。后续对该JSP文件的请求无需再次进行编译,除非JSP文件发生了修改。这种缓存机制显著提高了性能[^1]。 #### 6. 方法执行 JSP技术的核心在于`_jspService()`方法,这是由JSP引擎JSP源文件自动生成的。此外,开发者还可以通过实现`init()`和`destroy()`方法来定义一些初始化和销毁的动作[^2]。 ### 示例代码 以下是一个简单的JSP页面示例,展示了如何嵌入Java代码以生成动态内容: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>JSP示例</title> </head> <body> <h1>当前时间是: <%= new java.util.Date() %></h1> </body> </html> ``` 在这个示例中,`<%= new java.util.Date() %>`部分嵌入了Java代码,用于动态生成当前时间。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值