前一篇博客提到Servlet技术,而本篇所要阐述的正是Servlet的一项扩展应用--JSP。
基础
产生背景
在Servlet中向客户端浏览器输出页面时,我们会使用相当多的诸如
PrintWriter out = resp.getWriter();
out.println("<html><head>");
out.println("...");
。。。
这样的语句,此番操作是极其繁琐的,往往我们更希望像操作html语言一样,在服务器端达到所见即所得的效果,到底有没有一种技术使我们通过直接写html标签的文本来完成向浏览器发送页面的效果呢?那便是JSP了。
概念剖析
JSP:Java Server Pages,基本实现上便是一种Servlet,便是说JSP也是在服务器端运行的一段程序。
当浏览器第一次访问jsp文件时,Servlet容器会自动将jsp文件代码编译成Servlet程序(也可以通过预编译工具提前对jsp进行编译),并进一步得到执行,在以后的访问中,如果jsp文件没有进行更改,则不对jsp文件进行编译,这也是为什么在第一次访问jsp资源时速度较慢的原因。
调用流程
1.客户端向服务器端提出请求;
2.服务器端处理请求
--生成请求对象HttpServletRequest(包含客户端信息)
--生成相应对象HttpServletResponse(包含服务器响应信息)
--调用JspServlet的service方法,会执行编译对应jsp文件的操作,生成对应的java、class文件,包含对应jsp文件的java类,继承自HttpJspBase。
--实例化对应jsp类
--调用其父类的service方法
--调用重写方法_jspService(该方法中包含对所写jsp页面编译后的程序)
3.生成响应页面,并将其传给Servlet容器。
4.Servlet将响应返回给客户端
5.Srvlet容器调用destory方法销毁实例化对象
流程图:
类似于Servlet,对于Jsp的请求,我们同样可以找到相关的配置信息
在tomcat文件\conf\web.xml下,有这样的配置信息
开篇已经提到,jsp其实就是servlet,而从配置文件看,根据url-pattern属性,我们便可以知道jsp无非是作为了一种文件后缀名被Tomcat捕获执行,这样其实换了另外了文件扩展名,做好配置文件,也可以同样实现jsp所要达到的效果。
这里需要强调的是客户端在第一次请求jsp页面时,Servlet容器会编译对应的jsp页面,生成相关java、class文件,这两个文件可以在Tomcat文件夹下可以找到:\work\Catalina\localhost\test_jsp\org\apache\jsp,打开java文件可以看到相关的方法,这样我们就明白了Tomcat其实是帮我们把写的jsp页面转换成了怎样的一个类。
特点
jsp与js
jsp页面的编写极像是html页面,其中可以夹带java脚本代码,形式上看,这点便像是html页面中写一些js代码一样,根本上的不同便在于jsp是运行在服务器端的一项技术,是为了servlet向浏览器发送html页面方便而设计,方便开发人员像写html页面一样去编写servlet。
而js最初的产生是为了实现在客户端进行表单验证,但后来的发展,其功能变得越来越强大,已经成为前段不可或缺的一项基本技术。
jsp与asp
1.jsp的跨平台性--java的运行机制所决定
2.web服务器支持--这点体会的并不是太深刻,先在这里占上吧
3.组件模型--jsp涉及到javabean的一些东东,而asp使用基于win32的com组件模型
4.脚本语言--JSP内可以写java或JS,而asp页面中使用VBScript或JScript
总结
该篇文章对jsp的响应技术做了介绍,其实在弄懂了servlet技术的前提下jsp也就不那么难了,对于jsp里一些细节上的东西,比如内置对象、标签等的内容随着在后面的逐步应用相信也会得到相应的理解和学习
J2EE逐项攻破(三)——JSP