JSP学习个人心得

1,什么是jsp?

一种动态网页技术。一种专门用于进行数据展示的Servlet,普通的Servlet是用于完成业务逻辑处理的。
一样的单例多线程。

2,jsp 的注释

1,<%--  --%>	网页查看源码时不可见
2,<!--  -->	网页查看源码时可见

3,JSP的Java代码块(jsp小脚本)

1,在<% %>中进行编写。
     执行顺序与其放置的顺序相关。
2,需要注意的是,jsp小脚本是被翻译到Servlet的_jspService方法中。(相当于Java中的局部变量)
     故在JSPJava代码块中,不能出现一些内容:
	1,声明的变量不能添加权限访问控制符
	2,不能定义方法。
	3,不能定义静态语句块。

4,JSP的声明语句块

1,在<%!  %>中声明。
2,在这个块的内容,将被翻译到Servlet的实体中,没用包含到所谓的哪个方法中,相当于Java中的成员变量和成员方法。
3,故在这个块中,可以出现。成员变量,静态变量,静态方法,静态代码块,但是不能出现普通的Java语句。
4,值得注意的是,JSP是一种单例多线程的模式,所以成员变量尽量不要声明与使用,因为比较危险。

5,JSP的表达式块

1,<%=   %>
2,在JSP页面中输出变量,常量,及它们组成的各种表达式的值。(无分号)
3,翻译到_jspService方法中的out.write()中输出。

6,JSP内置对象(9个)

1,pageContext(最小的那个域)
	其所含有的set,get,remove Parameter()的方法基本没用。、
	但是其含有的部分get方法可以获得其他8个内置对象。
2,servletContext(application)
	Servlet中详细阐述过,不过多阐述。
3,out
4,page(不常用)
	即Servlet对象本身。
5,exception
	配合page指令使用,当页面中的page指令的isErrorPage属性被指定为true,exception会展示出来。
6,request
7,response
8,session
9,config

7,JSP两大编译指令

关于指令格式:
	<%@ 指令名称 属性=属性值 属性2=属性值2 属性3=属性值3 .。。。。。%>

1,page指令(具体变化需要参照Servlet的_jspService方法)
	1,pageEncoding	配置当前页面使用的编码格式
	2,contentType	配置当前页面的MIME格式和编码格式,一般与1不同时使用
	3,import	配置当前页面需要使用的类,可以导入多个类,类与类之间用“,”逗号隔开。
	4,errorPage	配置当前页面发生错误后,需要跳转的页面,毕竟总是跳转至404,客户体验感会不好。
	5,iserrorPage	配置当前页面是否为错误页面
	6,session
2,include指令	<%@ include file="文件名" %>
	1,配置指定的文件插入当前页面,值得注意的是,如果插入的是错误页面,那么include将会出现只存在错误页面的问题。
	2,file为唯一的属性,专门用来指定要插入的文件。
	3,这种include指令引入文件,又称为静态联编,被引入的文件不会生成新的Servlet,而是直接被翻译到_jspService方法。与此同时,局部变量将会共享。
	4,使用include可以达到一改全改的效果。

8,jsp动作指令

1,关于指令格式:<jsp:动作名称  属性名=属性值  属性名=属性值   属性名=属性值 。。。。。></jsp:动作名称>
	             或<jsp:动作名称  属性名=属性值  属性名=属性值   属性名=属性值 。。。。。/>
2,重要的动作名称
	1,include	请求转发至对应的page页面
	2,forward	请求转发至对应的page页面
		以上两个动作均为请求转发,底层调用的是RequestDispatacher的两个方法。
		动作指令的include引入文件,称为动态联编,相当于在_jspService方法去调用该类中的其他方法。
		动态联编一般应用于文件中重名问题的解决。
	3,useBean
	4,setProperty
	5,getProperty
		以上方法与Java类有关,后边阐述

9,EL表达式

1,Expression Language 表达式语言。
	一种在JSP文件中获取数据的方式。在JSP页面的任何静态部分(即非代码块,声明块,表达式块)都可以使用${expression}获取数据。
	唯一的小缺点,不支持字符串的操作。
2,从域空间中获得数据
	在这个板块中,我们用到了在servlet中的相关Attribute方法。
	1,四大域
		1>pageContext	在该域获取对象,pageScope.属性名
		2>requestContext	在该域获取对象,requestScope.属性名
		3>sessionContext	在该域获取对象,sessionScope.属性名
		4>applicationContext (又名servletContext),application无需创建,故方便使用。 在该域获取对象,applicationScope.属性名
	2,访问Bean属性
		域名Scope.Bean名.属性名,需要注意的是,在Bean中需要提供对应的get方法,否则无法获取。
		eg:${pageScope.student.name},底层调用的是name的get()方法。
	3,访问数组,List,Map中的数据
		与上述的2的访问基本没啥差别。值得注意的是数组,List的下标越界,不会报错,只是不显示而已。
	4,运算符
		与Java中的运算符没有什么差别,值得注意的是,empty 这个运算符(布尔类型)。
		empty	判断当前对象,字符串,集合等是否定义,是否为空,若是,则为true;
	5,EL内置对象(11个,前10个map类型,最后一个为域)
		1>pageScope
		2>requestScope
		3>sessionScope
		4>applicationScope
		5>param			地址栏请求参数
		6>paramValues		地址栏请求参数值
		7>initParam		servletContext的初始化参数
		8>heard			请求头
		9>heardValue		请求头的值
		10>cookie		
		11>pageContext		

10,EL自定义函数

