jsp语法

JSP语法

JSP模板元素

JSP页面中HTML内容称之为JSP模板元素。
JSP模板元素定义了网页的基本骨架,既定义了页面的结构和外观。

JSP表达式

JSP脚本表达式(expression)用于将程序数据输出到客户

语法:<%= 变量或表达式%>
举例:当前时间:<%= new java.util.Date() %>

JSP引擎在翻译脚本表达式时,会将程序转成字符串,然后在相应位置用out.print("......")将数据输给客户端

JSP脚本表达式中的变量或表达式后面不能有分号。



JSP脚本片断

JSP脚本判断(scriptlet)用于在JSP页面中编写多行java代码
语法:
<%多行java代码%>
注意:JSP脚本片断中只能出现java代码,不能出现其它模板元素,JSP引擎在翻译JSP页面中,
   会将JSP脚本片断中的Java代码将被原封不动的放到Servlet的_jspService方法中。

JSP脚本片断中的java代码必须严格遵循java语法。
例如:每执行语句后面必须要用分号结束

在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。
举例:
	<%
		int x= 10;
		out.pringtln(x);
	%>
	<p>这是JSP页面文本</p>
	<%
		int y = 20;
		out.pringtln(x);
	%>
多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。
单个脚本片断中的java语句可以是不完整的,但是,多个脚本片断组合后的结构必须是完整的java语句
例如:
	<%
		for(int i=0;i<5;i++){
	%>
		<h1>www.baidu.con</h1>
	<%
		}
	%>

JSP声明

JSP页面中编写的所有代码,默认会翻译到servlet的serice方法中,而JSP声明中的java代码被翻译到_jspSerice方法的外面。
语法:
<%!
java代码
%>
所有,JSP声明可以用于定义JSP页面转换成的servlet程序的静态代码块、成员变量和方法

多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。
JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。
例:



JSP注释

JSP注释的格式
<%- 注释信息-%>
JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容

JSP指令

JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP 中的三大指令:
page指令
Include指令
taglib指令
JSP指令的基本语法格式:
<%@  指令  属性名="值" %>
举例:
	<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
如果一个指令有多个属性,这多个属性可有写在一个指令中,也可以分开写。
例如:
	<%@page import="java.util.Date"%>
	<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
也可写作:
	<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.Date"%>
page指令:
page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,
为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。

page指令的完整语法:
<%@ page
[ language="java" ] :嵌套java代码
[ extends="package.class" ] :通过它可以控制jsp翻译后的servlet继承谁,通常不用改
[ impot="{package.class|package.*},...." ]  :导入的java类
JSP引擎自动导入下面的包:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
可以在一条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.*"%>

[session="true|false"]:如果session置为true(默认),jsp被翻译为servlet的时候,服务器默认会在翻译后的servlet里创建一个session对象
[buffer="none | 8kb | sizekb"]:缓冲,在页面里通过out对象写数据,它默认不是直接写给浏览器,而是写入缓冲中,当缓冲满了,它才会写给浏览器。
none :关闭缓冲
8kb:默认

[autoFlush="true | false"]:自动刷新,默认为true

[isThreadSafe="true | false"]:这个属性用来说明该jsp线程是否安全。
[ errorPage="relative_url" ]:指定jsp的错误处理页面
errorPage属性的设置值必须使用相对路径,如果以"/"开头,表示相对于当前WEB应用程序的跟目录(注意不是站点根目录)
可以在web.xml文件中使用<error-page>元素为整个WEB应用程序设置错误处理页面,其中的<exception-type>子元素指定
异常类完全限定名,<location>元素指定以"/"开头的错误处理页面的路径
如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用。

[isErrorPage="true | false"]:当前页面是否是错误处理页面 默认为false
[contentType="text/html; charset=UTF-8"]:设置页面的类型,采用的编码
[ pageEncoding="UTF-8" ]:设置jsp页面的编码
[isELIgnored="true | false"]:是否忽略el表达式,默认是false

%>

使用page指令解决JSP中文乱码
  中文乱码形成的原因(通过下图我们中文乱码是因为编码不一致,解决乱码的方法便是,以什么编码存储,就以什么编码转译)
JSP程序存在有与servlet程序完成相同的中文乱码问题
输出响应正文时出现的中文乱码问题
读取浏览器传递的参数信息时出现的中文乱码问题

JSP引擎将JSP页面翻译成Servlet源文件时也可能导致中文乱码问题
JSP引擎将JSP源文件翻译成的Servlet源文件默认采用UTF-8编码,而JSP开发人员可以采用各种字符集编码来编写JSP源文件,
因此,JSP引擎将JSP源文件翻译成Servlet源文件时,需要进行字符编码转换

如果JSP文件中没有说明它采用的字符集编码,JSP引擎将把它当做默认的ISO8859-1字符集编码处理。

如何解决JSP引擎翻译JSP页面时的中文乱码问题
通过page指令的contentType属性说明JSP源文件的字符集编码
page指令的pageEncoding属性说明JSP源文件的字符集编码


include指令
include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。
所以include指令引入通常也称之为静态引入。
语法:
<%@ include file="relativeURL"%>
其中的file属性用于指定被引入文件的路径。路径以"/"开头,表示代表当前WEB应用。
细节:
被引入的文件必须遵循JSP语法。
被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,
JSP规范建议使用.jspf(JSP fragments) 作为静态引入文件的扩展名。
由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)


taglib指令
Taglib指令用于在JSP页面中导入标签

JSP标签

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成JSP页面难以维护。
JSP常用标签
<jsp:include>标签: 动态引入
 语法:
<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式才获得。
flush属性指定在插入其他资源的输出内容,是否先将当前JSP页面的已输出内容刷新到客户端。
<jsp:forward>标签: 请求转发
语法:
<jsp:forword page="relativeURL | <%=expression%>" />
page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式才获得。
<jsp:param>标签:
当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数
语法:
	<jsp:forword page="relativeURL | <%=expression%>" />
		<jsp:param name="paramName"   value="paramValue | <%= expression%>"/>
	  </jsp:forword>
<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数
<jsp:include>与include指令的比较
<jsp:include>标签是动态引入,<jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。
而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。
不管是<jsp:include>标签,还是include指令,它们都会把两个JSP页面内容合并输出,所以这个两个页面不要出现重复的HTML全局框架标签,否则输出给客户端的内容将会是一个格式混乱的HTML文档。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值