什么是JSP
JSP全名是JavaServer Pages,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为.jsp。JSP是服务器端的动态资源,其主要作用是显示和获取数据。
JSP技术所开发的Web应用程序是基于Java的,它可以用一种简捷而快速的方法从Java程序生成Web页面,其使用上具有如下几点特征:
l 跨平台:由于JSP是基于Java语言的,它可以使用Java API,所以它也是跨平台的,可以应用于不同的系统中,如Windows、Linux等。当从一个平台移植到另一个平台时,JSP和JavaBean的代码并不需要重新编译,这是因为Java的字节码是与平台无关的,这也应验了Java语言“一次编译,到处运行”的特点。
l 业务代码相分离:在使用JSP技术开发Web应用时,可以将界面的开发与应用程序的开发分离开。开发人员使用HTML来设计界面,使用JSP标签和脚本来动态生成页面上的内容。在服务器端,JSP引擎(或容器,本书中指Tomcat)负责解析JSP标签和脚本程序,生成所请求的内容,并将执行结果以HTML页面的形式返回到浏览器。
l 组件重用:JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型,在JSP页面中,甚至在整个项目中,都可以重复使用这个JavaBean,同时,JavaBean也可以应用到其他Java应用程序中。
l 预编译:预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译(不修改JSP的内容)。编译好的代码将被保存,在用户下一次访问时,会直接执行编译好的代码。这样不仅节约了服务器的CPU资源,还大大的提升了客户端的访问速度。
JSP就是Servlet;他们两者没有区别
JSP脚本元素是指嵌套在<%和%>之中的一条或多条Java程序代码。通过JSP脚本元素可以将Java代码嵌入HTML页面中,所有可执行的Java代码,都可以通过JSP脚本来执行。(不建议在jsp页面中嵌入java代码:后期维护特别麻烦!!!!)
JSP脚本元素主要包含如下三种类型:
l JSPScriptlets <%...%>在这个里面书写内容等同于在方法中书写代码
Java语句;方法中能放什么,它就能放什么。如果在这个元素里面定义了一个变量,那么此时他就是一个局部变量!
l JSP声明语句 <%!...%> 在这个里面书写内容等同于在类中书写代码(声明)
l JSP表达式 <%=…%> 里面的代码会被输出!
Java表达式;等同与resopnse.getWriter().print()。写到这里的东西,都是用来输出的!
JSP注释
同其他各种编程语言一样,JSP也有自己的注释方式,其基本语法格式如下:
<%-- 注释信息 --%>
需要注意的是,Tomcat在将JSP页面编译成Servlet程序时,会忽略JSP页面中被注释的内容,
不会将注释信息发送到客户端
| jsp源码 | java源码 | html源码 |
jsp注释 | 有 | 无 | 无 |
java注释 | 有 | 有 | 无 |
html注释 | 有 | 有 | 有 |
page指令
在JSP页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式,JSP页面采用的语言等,这时,可以通过page指令来实现。page指令的具体语法格式如下所示:
<%@ page 属性名1="属性值1"属性名2="属性值2"...%>
在上面的语法格式中,page用于声明指令名称,属性用来指定JSP页面的某些特性。page指令提供了一系列与JSP
页面相关的属性(详细请查询API)
<%@ include file="被包含的文件地址"%>
include指令只有一个file属性,该属性用来指定插入到JSP页面目标位置的文件资源。
JSP隐式对象
内置对象
名称 | 类型 | 描述 |
out | javax.servlet.jsp.JspWriter | 用于页面输出 |
request | javax.servlet.http.HttpServletRequest | 得到用户请求信息, |
response | javax.servlet.http.HttpServletResponse | 服务器向客户端的回应信息 |
config | javax.servlet.ServletConfig | 服务器配置,可以取得初始化参数 |
session | javax.servlet.http.HttpSession | 用来保存用户的信息 |
application | javax.servlet.ServletContext | 所有用户的共享信息 |
page | java.lang.Object | 指当前页面转换后的Servlet类的实例 |
pageContext | javax.servlet.jsp.PageContext | JSP的页面容器 |
exception | java.lang.Throwable | 表示JSP页面所发生的异常,在错误页中才起作用 |
表1-1 pageContext操作属性的相关方法
方法名称 | 功能描述 |
void setAttribute(String name,Object value,int scope) | 用于设置pageContext对象的属性 |
Object getAttribute(String name,int scope) | 用于获取pageContext对象的属性 |
void removeAttribute(String name,int scope) | 删除指定范围内名称为name的属性 |
void removeAttribute(String name) | 删除所有范围内名称为name的属性 |
Object findAttribute(String name) | 从4个域对象中查找名称为name的属性 |
表列举了pageContext对象操作属性的相关方法,其中,参数name指定的是属性名称,参数scope指定的是属性的作用范围。pageContext对象的作用范围有4个值,具体如下:
l PageContext.PAGE_SCOPE:表示页面范围
l PageContext.REQUEST_SCOPE:表示请求范围
l PageContext.SESSION_SCOPE:表示会话范围
l PageContext.APPLICATION_SCOPE:表示Web应用程序范围
需要注意的是,当使用findAttribute()方法查找名称为name的属性时,会按照page、request、session和application的顺序依次进行查找,如果找到,则返回属性的名称,否则返回null。