1、问题JSP使用情形;使用情形;2.1 JSP简单示例【程序清单程序清单2-12-1】文件名为文件名为demo.jspdemo.jsp!-简单简单JSPJSP程序程序%-JSP-%for(int i=3;i%for(int i=3;i FONT SIZE=FONT SIZE=本行字体大小是本行字体大小是号字号字!%2.2 JSP 编译指令编译指令是通知编译指令是通知JSP引擎在引擎在编译代码时编译代码时要要处理的消息。处理的消息。JSP包括三种编译指令:包括三种编译指令:page指指令、令、include指令和指令和taglib指令。指令。taglib指令指令用于引入自定义标签,将在以后涉及。用
2、于引入自定义标签,将在以后涉及。指令的定义格式为:指令的定义格式为:2.2.1 page指令page指令应放在页面开始,用于指示针对当指令应放在页面开始,用于指示针对当前页面的设置前页面的设置2.2.2 include指令用于将另一个文件的内容嵌入到当前用于将另一个文件的内容嵌入到当前JSP文件中。格式如下:文件中。格式如下:该指令是编译时静态的将目标内容包含到该指令是编译时静态的将目标内容包含到当前当前JSP文件中,在文件中,在JSP页面被转化成页面被转化成servlet之前和它融合到一起。之前和它融合到一起。2.3 JSP动作标签动作标签是指示动作标签是指示JSP程序运行时的动作。程序运行
3、时的动作。JSP含含7个标准的动作标签:个标准的动作标签:include、useBean、setProperty、getProperty、forward、plugin、param。2.3.1 动作标签用于程序执行时动态地将目标文件包含进来。用于程序执行时动态地将目标文件包含进来。这个被包含的文件也会被这个被包含的文件也会被JSP 容器编译执行。容器编译执行。动作标签的使用格式为:动作标签的使用格式为:2.3.2 动作标签用于实现页面重定向。用于实现页面重定向。行为行为是在服务器端完成的是在服务器端完成的使用格式如下:使用格式如下:1.动作标签 动作用来实例化一个页面使用的动作用来实例化一个页面
4、使用的JavaBeans组件。最简单的格式如下:组件。最简单的格式如下:表表2-2 2-2 指令的属性指令的属性属性属性含义含义idid给给beanbean定义一个标识变量,页面中通过该变量访问定义一个标识变量,页面中通过该变量访问BeanBean。classclass定义定义beanbean的带路径的类名。的带路径的类名。scopescope指明指明beanbean的作用域。有四个可能的值:的作用域。有四个可能的值:page,request,sessionpage,request,session和和applicationapplication。缺省值是。缺省值是pagepage。typety
5、pe指明指明BeanBean的类型。的类型。beanNamebeanName赋予赋予beanbean一个名字。一个名字。2.动作标签 用于修改指定用于修改指定bean的属性。的属性。语法如下:语法如下:3.动作标签动作标签 用于获取指定用于获取指定bean属性的值,实际是调用属性的值,实际是调用bean的的getter方法。方法。语法如下:语法如下:【程序清单2-2】文件名为SimpleBean.javapackage chapter2;public class SimpleBean private String message;/属性 public String getMessage()/g
6、etter方法 return message;public void setMessage(String message)/setter方法 this.message=message;【程序清单程序清单2-3】文件名为文件名为test.jsp消息:消息:24 JSP内置对象2.4.1 内置对象的作用范围内置对象的作用范围(1)application 范围:作用范围起始于服务器开始运行,范围:作用范围起始于服务器开始运行,application对象被创建之时;终止于服务器关闭之时。对象被创建之时;终止于服务器关闭之时。(2)session范围:有效范围是整个用户会话的生命周期内。每范围:有效范围
7、是整个用户会话的生命周期内。每个用户请求访问服务器时一般就会创建一个个用户请求访问服务器时一般就会创建一个session对象,用户对象,用户断开退出时断开退出时session对象失效。对象失效。服务器对服务器对session对象有默认的时间限定。对象有默认的时间限定。(3)request 范围:在一个范围:在一个JSP页面向另一个页面向另一个JSP页面提出请求页面提出请求到请求完成之间,在完成请求后此范围即结束。到请求完成之间,在完成请求后此范围即结束。(4)Page 范围范围:有效范围是当前页面。有效范围是当前页面。2.4.2 out对象out对象用于向浏览器端输出数据。对象用于向浏览器端输
8、出数据。out对象的常用方法如下:对象的常用方法如下:pvoid println(String str):输出信息,最后要换行;:输出信息,最后要换行;pvoid print(String str):输出信息;:输出信息;pvoid write(String str,int start,int end):用于:用于输出字符或者字符串,可指定字符串的起始和结束输出字符或者字符串,可指定字符串的起始和结束位置;位置;pvoid clear():清除输出缓冲区内容;:清除输出缓冲区内容;pvoid close():关闭输出流:关闭输出流,清除所有内容;清除所有内容;2.4.3 application
9、对象 application对象对应对象对应Servlet的的ServletContext接口,该对象存储的信息为应用接口,该对象存储的信息为应用的所有用户和页面共享。的所有用户和页面共享。application对象的常用方法如下:对象的常用方法如下:p Object getAttribute(String name):获取:获取application对象属性的值;对象属性的值;p Enumeration getAttributenames():获取:获取application对象的所有属性的对象的所有属性的名字;名字;p Object getInitParameter(String name
10、):获取:获取application对象某个属性对象某个属性的初值;的初值;p void setAttribute(String name,Object object):设置指定属性的值;:设置指定属性的值;p void removeAttribute(String name):删除指定属性的值;:删除指定属性的值;p ServletContext getContext(String URLpath):获得对应指定:获得对应指定URL的的ServletContext对象;对象;p String getMimeType(String filename):返回特定文件的):返回特定文件的MIME类
11、型;类型;p URL getResource(String URLpath):将资源路径映射到指定的:将资源路径映射到指定的URL;p String getRealPath(String virtualpath):获取一个虚拟路径所对应的实:获取一个虚拟路径所对应的实际路径;际路径;以下程序用appication对象实现计数器2.4.4 request对象 request对象对应对象对应Servlet的的HttpServletRequest接口,用于获取接口,用于获取HTTP请求提交请求提交的数据,的数据,request对象的最常用方法是:对象的最常用方法是:request.getParame
12、ter(“参数参数”)另外,与获取请求参数相关的还有其它几个方法说明另外,与获取请求参数相关的还有其它几个方法说明如下:如下:p Enumeration getParameternames():取得所有参数名称;:取得所有参数名称;p String getParameterValues(String name):取得名称:取得名称为为name的参数值集合。的参数值集合。p Map getParameterMap():获取所有请求参数名和参数值获取所有请求参数名和参数值组成的组成的Map对象。对象。【程序清单程序清单2-5】文件名为文件名为login.jsp用户名用户名密密 码码【程序清单程序清
13、单2-62-6】文件名为文件名为process.jspprocess.jsp 您好!您好!您的密码是您的密码是 URL参数参数p的值为的值为 特别地,对于表单中同一元素名称含多个值的输入控件,可特别地,对于表单中同一元素名称含多个值的输入控件,可通过通过getParameterValues方法读取数据。方法读取数据。request对象的其他常用方法如下:对象的其他常用方法如下:p Cookie getCookies():取得与请求由关的:取得与请求由关的cookies;p String getContextPath():取得:取得Context路径(也即路径(也即/应用名称);应用名称);p
14、String getMethod():取得:取得HTTP的方法(的方法(GET、POST););p String getQueryString():取得请求的参数字符串,这里,:取得请求的参数字符串,这里,HTTP的方法必须的方法必须为为GET;p String getRequestedSessionId():取得用户的:取得用户的Session ID;p String getRemoteAddr():取得客户机的:取得客户机的IP地址;地址;p String getRemoteHost():取得客户机的主机名称;:取得客户机的主机名称;p void setAttribute(String n
15、ame,Object value):设置请求的某属性的值;:设置请求的某属性的值;p Object getAttribute(String name):取得请求的某属性的值;:取得请求的某属性的值;p void setCharacterEncoding(String encoding):设定字符编码格式,用来:设定字符编码格式,用来解决数据传递中文的问题;解决数据传递中文的问题;p String getCharacterEncoding():获取请求的字符编码方式。:获取请求的字符编码方式。p String getRemoteUser():获取:获取Spring安全登录的帐户名。安全登录的帐户
16、名。p HttpSession getSession():返回与请求关联的当前:返回与请求关联的当前session。2.4.5 response对象 response对象对应对象对应Servlet的的HttpServletResponse接接口,负责将服务器端的数据发送回浏览器的客户端。口,负责将服务器端的数据发送回浏览器的客户端。response对象的最常用方法如下:对象的最常用方法如下:p void addCookie(Cookie cookie):将新增:将新增cookie写入客户端;写入客户端;p void sendRedirect(String url):页面重定向到某个:页面重定向
17、到某个URL。p void setHeader(String name,String value):指定指定String类类型的型的value值到名称为值到名称为name的的HTTP请求标头。请求标头。例如,以下行设置三秒钟后网页定向到例如,以下行设置三秒钟后网页定向到login.jsp页面。页面。setHeader(“Refresh”,”3;url=login.jsp”);【程序清单程序清单2-7】文件名为文件名为redirect.jsp2.4.6 session对象 session对象对应对象对应Servlet的的HttpSession接口,用于存储一个用户接口,用于存储一个用户的会话信息
18、。的会话信息。session对象的方法如下:对象的方法如下:p Object getAttribute(String name):获取获取name会话对象的属性值。会话对象的属性值。p void setAttribute(String name,Object value):设置设置name会话对象的会话对象的属性值。属性值。p long getCreationTime():获取会话创建时间:获取会话创建时间,从从1970年年1月月1日算起的毫日算起的毫秒数。秒数。p String getId():获取会话:获取会话ID。p boolean isNew():是否为新会话:是否为新会话,新会话表示
19、新会话表示Session已由服务器产生,已由服务器产生,但用户尚未使用。但用户尚未使用。p long getLastAccessedTime():获取会话的上次访问时间。:获取会话的上次访问时间。p long getMaxInactiveInterval():获取会话持续时间,单位为秒。:获取会话持续时间,单位为秒。p void invalidate():取消:取消Session。p ServletContext getServletContext():返回当前会话的上下文环境。:返回当前会话的上下文环境。2.4.7 pageContext对象 pageContext对象代表页面上下文,该对象
20、对象代表页面上下文,该对象主要用于访问主要用于访问JSP之间的共享数据。使用之间的共享数据。使用pageContext可访问可访问page、request、session、application范围的属性变量。范围的属性变量。getAttribute(String name):取得:取得page范范围内的围内的name属性。属性。getAttribute(String name,int scope):取:取得指定范围内的得指定范围内的name属性。属性。2.4.8 config、page、exception对象 config对象一般用于对象一般用于Servlet,对应,对应Servlet的的S
21、ervletConfig接口,用于获取配置信息。常用方法如下:接口,用于获取配置信息。常用方法如下:p getServletName():获取:获取Servlet的名称。的名称。p String getInitParameter(String paraName):获取某个配置参数的:获取某个配置参数的值。值。p String getInitParameterNames():获取所有配置参数的名称。:获取所有配置参数的名称。page对象指代对象指代JSP页面本身、代表了正在运行的由页面本身、代表了正在运行的由JSP文件文件产生的类对象产生的类对象,也就是也就是Servlet中的中的this。pa
22、ge对象在对象在JSP中很少中很少使用。使用。exception对象是对象是Throwable的实例,代表的实例,代表JSP脚本中产生的异脚本中产生的异常,常,JSP页面的所有异常均交给错误处理页面。页面的所有异常均交给错误处理页面。2.5 使用EL表达式1.EL语法语法所有所有EL表达式的格式都是以表达式的格式都是以“$”表示。表示。例如,例如,$userinfo代表获取变量代表获取变量userinfo的值。的值。p当当EL表达式中的变量不给定范围时表达式中的变量不给定范围时,则默认在则默认在page范围查找范围查找,然后依次在然后依次在request,session,application
23、 范围查找。范围查找。p也可以用范围作为前缀表示属于哪个范围的变量,也可以用范围作为前缀表示属于哪个范围的变量,例如:例如:$pageScope.userinfo表示访问表示访问page范围中的范围中的userinfo变量。变量。2.EL中运算符(1)运算符运算符 和和.在在EL中中,可以使用运算符可以使用运算符“”和和“.”来取得对象的属性。来取得对象的属性。例如例如:$user.name或者或者$username表示取出对象表示取出对象user中的中的name属属性。性。另外,在另外,在EL中可以使用中可以使用运算符来读取数组、运算符来读取数组、Map以及以及List等对象集等对象集合中的
24、数据合中的数据 还可以用还可以用EL表达式来访问一个表达式来访问一个JavaBean的属性值的属性值假设假设JavaBean的定义如下的定义如下:对对username属性的引用为属性的引用为:$user.username或者或者$userusername。(2)算术运算符、关系运算符、逻辑运算符 EL中支持的算术运算符有加法(中支持的算术运算符有加法(+)、减法()、减法(-)、乘)、乘法(法(*)、除法()、除法(/或或div)、求余()、求余(%或或mod)。)。关系运算符有等于(关系运算符有等于(=或者或者equals)、不等于()、不等于(!=或者或者ne)、小于()、小于(或者或者g
25、t)、小于等于()、小于等于(=或或者者ge)。)。逻辑运算符有与(逻辑运算符有与(&或者或者and)、或()、或(|或者或者or)、)、非(非(!或者或者not)。)。例如:例如:$!name.equals(bad)表示的值为表示的值为name是否不等于是否不等于“bad”的逻辑值。的逻辑值。【应用经验应用经验】关系运算符关系运算符“=”也可以用来比较字符也可以用来比较字符串。且比较时串。且比较时,如果一个整数和一个串比较,只要串中如果一个整数和一个串比较,只要串中的内容等于整数的值,则结果为的内容等于整数的值,则结果为true。(3)Empty 运算符运算符empty 运算符是一个前缀形式
26、的运算符运算符是一个前缀形式的运算符,用来判断某个变量是否为用来判断某个变量是否为null或者为空。或者为空。例如,例如,$empty user.name表示在表示在user对象的对象的name属性值为属性值为null时结果时结果true,否否则为则为false。(4)条件运算符条件运算符格式:格式:$A?B:C 3.EL中的隐含对象表2-3 EL的隐含对象类别类别隐含对象隐含对象描述描述JSPJSPpageContextpageContext当前页的当前页的javax.servlet.jsp.PageContextjavax.servlet.jsp.PageContext对象对象作用域作用域
27、pageScopepageScope用来获取页面范围的对象用来获取页面范围的对象requestScoperequestScope用来获取请求范围的对象用来获取请求范围的对象sessionScopesessionScope用来获取会话范围的对象用来获取会话范围的对象applicationScopeapplicationScope用来获取应用范围的对象用来获取应用范围的对象请求参数请求参数paramparam用来获取某请求参数的值用来获取某请求参数的值paramValuesparamValues用来获取某请求参数值的集合用来获取某请求参数值的集合请求头请求头headerheader表示表示http
28、http请求头部请求头部,字符串字符串headerValuesheaderValues表示表示httphttp请求头部请求头部,字符串集合字符串集合cookiecookiecookiecookie用来获取用来获取cookiecookie对象值对象值初始化参数初始化参数initParaminitParam应用上下文初始化参数组成的集合应用上下文初始化参数组成的集合【程序清单2-8】文件名为index.jsp输出地址栏后面的参数字符串输出地址栏后面的参数字符串输出参数输出参数x的值的值取得用户的取得用户的IP地址地址2.6 JSTL的标签库表2-4 JSTL的标签库JSTLJSTL前缀前缀URIU
29、RI核心标签库核心标签库c chttp:/ 网页中使用网页中使用JSTL的核心标签库的核心标签库,要做,要做如下声明:如下声明:核心标签库分为四类,分别是:核心标签库分为四类,分别是:p通用核心标签:通用核心标签:、。p条件控制标签:条件控制标签:、。p循环控制标签:循环控制标签:、。pURL 相关标签:相关标签:、。(1)标签主要用来显示数据的内容主要用来显示数据的内容,类似于类似于。例如:例如:其中,其中,param.data为模型传递的参数变量。为模型传递的参数变量。(2)标签 用来将变量储存至用来将变量储存至JSP范围中或是范围中或是JavaBean的属性中。的属性中。语法语法1:将:
30、将 value的值储存至范围为的值储存至范围为scope的的varName 变量之中变量之中例如:例如:再比如,以下将页面的图片文件路径记录在再比如,以下将页面的图片文件路径记录在imagesPath变量中。变量中。语法语法2:将:将value的值储存至的值储存至target 对象的属性中对象的属性中其中,其中,targetX为某个为某个JavaBean或或java.util.Map对象。对象。【应用技巧应用技巧】在程序中可以给同一名称的变量重复赋值。在程序中可以给同一名称的变量重复赋值。(3)标签1 上一页上一页【应用经验】【应用经验】条件式必须用引号括住,如何条件式内条件式必须用引号括住,
31、如何条件式内存在双引号,则外边的括号也可用单引号。例如:存在双引号,则外边的括号也可用单引号。例如:(4)、标签语法如下:语法如下:内容体内容体 内容体内容体其中,一个其中,一个内可有内可有1或多个或多个,0或或1个个。(5)标签 为循环控制,常用于遍历访问集合或数组中的成员。为循环控制,常用于遍历访问集合或数组中的成员。例如,以下访问例如,以下访问jobs 为为Job的列表集合,要访问某个的列表集合,要访问某个job的的id属性,则属性,则Job类要提供类要提供getId()方法。方法。【应用经验应用经验】也可用于遍历访问也可用于遍历访问java.util.Map对象。对象。当当items属
32、性为属性为Map对象时,循环遍历的每个元素为一个对象时,循环遍历的每个元素为一个Map.Entry项,不妨用变量名项,不妨用变量名me表示,则可用表达式表示,则可用表达式$me.key取得键名,用表达式取得键名,用表达式$me.value得到键值。根据得到键值。根据map中关键字中关键字key的具体名称,也可以用的具体名称,也可以用$mapkey得到该关键字对应的值。得到该关键字对应的值。在在MVC模型中常用模型中常用Map存储模型数据,在视图文件可用这种方式读取来自存储模型数据,在视图文件可用这种方式读取来自模型的数据。模型的数据。(6)标签 用来浏览一字符串中所有的成员,其成员是由用来浏览
33、一字符串中所有的成员,其成员是由“分隔符分隔符”所分隔。所分隔。$item上面代码执行后,将会在网页中输出上面代码执行后,将会在网页中输出“ABCDE”。JSP脚本和JSTL之间如何实现变量的互访呢?首先,首先,JSP脚本通过脚本通过JSP对象可访问对象可访问JSTL定义的变量,例如:对定义的变量,例如:对于页面作用域的变量,可以通过于页面作用域的变量,可以通过pageContext.getAttribute()来获取。例如:来获取。例如:注意,注意,JSP获取来自获取来自MVC编程的模型数据用编程的模型数据用request对象的对象的getAttribute方法即可。方法即可。其次,在其次,
34、在JSTL标签中访问标签中访问JSP脚本变量,可以使用脚本变量,可以使用JSP表达式来表达式来获取,例如:获取,例如:c:set var=s value=/2.JSTL的函数标签库函数名函数名功能功能使用举例使用举例contains contains 判断是否为字符串的子字符串。判断是否为字符串的子字符串。$fn:contains(ABC,B)$fn:contains(ABC,B)containsIgnoreCacontainsIgnoreCasese不区分大小写判断是否为某串不区分大小写判断是否为某串的子串。的子串。$fn:containsIgnoreCase(A$fn:containsIg
35、noreCase(ABC,a)BC,a)startsWithstartsWith是否为某串的打头部分。是否为某串的打头部分。$fn:startsWith(ABC,A)$fn:startsWith(ABC,A)endsWithendsWith是否为某串的结尾部分。是否为某串的结尾部分。$fn:endsWith(ABC,bc)$fn:endsWith(ABC,bc)indexOfindexOf获取子串在源串中的首次出现获取子串在源串中的首次出现位置。位置。$fn:indexOf(ABCD,BC)$fn:indexOf(ABCD,BC)lengthlength求集合的长度。求集合的长度。假设假设ar
36、rayList1arrayList1为列表集合为列表集合$fn:length(arrayList1)$fn:length(arrayList1)replacereplace允许为源字符串做替换。允许为源字符串做替换。$fn:replace(ABCA,A,B$fn:replace(ABCA,A,B)splitsplit将一组由分隔符分隔的字符串将一组由分隔符分隔的字符串转换成字符串数组。转换成字符串数组。$fn:split(A,B,C,)$fn:split(A,B,C,)substringsubstring用于从字符串中取子串。用于从字符串中取子串。$fn:substring(ABC,1,2)$fn:substring(ABC,1,2)toLowerCasetoLowerCase将源字符串中的字符全部转换将源字符串中的字符全部转换成小写字符。成小写字符。$fn:toLowerCase(ABCD)$fn:toLowerCase(ABCD)trimtrim结果串不包含源字符串中首尾结果串不包含源字符串中首尾的的”空格空格”。$fn:trim(ABC )$fn:trim(ABC )
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。