Jsp基础
对于Jsp/Servlet来说,web.xml文件的配置是十分重要的,而从serrvlet3.0开始,这个文件已经不再是必须的了。可是习惯起见,很多人仍然会选择保留该文件。
Jsp文件是在html中嵌入java脚本,因此显得要比直接开发Servlet,简单许多。但是jsp的本质其实就是servlet。运行期间,tomcat会根据jsp页面生成对应的Servlet的java文件和class文件。所以第一次访问一个jsp文件时,会比较慢,因为它需要去编译成一个Servlet文件。当然作为访问者是不需要安装任何客户端的,因为jsp生成的内容就是一个标准的html页面。
Jsp使用语法
在静态的html页面中嵌入java脚本就是jsp的编写方式,但是我们需要知道jsp页面中所要求的语法(也就是允许包含的成分)。这里一共是有4种,掌握了这4种语法,就可按以下步骤开发jsp页面了。
- 编写一个静态页面
- 用合适的方法向页面上嵌入语法。为静态页面增加动态内容。
四种基本语法:
(1)JSP注释
注释作为一种开发过程中的提示,不会输出到客户端。使用<%– –%>或“<!– –>”
(2)JSP声明
Jsp声明用于声明变量与方法,看上去不用定义类就可以定义方法,但实际上,Jsp声明会转换成对应Servlet的成员变量或成员方法,仍然符合Java语法。jsp声明中独立存在的方法只是一种假象,它在jsp编译的过程中,成为了生成的servlet中的成员方法。
<%!声明部分%>
这种语法下声明的变量或方法都转换为了对应的Servlet的成员变量和方法。声明过程可以使用public和private等修饰符,但是不能使用abstract,因为这样肯定会导致Servlet变成抽象类,从而导致无法实例化。
PS:无论你从多少个浏览器对其访问,都是访问了同一个实例,因为每个Servlet在容器中只有一个实例。
(3)JSP输出表达式
jsp提供了一种输出表达式值的简单方法:<%=表达式%>
实际上是可以代替原来的out.print输出语句。输出表达式后面不用带“;”。
(4)JSP脚本
一般来说所有可执行的java代码都可以通过jsp脚本嵌入HTML页面。Jsp脚本的内容将转换成Servlet里的_jspService方法中的可执行性代码。在脚本里也可以声明变量,这时声明的变量里是局部变量。但是不能使用访问控制符修饰,也不可使用static修饰。
jsp脚本内容之所以可以控制jsp页面的静态内容,是因为jsp页面里的所有静态内容都将有_jspService方法里的输出语句来进行输出,jsp脚本因为会被转化成_jspService里的可执行代码,所以jsp脚本里不允许定义方法,因为java的方法中不能再定义方法。当然脚本里也可以连接数据库和执行数据库操作。
JSP的三个编译指令
常见的编译指令有:
page:该指令指的是针对当前页面的指令。
include:用于指定包含另一个页面。
taglib:定义和访问自定义标签的指令。
使用编译指令的语法是:<%@ 编译指令名 属性名=“属性值”%>
page指令
page指令是用于定义本页面的一些属性参数的,一般位于顶端,并且可以包含多条page指令。
<%@page
//声明当前jsp页面使用的脚本语言的种类
[language=”java”]
//声明本jsp页面编译产生的java类所继承的父类,或者实现的接口
[extends=”package.class]
//用来导入包,servlet,http,jsp,lang包是不用显示导入的
[import=”package.class|package.*,..”]
//设置这个页面是否需要session
[session=”true|false”]
//指定缓冲区的大小,out用于缓存jsp页面对浏览器的输出
[buffer=”none|8 KB|size KB]
//设置是否在缓冲区即将溢出时强制输出内容
[autoFlush=”true|false]
//设置是否线程安全
[isThreadSafe=”true|false]
//设置程序的信息,看作是jsp的说明通过Servlet.getServletInfo()
[info=”text”]
//指定错误处理页面
[errorPage=”relativeURL”]
//设置生成网页的文件格式(MIME类型)和编码字符集
//默认的MIME是text/html,字符集ISO-8859-1
[contentType=”mimeType[;charset=characterSet]”|”text/html;charSet=ISO-8859-1”]
//指定生成网页的编码字符集
[pageEncoding=”ISO-8859-1”]
[isErrorPage=”true|false”]
%>
include指令
include指令分静态和动态,静态指令会将被包含的页面加入本页面,融合成一个页面,被包含页面甚至可以不是一个完整的页面。
语法:<%@include file=”relativeURLSpec”%>
如果被嵌入的页面需要经常改变,建议使用动态include语句
jsp:include
JSP的7个动作指令
与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作。
1.jsp:forward:执行页面转向,将请求的处理转发到下一个页面
2.jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。
3.jsp:include: 用于动态引入一个JSP页面
4.jsp:plugin:用于下载JavaBean或Applet到客户端
5.jsp:useBean:创建一个JavaBean的实例
6.jsp:setProperty:设置JavaBean实例的属性值
7.jsp:getProperty:输出JavaBean实例的属性值。
jsp:forward指令:
//额外增加了请求参数,可以通过HttpServletRequest类的getParameter()方法获取
<jsp:forward page="{relativeURL|<%=expression%>}">
{<jsp:param.../>}
</jsp:forward>