jsp和servlet

首先记录一下自己所知道东西:

1、jsp不是直接返回给浏览器的,而是首先转化为servlet(一个后缀为.java的文件里),然后转化为.class文件;

2、在tomcat服务器下面,只有当浏览器访问了jsp文件才会发生到servlet的转换;

3、如下图1,2,3在浏览器访问对应jsp(直接访问jsp文件和访问映射url生成的servlet文件是一样的),生成servlet的一个实例:


图1




图2



图3


4、可以了解到,是函数_jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)处理返回的html文件;


5、例如我在jsp中写的代码的为图4这样,对应的处理代码(以红框框出的为例)由一个函数_jspx_meth_s_005fproperty_005f0(_jspx_page_context)来进行处理(图5,6),我现在还不清楚函数里面到底怎样处理,现在算是有个感性的认识,生成的html代码如图7:


图4



图5




图6



图7


6、在浏览器访问时传送request对象给服务器,服务器返回response对象给浏览器:



图8


7、在函数_jspService中(图3中)可以看到9大对象的传入,故而在程序员在编写jsp页面时可以直接使用者9大对象。




以下问转载,是对servlet,jsp关系更好的解释:


来源:方立勋上课资料和http://blog.csdn.net/insistgogo/article/details/20788749

1、关于servlet:


Servlet 没有 main 方法,不能够独立的运行,它的运行需要容器的支持,Tomcat 是最常用的 JSP/Servlet 容器。

Servlet 运行在 Servlet 容器中,并由容器管理从创建到销毁的整个过程。

对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。


2、JSP运行原理和九大隐式对象:


每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。

由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。

JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

这9个对象分别是哪些,以及作用也是笔试经常考察的知识点。

request

response

config

application

exception

Session

page

out

pageContext


JSP九大隐式对象对应关系

request HttpServletRequest

response HttpServletResponse

session HttpSession

application servletContext

config  servletConfig

out     JspWriter  ----->   PrintWriter

exception

page   this

pageContext  

3.JSP 工作原理


结合右边给出的流程图:

当客户端浏览器向服务器请求一个 JSP 页面时,服务器收到该请求后,首先检查所请求的这个JSP 文件内容 ( 代码 ) 是否已经被更新,或者是否是 JSP 文件创建后的第一次被访问:

--如果是,那么,这个 JSP 文件就会在服务器端的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件。紧接着,这个 Servlet 类会在 Java 编译器的作用下被编译成一个字节码文件,并装载到 jvm 解释执行。剩下的就等同于 Servlet 的处理过程了。

--如果被请求的 JSP 文件内容 ( 代码 ) 没有被修改,那么它的处理过程也等同于一个 Servlet 的处理过程。即直接由服务器检索出与之对应的 Servlet 实例来处理。

需要注意的是,JSP 文件不是在服务器启动的时候转换成 Servlet 类的。而是在被客户端访问 的时候才可能发生转换的 ( 如 JSP 文件内容没有被更新等,就不再发生 Servlet 转换 )。
就 Tomcat 而言,打开目录 %Tomcat%/work/%您的工程文件目录%,然后会看到里面有 3 个子目录:org/apache/jsp,若没有这 3 个目录,说明项目的 JSP 文件还没有被访问过, 打开进到 jsp 目录下,会看到一些 *_jsp.java 和 *_jsp.class 文件,这就是 JSP 文件被转换成
Servlet 类的源文件和字节码文件了。
有兴趣的话,可以使用浏览器访问服务器中的 JSP,然后观察 JSP 转换 Servlet 以及编译的时机。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值