




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
问题JSP使用情形;2.1JSP简单示例【程序清单2-1】文件名为demo.jsp<%@pagecontentType="text/html;charset=UTF-8"%><%inta=0;%><!--这里是HTML注释--><center><b><fontcolor="green"size="6">简单JSP程序</font></b></center><BR><%--JSP注释,以下将循环执行--%><%for(inti=3;i<=7;i++){%><FONTSIZE=<%=i%>>本行字体大小是<%=i%>号字!</FONT><BR><%}a=a+1;out.print("a="+a);%>2.2JSP编译指令编译指令是通知JSP引擎在编译代码时要处理的消息。JSP包括三种编译指令:page指令、include指令和taglib指令。taglib指令用于引入自定义标签,将在以后涉及。指令的定义格式为:<%@指令名属性1="值1"属性2="值2"…%>2.2.1page指令page指令应放在页面开始,用于指示针对当前页面的设置<%@pagecontentType="text/html;charset=UTF-8"%>2.2.2include指令用于将另一个文件的内容嵌入到当前JSP文件中。格式如下:
<%@includefile="relativeURI"%>该指令是编译时静态的将目标内容包含到当前JSP文件中,在JSP页面被转化成servlet之前和它融合到一起。2.3JSP动作标签动作标签是指示JSP程序运行时的动作。JSP含7个标准的动作标签:include、useBean、setProperty、getProperty、forward、plugin、param。2.3.1<jsp:include>动作标签用于程序执行时动态地将目标文件包含进来。这个被包含的文件也会被JSP容器编译执行。<jsp:include>动作标签的使用格式为:<jsp:includepage="relativeURL">{<jsp:paramname="name"value="value"/>}</jsp:include>2.3.2<jsp:forword>动作标签用于实现页面重定向。<jsp:forword>行为是在服务器端完成的使用格式如下:<jsp:forwardpage="url">
{<jsp:paramname="name"value="value"/>}</jsp:forward>1.<jsp:useBean>动作标签
<jsp:useBean>动作用来实例化一个页面使用的JavaBeans组件。最简单的格式如下:<jsp:useBeanid="name"class="package.class"/>表2-2<jsp:useBean>指令的属性属性含义id给bean定义一个标识变量,页面中通过该变量访问Bean。class定义bean的带路径的类名。scope指明bean的作用域。有四个可能的值:page,request,session和application。缺省值是page。type指明Bean的类型。beanName赋予bean一个名字。2.<jsp:setProperty>动作标签用于修改指定bean的属性。语法如下:
<jsp:setPropertyname="beanName"property="*"|property="propertyName"value="具体的值"/>3.<jsp:getProperty>动作标签用于获取指定bean属性的值,实际是调用bean的getter方法。语法如下:
<jsp:getPropertyname="beanName"property="propertyName"/>【程序清单2-2】文件名为SimpleBean.java
packagechapter2;
publicclassSimpleBean{
privateStringmessage;//属性
publicStringgetMessage(){//getter方法
returnmessage;
}
publicvoidsetMessage(Stringmessage){//setter方法
this.message=message;
}
}【程序清单2-3】文件名为test.jsp<%@pagecontentType="text/html;charset=UTF-8"%><jsp:useBeanid="test"class="chapter2.SimpleBean"/><jsp:setPropertyname="test"property="message"value="JSPBeanTest!"/><p>消息:<jsp:getPropertyname="test"property="message"/>2.4JSP内置对象2.4.1内置对象的作用范围
(1)application范围:作用范围起始于服务器开始运行,application对象被创建之时;终止于服务器关闭之时。
(2)session范围:有效范围是整个用户会话的生命周期内。每个用户请求访问服务器时一般就会创建一个session对象,用户断开退出时session对象失效。服务器对session对象有默认的时间限定。
(3)request范围:在一个JSP页面向另一个JSP页面提出请求到请求完成之间,在完成请求后此范围即结束。
(4)Page范围
:有效范围是当前页面。2.4.2out对象out对象用于向浏览器端输出数据。out对象的常用方法如下:voidprintln(Stringstr):输出信息,最后要换行;voidprint(Stringstr):输出信息;voidwrite(Stringstr,intstart,intend):用于输出字符或者字符串,可指定字符串的起始和结束位置;voidclear():清除输出缓冲区内容;voidclose():关闭输出流,清除所有内容;2.4.3application对象application对象对应Servlet的ServletContext接口,该对象存储的信息为应用的所有用户和页面共享。
application对象的常用方法如下:ObjectgetAttribute(Stringname):获取application对象属性的值;EnumerationgetAttributenames():获取application对象的所有属性的名字;ObjectgetInitParameter(Stringname):获取application对象某个属性的初值;voidsetAttribute(Stringname,Objectobject):设置指定属性的值;voidremoveAttribute(Stringname):删除指定属性的值;ServletContextgetContext(StringURLpath):获得对应指定URL的ServletContext对象;StringgetMimeType(Stringfilename):返回特定文件的MIME类型;URLgetResource(StringURLpath):将资源路径映射到指定的URL;StringgetRealPath(Stringvirtualpath):获取一个虚拟路径所对应的实际路径;以下程序用appication对象实现计数器<%@pagelanguage=“java”contentType=“text/html;charset=GB2312”%><%if(application.getAttribute(“count”)==null){ application.setAttribute(“count”,
”1”); out.println(“欢迎您,第1位访客!”);}else{ inti=Integer.parseInt((String)application.getAttribute(“count”)); i++; application.setAttribute(“count”,String.valueOf(i)); out.println(“欢迎您,第”+i+”位访客!”);}%>2.4.4request对象
request对象对应Servlet的HttpServletRequest接口,用于获取HTTP请求提交的数据,
request对象的最常用方法是:request.getParameter(“参数”)另外,与获取请求参数相关的还有其它几个方法说明如下:EnumerationgetParameternames():取得所有参数名称;String[]getParameterValues(Stringname):取得名称为name的参数值集合。MapgetParameterMap()
:获取所有请求参数名和参数值组成的Map对象。【程序清单2-5】文件名为login.jsp<%@pagepageEncoding=“GB2312”%><html><body><center><formaction=“process.jsp?p=1”method=“post”>用户名<inputtype=“text”name=“name”/><br>密码<inputtype=“password”name=“password”/><p><inputtype=“submit”value=“登录”
/></form></center></body></html>【程序清单2-6】文件名为process.jsp<%@pagepageEncoding=“GB2312”%><%Stringusername=request.getParameter(“name”);Stringpass=request.getParameter(“password”);%>您好!<%=username%><br/>您的密码是<%=pass%>URL参数p的值为<%=request.getParameter(“p”)%>特别地,对于表单中同一元素名称含多个值的输入控件,可通过getParameterValues方法读取数据。
request对象的其他常用方法如下:Cookie[]getCookies():取得与请求由关的cookies;StringgetContextPath():取得Context路径(也即/应用名称);StringgetMethod():取得HTTP的方法(GET、POST);StringgetQueryString():取得请求的参数字符串,这里,HTTP的方法必须为GET;StringgetRequestedSessionId():取得用户的SessionID;StringgetRemoteAddr():取得客户机的IP地址;StringgetRemoteHost():取得客户机的主机名称;voidsetAttribute(Stringname,Objectvalue):设置请求的某属性的值;ObjectgetAttribute(Stringname):取得请求的某属性的值;voidsetCharacterEncoding(Stringencoding):设定字符编码格式,用来解决数据传递中文的问题;StringgetCharacterEncoding():获取请求的字符编码方式。StringgetRemoteUser():获取Spring安全登录的帐户名。HttpSession
getSession():返回与请求关联的当前session。2.4.5response对象response对象对应Servlet的HttpServletResponse接口,负责将服务器端的数据发送回浏览器的客户端。
response对象的最常用方法如下:voidaddCookie(Cookiecookie):将新增cookie写入客户端;voidsendRedirect(Stringurl):页面重定向到某个URL。voidsetHeader(Stringname,Stringvalue):指定String类型的value值到名称为name的HTTP请求标头。例如,以下行设置三秒钟后网页定向到login.jsp页面。setHeader(“Refresh”,”3;url=login.jsp”)
;【程序清单2-7】文件名为redirect.jsp<%Cookie[]cookies=request.getCookies();Stringusername=null;
for(Cookiec:cookies)//根据Cookie名访问Cookie的值。
if(“loginname“.equals(c.getName()))username=c.getValue();//读Cookie的内容if(username==null) response.sendRedirect(“login.jsp”);//用户未登录,转登录页面else response.sendRedirect(“index.jsp”);//转主功能页面%>2.4.6session对象session对象对应Servlet的HttpSession接口,用于存储一个用户的会话信息。
session对象的方法如下:ObjectgetAttribute(Stringname)
:获取name会话对象的属性值。voidsetAttribute(Stringname,Objectvalue):设置name会话对象的属性值。longgetCreationTime():获取会话创建时间,从1970年1月1日算起的毫秒数。StringgetId():获取会话ID。booleanisNew():是否为新会话,新会话表示Session已由服务器产生,但用户尚未使用。longgetLastAccessedTime():获取会话的上次访问时间。longgetMaxInactiveInterval():获取会话持续时间,单位为秒。voidinvalidate():取消Session。ServletContextgetServletContext():返回当前会话的上下文环境。2.4.7pageContext对象pageContext对象代表页面上下文,该对象主要用于访问JSP之间的共享数据。使用pageContext可访问page、request、session、application范围的属性变量。getAttribute(Stringname):取得page范围内的name属性。getAttribute(Stringname,intscope):取得指定范围内的name属性。2.4.8config、page、exception对象
config对象一般用于Servlet,对应Servlet的ServletConfig接口,用于获取配置信息。常用方法如下:getServletName():获取Servlet的名称。StringgetInitParameter(StringparaName):获取某个配置参数的值。String[]getInitParameterNames():获取所有配置参数的名称。
page对象指代JSP页面本身、代表了正在运行的由JSP文件产生的类对象,也就是Servlet中的this。page对象在JSP中很少使用。exception对象是Throwable的实例,代表JSP脚本中产生的异常,JSP页面的所有异常均交给错误处理页面。2.5使用EL表达式1.EL语法所有EL表达式的格式都是以“${}”表示。例如,${userinfo}代表获取变量userinfo的值。当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request,session,application范围查找。也可以用范围作为前缀表示属于哪个范围的变量,例如:${pageScope.userinfo}表示访问page范围中的userinfo变量。2.EL中运算符(1)运算符[]和.在EL中,可以使用运算符“[]”和“.”来取得对象的属性。例如:${}或者${user[name]}表示取出对象user中的name属性。另外,在EL中可以使用[]运算符来读取数组、Map以及List等对象集合中的数据还可以用EL表达式来访问一个JavaBean的属性值假设JavaBean的定义如下: <jsp:useBeanid="user"class="ecjtu.User"/>
对username属性的引用为:${user.username}或者${user["username"]}。(2)算术运算符、关系运算符、逻辑运算符EL中支持的算术运算符有加法(+)、减法(-)、乘法(*)、除法(/或div)、求余(%或mod)。关系运算符有等于(==或者equals)、不等于(!=或者ne)、小于(<或者lt)、大于(>或者gt )、小于等于(<=或者le)、大于等于(>=或者ge)。逻辑运算符有与(&&或者and)、或(||或者or)、非(!或者not)。例如:${!name.equals("bad")}表示的值为name是否不等于“bad”的逻辑值。【应用经验】关系运算符“==”也可以用来比较字符串。且比较时,如果一个整数和一个串比较,只要串中的内容等于整数的值,则结果为true。(3)Empty运算符
empty运算符是一个前缀形式的运算符,用来判断某个变量是否为null或者为空。例如,${empty}表示在user对象的name属性值为null时结果true,否则为false。(4)条件运算符 格式:${A?B:C}3.EL中的隐含对象表2-3EL的隐含对象类别隐含对象描述JSPpageContext当前页的javax.servlet.jsp.PageContext对象作用域pageScope用来获取页面范围的对象requestScope用来获取请求范围的对象sessionScope用来获取会话范围的对象applicationScope用来获取应用范围的对象请求参数param用来获取某请求参数的值paramValues用来获取某请求参数值的集合请求头header表示http请求头部,字符串headerValues表示http请求头部,字符串集合cookiecookie用来获取cookie对象值初始化参数initParam应用上下文初始化参数组成的集合【程序清单2-8】文件名为index.jsp<%@pagecontentType="text/html;charset=UTF-8"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><table><tr><td>输出地址栏后面的参数字符串</td><td><c:outvalue="${pageContext.request.queryString}"/></td></tr><tr><td>输出参数x的值</td><td><c:outvalue="${param.x}"/></td></tr><tr><td>取得用户的IP地址</td><td><c:outvalue="${pageContext.request.remoteAddr}"/></td></tr></table>2.6JSTL的标签库表2-4JSTL的标签库JSTL前缀URI核心标签库c/jsp/jstl/coreI18N格式标签库fmt/jsp/jstl/xmlSQL标签库sql/jsp/jstl/sqlXML标签库xml/jsp/jstl/fmt函数标签库fn/jsp/jstl/functions1.JSTL核心标签库若要在JSP网页中使用JSTL的核心标签库,要做如下声明:<%@taglibprefix="c"uri="/jsp/jstl/core"%>
核心标签库分为四类,分别是:通用核心标签:<c:out>、<c:set>、<c:remove>、<c:catch>。条件控制标签:<c:if>、<c:choose>、<c:when>、<c:otherwise>。循环控制标签:<c:forEach>、<c:forTokens>。URL相关标签:<c:import>、<c:url>、<c:redirect>、<c:param>。
(1)<c:out>标签主要用来显示数据的内容,类似于<%=scripting-language%>。例如:<c:outvalue="${param.data}"default="NoData"/>其中,param.data为模型传递的参数变量。(2)<c:set>标签用来将变量储存至JSP范围中或是JavaBean的属性中。语法1:将value的值储存至范围为scope的varName变量之中<c:setvalue="value"var="varName"[scope="{page|request|session|application}"]/>例如:<c:setvar="number"scope="request"value="${1+1}"/>再比如,以下将页面的图片文件路径记录在imagesPath变量中。
<c:setvar="contextPath"value="${pageContext.request.contextPath}"/>
<c:setvar="imagesPath"value="${contextPath}/images"/>语法2:将value的值储存至target对象的属性中<c:setvalue="value"target="targetX"property="propertyName"/>其中,targetX为某个JavaBean或java.util.Map对象。【应用技巧】在程序中可以给同一名称的变量重复赋值。
<c:setvar="x"value="${x+1}"/>(3)<c:if>标签<c:iftest="${pageNo>1}"><ahref="/resource/page/${pageNo-1}">上一页</a></c:if>
【应用经验】条件式必须用引号括住,如何条件式内存在双引号,则外边的括号也可用单引号。例如:<c:iftest='${current=="root"}'>(4)<c:choose>、<c:when>、<c:otherwise>标签语法如下:<c:choose><c:whentest="condition">内容体</c:when>
……<c:otherwise>内容体</c:otherwise></c:choose>其中,一个<c:choose>内可有1或多个<c:when>,0或1个<c:otherwise>。(5)<c:forEach>标签<c:forEach>为循环控制,常用于遍历访问集合或数组中的成员。
例如,以下访问jobs为Job的列表集合,要访问某个job的id属性,则Job类要提供getId()方法。<c:forEachitems="${jobs}"var="job"><c:setvar="x"value="${job.id}"></c:set></c:forEach>【应用经验】<c:forEach>也可用于遍历访问java.util.Map对象。当items属性为Map对象时,循环遍历的每个元素为一个Map.Entry项,不妨用变量名me表示,则可用表达式${me.key}取得键名,用表达式${
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025内蒙古自治区新劳动合同样本
- 2025包装箱订购合同范本
- 2025房屋租赁信托合同协议书范本
- 2025年间歇式空气中有机污染物自动分析仪项目建议书
- 2025年高导热石墨膜项目合作计划书
- 2025年钢材:一级钢项目建议书
- 2025年小型高效沼气装置项目建议书
- 引水陂施工方案
- 大坝机械施工方案
- 桥梁截流施工方案
- 大国精神知到智慧树章节测试课后答案2024年秋中北大学
- 延保服务协议书
- 《电力人工智能样本存储技术要求》编制说明
- 矿车安全生产培训
- 大宗物业交易居间合同范本
- 金属热处理工(初级工)职业技能认定考试题库(含答案)
- 临床管道的风险管理
- 团员发展纪实簿
- 落实《中小学德育工作指南》制定的实施方案
- 湖南省城镇排水管道非开挖修复更新技术标准(发布稿)
- 民用无人机操控员执照(CAAC)考试复习重点题及答案
评论
0/150
提交评论