一、JSP概述
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
JSP全名为Java Server Pages,其根本是一个简化的Servlet设计。它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件。
JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
jsp是什么?
sun公司制定的一种服务器端动态页面技术规范。
JSP其实是一个以“jsp”为后缀的文件,该文件的内容主要是html和少量的java代码,容器会将jsp文件自动转换成一个servlet然后执行。
- jsp的组成
- jsp = html + java脚本 + jsp标签(指令)
- jsp中可直接使用的对象一共有9个,被称之为9大内置对象
- 3种java脚本: <%…%>:写java代码片段,(类似方法) <%=…%>:用于输出,用于输出一条表达式(或变量)的结果。 <%!…%>:声明,用来创建类的成员变量和成员方法(类似与类)
- jsp注释:<%– … –%> 当服务器把jsp编译成java文件时已经忽略了注释部分!
二、JSP处理过程
- 就像其他普通的网页一样,您的浏览器发送一个HTTP请求给服务器。
- Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。
- JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。
- JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。
- Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。
- Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。
- Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样。
三、JSP和SERVLET关系、JSP技术原理
四、JSP三大指令
1.page指令
用于定义JSP页面的各种属性
可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号分隔:
<%@ page import="java.util.Date,java.sql.*,java.io.*"%>
上面的语句也可以改写为使用多条page指令的import属性来分别引入各个包或类:
<%@ page import="java.util.Date"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
JSP 引擎自动导入下面的包:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
<%@ page [ language="java" ] 指定语言为java [ extends="package.class" ] 指定继承的类,当指明继承普通类时需要实现Servlet接口的相应方法 [ import="{package.class | package.*}, ..." ] //指定引入的包 [ session="true | false" ] //默认session为true,表示内置存在session对象,可以直接调用,如果没有,也可以通过request.getSession()获取 [ buffer="none | 8kb | sizekb" ] //缓存默认为8kb [ autoFlush="true | false" ] //缓存默认自动清空 [ isThreadSafe="true | false" ] //是否是线程安全的,默认是true,就是是否支持多线程调用. [ info="text" ] //提示信息,热字符串 [ errorPage="relative_url" ] errorPage 的意思是设置当前页面要引入错误页面。也就是浮面当前页面如果出现错误就会跳转到errorPage所指定的页面。 [ isErrorPage="true | false" ] //当前页面是否是错误页面,默认为false [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] //设置页面内容编码 [ pageEncoding="characterSet | ISO-8859-1" ] //当前页面编码 [ isELIgnored="true | false" ] //是否支持EL表达式 %>
2.Include指令
include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
语法:
<%@ include file="relativeURL"%>
其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。
细节:
被引入的文件必须遵循JSP语法。
3.taglib指令
Taglib指令用于在JSP页面中导入标签库
五、九大内置对象
- 在jsp中无需声明即可直接使用的9个对象
- out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
- config(ServletConfig):对应“真身”中的ServletConfig;
- page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象,引用为Object类型;
- pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
- exception(Throwable):只有在错误页面中可以使用这个对象;
- request(HttpServletRequest):即HttpServletRequest类的对象;
- response(HttpServletResponse):即HttpServletResponse类的对象;
- application(ServletContext):即ServletContext类的对象;
- session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。
- pageContext
- Servlet中有三大域,而JSP中有四大域! ServletContext:整个应用程序 session:整个会话(一个会话中只有一个用户) request:一个请求链! pageContext:一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据! 域对象 代理其他域:pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE); 全域查找:pageContext.findAttribute(“xxx”);从小到大,依赖查找! 获取其他8个内置对象