JSP(第二章:语法)

1. JSP是如何执行的?

2. JSP注释

3. 脚本元素

1. JSP是如何执行的?

(1)客户端请求
(2)Web容器将jsp页面转译成servlet的源代码.java
(3)Web容器将产生的源代码经过编译.class
(4)Web容器加载编译后的代码并执行
(5)把执行结果响应至客户端

2. JSP注释

<!--html注释-->
<%-- 隐藏注释 --%>
<% //JAVA的单行注释 %>
<% /*JAVA的多行注释*/ %>

其中注释在客户端查看源代码时可以看到,而隐藏注释是看不到的。

3. 脚本元素

3.1 JAVA脚本

格式:<% 任意的JAVA代码 %>

3.2 表达式

格式:<%= %>

=后面必须是字符串变量或者被转换成字符串的表达式,不需要以;结束,只有一行。

如:

<%="HelloWorld"%>
<%=i+1%>
<%=request.getParameter("username")%>

3.3 声明

格式:<%! %>

<%! int accesscount=0; %>
<%= ++accesscount %>
<!--两种声明的区别-->
<body>
    <%! int accesscount1=0; //全局变量,刷新不重置 %>
    <% int accesscount2=0; //局部变量,刷新重置 %>
    <%= ++accesscount1 %>
    <%= ++accesscount2 %>  
</body>
<!--刷新页面,全局变量accesscount1增加1,局部变量accesscount2不增加-->

Servlet的对象只有一个,只初始化一次,所以accesscount1的值会不断的增加。
但是accesscount2会重新声明一次,每次的值都是初始值,不会变。

注意:%和=之间不要有空格。

3.4 指令元素

指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中。
directive (编译指令)相当于在编译期间的命令。编译期间:程序还没有开始运行。

格式:<[email protected] 属性=“属性值”%>

常见的directive: page、include、talib

3.4.1 page指令

page:指明与JSP container的沟通方式
<[email protected]

*language=”java” *——可以省略,如果不省略,只能取java。

extends=”classname”——指定JSP页面从谁继承出来的,就是JspBase,不需要指定。

buffer=”none|kb size”——none不缓冲,默认8k。页面先写到内存,然后一次性的写到客户端。

session=”true|false”——是否能使用session对象。用的比较少。

autoflush=”true|false”——缓冲器是否自动清除,默认true。

isThreadSafe=”true|false”——默认false,不需要指定。

info=”infotext”——JSP相关的描述性信息,很少用。

import=”importlist”——相当于java的import语句,导入指定包或类名列表。

errorPage=”errorPageURL”——页面出错后会显示哪个页面的内容。

isErrorPage=”true|false”——当前页面是不是显示错误的页面。

contentType=”text/html;charset=gb2312”——编码格式

%>

<[email protected] import="java.util.*,java.sql.*" %>
<!--如果引入多个包,用逗号隔开。或者写多个import都行。-->

例子:

【TestErr.jsp】
<[email protected] errorPage="ErrPage.jsp"%>
<%
int i=6,j=0;
out.println(i/j);
%>
【ErrPage.jsp】
<[email protected] contentType="text/html;charset=gb2312" %>
<[email protected] isErrorPage="true" %>
<!--本页面是个错误信息显示页-->
<html>
    <body text="red">
        错误信息:<%out.println("除数不能为0!");%>
    </body>
</html>

3.4.2 include指令

“静态包含”,将指定的JSP或者HTML文件包含进来,不能传参数。

JSP引擎会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(效率比较高)
将文件内容原样放到include所在的位置,然后进行编译。(注意:程序还没有开始运行)

格式:<[email protected] file=”url”%>

例子:

【TestInclude.jsp】
<body>
    <[email protected] file="TestUser.jsp" %>
    <%out.println("欢迎");%>
</body>
【TestUser.jsp】
<body>
    <%out.println("hi:"+request.getParameter("user"));%>
</body>

3.4.3 taglib指令

引入标签库的定义,可以 是自定义标签。(不常用)

3.5 动作元素

3.5.1 <jsp:include>

用于”动态包含”JSP程序或者HTML文件等。

除非这个指令会被执行到,否则它是不会被Tomcat等JSP engine编译。

【格式1:】
<jsp:include page=”URL” flush=”true”/>
【格式2:】
<jsp:include page=”URL” flush=”true”>
    <jsp:param name=”paramname” value=”paramvalue”/>
</jsp:include>
<!-- jsp:param用来设定include文件时的参数和对应的值。 --> 
语法 描述
jsp:include 在页面被请求的时候引入一个文件。
jsp:useBean 寻找或者实例化一个JavaBean。
jsp:setProperty 设置JavaBean的属性。
jsp:getProperty 输出某个JavaBean的属性。
jsp:forward 把请求转到一个新的页面。
jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element 定义动态XML元素
jsp:attribute 设置动态定义的XML元素属性。
jsp:body 设置动态定义的XML元素内容。
jsp:text 在JSP页面和文档中使用写入文本的模板

区别:include编译指令是在JSP程序的转换时刻就将file属性指定的内容嵌入,然后再编译执行;而include动作指令在转换的时刻不会有编译,只有在客户端请求(运行)时如果被执行到才会被动态的编译载入。include不能带参数,而jsp:include可以带参数。

3.5.2 <jsp:forward>

jsp:forward用于将一个JSP的内容传送到page所指定的JSP程序或者servlet去处理。

【格式1:】
<jsp:forward page=”URL” flush=”true”/>
【格式2:】
<jsp:forward page=”URL” flush=”true”>
    <jsp:param name=”paramname” value=”paramvalue”/>
</jsp:forward

例子:

【forward.jsp】
<html>
    <head>
        <title>Forward Example</title>
    </head>
    <!--最终显示的是forforward.jsp中的内容-->
    <body bgcolor=red>
        Welcome to forward.jsp
        <%--直接跳转到forforward.jsp,这两个jsp用的是同一个request--%>
        <jsp:forward page="forforward.jsp" />
    </body>
</html>

【forforward.jsp】
<html>
    <head>
        <title>forforward.jsp</title>
    </head>   
    <body bgcolor=blue>
        Welcome<br>
        Here is forforward.jsp
    </body>
</html>
【结果:】
页面的内容是forforward.jsp的内容,但是地址栏仍然是forward.jsp。
jsp:forward 发生在服务器端,客户端并不知道已经跳转到别的页面了。
但是forward和forforward是同一个request对象。
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

客官,赏一瓶怡宝吧。

支付宝
微信