JSP的基础知识与底层原理

JSP全称:Java Server Pages,和Servlet一样,都是SUN公司定义的一种用于开发动态WEB资源的技术,为什么说JSP也是动态web开发的一项技术呢?这是因为写JSP虽然像是在写HTML,但是JSP允许在页面中嵌套Java代码,或者利用某个标签表示Java代码(EL与jstl)。这就使得我们在写JSP时能够获取请求对象Request和响应对象Response等这样的web开发常用对象,实现与浏览器的交互。其实JSP就是一种Servlet;
先新建一个JSP:
在这里插入图片描述
可以看到头部分内容是比较多的,这原因其实和Servlet一样,都是由于MyEclipse创建JSP也是依靠模板来创建的,当然我们可以改模板代码使我们的JSP更加简洁;
在这里插入图片描述
在上面有提到,在jsp允许在页面中嵌套Java代码,如下图:
在这里插入图片描述
然后通过浏览器来浏览我们这个JSP,就可以看到当前时间:
在这里插入图片描述
 写JSP的一大便捷之处在于如果该JSP不在【WEB-INF】文件下,那么每次修改代码只需保存即可在浏览器上观察,不需要像Servlet一样要重新部署,这样方便许多;
其实浏览器访问JSP只是一个假象,真正的还是去访问Servlet。只是Servlet将JSP文件进行了翻译转换,即将JSP又变成了Servlet,然后输出给浏览器的就是这翻译转换后的Servlet。其实这个Servlet就在Tomcat的【work】目录下。【work】目录是Tomcat的工作目录,也是Tomcat将JSP转换为class文件的工作目录。转换的工作原理是当浏览器访问某个JSP页面时,Tomcat会在【work】目录下把这个JSP页面转换成 .java文件(例如index.jsp会被转换成index_jsp.java,如果以数字开头,最前面还会有一下划线,例如: _1_jsp.java),而后编译为 .class文件,最后Tomcat容器通过ClassLoader类将这个转换后的 .class类装载进内存,响应客户端的工作。
上面说了这么多,我们来探究下Tomcat的【work】目录,我们会发现在这个目录下还有【Catalina】文件夹,还有【localhost】文件夹;
在这里插入图片描述
你会发现目录相当的多;所以我们访问JSP,其实并不是真正在访问JSP,而是访问将JSP转换后的Servlet。在这个Servlet中,我们使用请求对象,将所需要的数据通过流的形式写回客户端,这点跟之前Servlet的学习到的是一样的。我们可以再看看那个浏览器访问的JSP页面,查看其码源:
 JspWriter是继承Writer的一个类。如果还记得通过响应对象Response.getWriter()方法获得的PrintWriter其实也是Writer下的一个类,所以JSP使用的字符流和Servlet能获取到的字符流其实都一个意思。
 综上,正是因为在转换的Servlet中会自动帮我们定义了JspWriter类的一个实例对象:out,所以我们能在JSP中直接使用这个对象,当然通过上诉截图我们还可以直接使用别的已经定义好的对象,比在JSP中使用“application”代表这个web的Context对象,用“page”代表了JSP对于的这个Servlet,用“session”代表这个web应用中的Session对象 等等,所以这些都是可以直接在JSP中使用,并代表某个类的对象的:
 在这里插入图片描述
简单说来,只要是在JSP转换后的Servlet中的_jspService()方法中定义过的变量,在JSP页面编写代码时都可以直接使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值