JSP(Java Server Page),由Sun公司倡导,许多公司参与,于1999年(与我年龄一样!!!)推出的一种Web服务设计标准。
注释
HTML注释:
1 | <!--需要注释的HTML内容--> |
JSP注释:
1 | <%--需要注释的JSP内容--%> |
JSP引擎把HTML注释交给用户,因此用户在浏览器中查看源代码时可看到HTML注释部分,但引擎会忽略JSP注释,即在编译JSP时忽略JSP注释部分
例:
1 | <%@ page import="java.util.Date" %> |
1 | <%@ page import="java.util.Date" %><%-- |
Java代码块(程序片)
java代码块也被称为JSP脚本,是使用<% %>括起来的部分,其中可以编写java代码。在其中编写的代码会被JSP引擎翻译至内置的Servlet中的_jspService()方法中作为方法中的java语句出现。
注意:jsp代码块可以放置到jsp页面的任何位置,可以放置任意数量。但他们都会按照顺序放置到Servlet中的_jspService()方法中。也就是说,其执行顺序与其在jsp中页面的出现顺序一致。
1 | <% |
(1)声明的变量不能添加权限访问修饰符
(2)不能定义方法(本身就在方法中,不允许方法的嵌套定义)
(3)不能添加静态语句块
声明语句块
JSP的生命语句块使用<%! %>括起来,生命语句块的内容将被JSP引擎翻译到Servlet的类体中,没有包含到哪个方法中。
声明语句中可声明实例变量、实例方法、静态方法、静态代码块等内容,这里面占有的内存空间直到引擎关闭才释放
1 | <%! |
表达式块
<%= %>,其中%与=之间不能存在空格,表达式块中插入表达式,这个表达式必须能求值。表达式的值有服务器负责计算,并将计算结果用字符串形式发送到用户端显示。
1 | <%= sum(x)%> |
经过编译后语句为out.print(sum(x));
内置对象
内置对象名(引用名) | 类型 |
---|---|
pageContext | javax.servlet.jsp.PageContext |
request | javax.servlet.http.HttpServletRequest |
session | javax.servlet.http.HttpSession |
application | javax.servlet.ServletContext |
response | javax.servlet.http.HttpServletResponse |
config | javax.servlet.ServletConfig |
out | javax.servlet.jsp.JspWriter |
page | java.lang.Object |
exception | java.lang.Throwable |
JSP指令
格式:
1 | <%@ 指令名称 属性名=属性值 属性名=属性值……%> |
JSP共包含三种指令:page指令(页面指令)、include指令(包含指令)、taglib指令(标签库指令)
page指令
常用:
charset是指服务器发往客户端展现时的编码;
page指令属性名 | 解释 |
---|---|
pageEncoding | 设置当前JSP页面所用的字符编码格式。即用户在浏览器中通过右击查看编码所看到的编码格式,默认相应类型为html |
contentType | “MIME类型;charset=编码” |
import | 用于完成在JSP页面中导入指定的类,其被JSP引擎翻译为Servlet中的import语句 |
errorPage | errorPage=”jsp文件”,页面发生错误时跳转到指定页面,但页面的路径不会发生改变 |
isErrorPage | true/false,是否显示错误信息 |
session | 默认为true |
include指令
1 | <%"文件的URL"%> file= |
在翻译之前进行的include,作用是在JSP页面出现该指令处,静态的插入一个文件。
静态插入:当前的JSP页面和插入的文件合并成为一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译为java文件
注意:
JSP页面的contentType属性只能唯一,所以要包含的文件必须和外面的文件contentType一致,否则500错误。
两个文件之间可以共享变量,如果不想共享变量,需要在两个文件中设置不同的变量名
1 | text/html是以html的形式输出,比如就会在页面上显示一个文本框。text/plain形式就会在页面上原样显示这段代码。 |
很多大公司在使用JSP进行网站制作时,明确规定不允许使用Java代码块以及表达式,因为这会使得页面看起来杂乱无章,取而代之的为EL表达式,JSTL标签等等
JSP动作
动作标记是一种特殊标记,它影响JSP运行时的功能
1 | <jsp:动作名称 属性名=属性值 属性名=属性值……></jsp:动作名称> |
forward动作
1 | <jsp:forward page="要转向的页面"/> |
该指令的作用是:从改指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。
注意:当前页面使用forward动作标记转向后,尽管页面看到了转向后页面的效果,但浏览器地址栏中显示的仍为转向前的URL地址,因此,如果刷新浏览器的显示,将再次执行当前浏览器地址中显示的JSP页面
include动作
1 | <jsp:include page="文件的URL"/> |
include指令标记是在编译阶段就处理所需要的文件,被处理的文件在逻辑和语法上依赖当前的JSP页面,优点是页面的执行速度快;而include动作标记是在jsp页面运行 时才处理文件,被处理的文件在逻辑和语法上独立于当前的JSP页面,优点是可以使用param子标记更灵活的处理所需要的文件
param动作
1 | <jsp:param name="名字" value="指定给param的值"> |
param标记不能单独使用,需作为jsp:include,jsp:forward,jsp:plugin标记的子标记使用