1,定义函数
	定义一个类,通过类中的某个方法(静态,static 公共 piblic)实现所需要的功能
2,注册函数
	1>/WEB-INF下添加一个扩展名为.tld的文件,将定义好的函数在这个文件中进行注册。
	2>添加约束条件,可在tomcat/weabapps/examples/WEB-INF/jsp2/jsp2-example-taglib中复制。
		<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
				http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
			version="2.0">
		</taglib>
	3><tlib-version>1.0</tlib-version>		 指定函数库版本号
	     <short-name>myfunction</short-name>		 指定函数库名称,一般与tld文件名一致
	     <uri>http://www.sxflow.cn/jsp/mytig</uri>	 指定所对应函数库的url
	4><function>
	    <name>hello</name>					对应的函数名称
	    <function-class>cn.sxflow.tiglib.Test01</function-class>		实现功能的类的全名
	    <function-signature>java.lang.String hello()</function-signature>	实现功能的方法的描述 类的返回值类型(全名)   类名(	参数的类型(全名)	)
	    </function>
3,使用函数
	1,<%@ taglib uri = "http://www.sxflow.cn/jsp/mytig"  prefix = "myfunction" %>
	2,${myfunction:hello() }

11,自定义标签

1,定义标签处理器,实现javax.servlet.jsp.tagext.SimpleTag接口,或者继承javax.servlet.jsp.tagext.SimpleTagSupport(官方的,更为强势)
	其中的几个重要方法:
		dotag()		服务器端自动调用,核心方法。自定义标签功能的实现均在这个方法中。
		getParent()	获得当前标签的父标签的引用。
		getJspBody()	
		getJspContext()	
		setJspBody()
		getJspContext()
2,注册标签处理器,在自定义EL函数的tld文件中的<taglib/>标签下添加类似
	<tag>
	<name>clientIP</name>			自定义标签名字
	<tag-class>cn.sxflow.tiglib.Test02</tag-class>	标签处理器完整类名
	<body-content>empty</body-content>	其值有四个选项,empty只是其中一个
	</tag>
     的这种格式,即完成了对自定义标签的注册。
3,<body-content>的四个值的简单描述
	empty		没有标签体
	scriptless		自定义的标签具有标签体,但标签体文本不能含有Java脚本,但可以包含 EL表达式,并可以对其进行计算。
	tagdependent	会将标签体的内容原样显示在浏览器,EL表达式也不会对其进行计算,而是被当作普通的字符串。
	JSP		对继承SimpleTagSupport的标签处理器无法使用,会报错。除此之外,其功能同tagdependent
4,自定义标签的几种类型
	1,无标签体
		无需多言,上述的三条就是无标签体的创造步骤
	2,有标签体
		1>定义标签处理器
			通过jspBody()获得当前标签的标签体,之后对标签体进行处理,如需将其写入浏览器对应的位置,则需要使用带有缓冲区的字符流,如StringWriter
			将jspBody写入输出流中,然后获得JSP的标准输出流对象,然后对从缓存中获取的标签文本进行处理,然后输出给浏览器
		2>注册标签浏览器,根据需求选择body-content的类型
	3,带属性的标签
		1>标签处理器的属性,在其的标签处理器中对应的是一个具有set方法的属性。
		2>在标签处理器中,根据标签属性的值进行判断,该执行哪些动作与方法。
		3>注册标签处理器的时候,需要在<tag>标签下加入<attribute>自标签,
			如:<attribute>
				<name>id</name>		属性的名称
				<required>true</required>		属性是否必须
				<rtexprvalue>true</rtexprvalue>	属性是否支持动态语句,如EL表达式,JSP表达式块。(runtime expression value)
			     </attribute>
	4,以上三种的自由组合
5,自定义标签库的打包发行

12,JSTL

1,JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,16个对字符串进行处理的函数标签库
2,EL函数标签库
	fn:contains(string, substring)	如果参数string中包含参数substring,返回true
	fn:containsIgnoreCase(string, substring)	如果参数string中包含参数substring(忽略大小写),返回true
	fn:endsWith(string, suffix)	如果参数 string 以参数suffix结尾,返回true
	fn:escapeXml(string)	将有特殊意义的XML (和HTML)转换为对应的XML实体字符,并返回转义后的字符
	fn:indexOf(string, substring)	返回参数substring在参数string中第一次出现的位置
	fn:join(array, separator)	将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
	fn:length(item)		返回参数item中包含元素的数量。
	fn:replace(string, before, after)返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果
	fn:split(string, separator)	返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素
	fn:startsWith(string, prefix)	如果参数string以参数prefix开头,返回true
	fn:substring(string, begin, end)返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符
	fn:substringAfter(string, substring)返回参数substring在参数string中后面的那一部分字符串
	fn:substringBefore(string, substring)返回参数substring在参数string中前面的那一部分字符串
	fn:toLowerCase(string)	将参数string所有的字符变为小写,并将其返回
	fn:toUpperCase(string)	将参数string所有的字符变为大写,并将其返回
	fn:trim(string)		去除参数string 首尾的空格,并将其返回
3,核心标签库	http://java.sun.com/jsp/jstl/core
4,格式化标签库	http://java.sun.com/jsp/jstl/fmt

13,关于EL的一些特性

1,不能出现在JSP 动态部分
2,只允许在四大域中获取数据
3,不能抛出空指针异常,不会出现数组下标越界异常
4,不具有处理字符串的能力。

猜你喜欢

转载自blog.csdn.net/qq_42036640/article/details/84181257
今日推荐