博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp语法
阅读量:4102 次
发布时间:2019-05-25

本文共 4700 字,大约阅读时间需要 15 分钟。

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);	%>	

这是JSP页面文本

<% int y = 20; out.pringtln(x); %>
多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。
单个脚本片断中的java语句可以是不完整的,但是,多个脚本片断组合后的结构必须是完整的java语句
例如:
<%		for(int i=0;i<5;i++){	%>		

www.baidu.con

<% } %>

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: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文档。
你可能感兴趣的文章
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.4、获取对象信息
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
破4!《我想进大厂》之Java基础夺命连环16问
查看>>
音视频干货|深入Storyteller:实时协同Tutorial编辑器
查看>>
年轻人不讲武德,竟然重构出这么优雅后台 API 接口
查看>>
这份笔记研究完,进大厂是个“加分项”...
查看>>
写代码有这16个好习惯,可以减少80%非业务的bug
查看>>
《我想进大厂》之Spring夺命连环10问
查看>>
空指针的传说
查看>>
为什么阿里巴巴禁止使用 Executors 创建线程池?
查看>>
面试官问我平时怎么看源码的,我把这篇文章甩给他了。
查看>>
这十一条程序员必备软技能,你一定要知道
查看>>
为什么你写的拦截器中不能注入Java bean?
查看>>
2020 年度编程语言排行榜出炉!C 语言称霸,Java 遭遇滑铁卢…….
查看>>
Android中屏幕密度和图片大小的关系分析
查看>>
树立个人品牌:让名企hr们主动来找你
查看>>
Ubuntu上Lamp的搭建
查看>>
Android内核解读-Android系统的开机启动过程
查看>>
Android内核解读-应用的安装过程
查看>>