版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章JSP隐含对象本章主要内容隐含对象概述request对象 response对象out对象exception对象 利用隐含对象携带参数 组件间的参数传递 转发和重定向 隐含对象类型说明requestjavax.servlet.http.HttpServletRequest请求信息responsejavax.servlet.http.HttpServletResponse响应信息sessionjavax.servlet.http.HttpSession会话applicationjavax.servlet.ServletContextWeb应用全局上下文outjavax.servlet.jsp.JspWriter输出数据流pageContextjavax.servlet.jsp.PageContextJSP页面上下文pagejava.lang.ObjectJSP页面本身configjavax.servlet.ServletConfigServlet配置信息exceptionjavax.servlet.ServletException网页异常5.1隐含对象概述在JSP页面可以直接使用的对象5.1隐含对象概述创建和初始化都是由Web容器完成5.2request对象获取请求参数获取请求地址5.2request对象<% //查看路径表示
out.print("请求的路径信息:"+request.getRequestURL()+"<br/>"); out.print("请求资源路径:"+request.getRequestURI()+"<br/>");
out.print("请求的Web应用路径:"+request.getContextPath()+"<br/>"); out.print("请求的Servlet路径:"+request.getServletPath()+"<br/>");%>:8080/chap5/request.jspURLURI/chap5/request.jspContextPath/chap5ServletPath/request.jsp统一资源定位器:uniformresourcelocator统一资源标识符:uniformresourceidentifier上下文路径Servlet路径/user/reg5.3response对象重定向:response.sendRedirect();定时重定向:利用响应头refreshresponse.setHeader("refresh","数字[;url=***]")指定url:在指定的时间(秒为单位)后跳转到指定页面不指定url:当前页面每隔指定时间刷新一次<%
response.setHeader("refresh","2;url=login.html");%>error.jsp5.4out对象表达式<%=...%>的本质是out.print()out对象完成从服务器端向客户端的数据传送,最原始的数据传输是以字节为单位,但显然效率很低,所以在I/O操作中通常会使用缓冲区。服务器把发送给客户端的数据先放到一个缓冲区里进行缓存,缓冲区的默认大小为8KB。【例5-2】缓冲区演示。out对象的getBufferSize()方法可以获得缓冲区的大小getRemaining()方法获得缓冲区中尚未使用的空间大小5.4out对象<% out.print("<h3>缓冲区初始:"+out.getBufferSize()+"字节</h3>"); out.print("<h4>《钱塘湖春行》【唐】白居易</h4>"); out.print("<h4>孤山寺北贾亭西,水面初平云脚低。</h4>"); out.print("<h4>几处早莺争暖树,谁家新燕啄春泥。</h4>"); out.print("<h3>缓冲区剩余:"+out.getRemaining()+"字节</h3>"); out.flush(); out.print("<h3>缓冲区刷新后:"+out.getRemaining()+"字节</h3>"); out.print("<h4>乱花渐欲迷人眼,浅草才能没马蹄。</h4>"); out.print("<h4>最爱湖东行不足,绿杨阴里白沙堤。</h4>");%>5.5exception对象exception对象用于处理JSP文件中发生的错误和异常,这些异常是Web应用程序能够识别和处理的问题。【例】exception对象演示。createError.jsp<%@pageerrorPage="error.jsp"%><% Integer.parseInt("abc");//会抛出异常%>error.jsp<%@pageisErrorPage="true"%>异常类型:<%=exception.getClass()%><br/>异常信息:<%=exception.getMessage()%><br/>5.5application对象application:ServletContext对象生命周期从服务器开始执行Web应用服务,到服务器关闭为止Servlet与容器之间直接通信的接口实现在Web应用范围内存取所有Servlet的共享数据获取关于Web应用、容器信息等5.6利用隐含对象携带参数(1)客户端和服务器之间的参数传递客户端通过get/post方式发送请求数据服务器端使用getParameter()方法获取请求(2)服务器端的各个Servlet和JSP组件之间如何传参?参数浏览器服务器ServletServletJSPget/post??5.6.1组件间的参数传递服务器端的Servlet程序和JSP程序之间,可以request、session和application在不同范围内为组件传递参数。(1)publicvoidsetAttribute(Stringname,Objectobj)(2)publicObjectgetAtrribute(Stringname)request的生命周期最短,占用资源比较少,但相对来说
缺乏持续性session生命周期变长,但资源的消耗也变大,利用session可以记录用户身份实现会话跟踪application的范围最大,生存周期最长,常用于保存Web项目中全局性的数据信息5.6.1组件间的参数传递究竟选择哪个对象保存、传递参数?依据1:根据源和目标Servlet/JSP间的关系(转发/重定向)以及参数的使用范围而定。依据2:在满足使用范围的情况下,按照request→session→application的顺序优先选择生命周期短的节约资源。5.6.2转发和重定向服务器的组件间跳转重定向:重定向则从服务器端回到浏览器端,浏览器的地址栏会变为目标组件,产生新的请求。转发:转发在Web服务器内部进行,转而执行目标组件,浏览器端的地址栏不发生变化(请求不变)。request.getRequestDispatcher(目标地址字符串).forward(request,response);创建一个RequestDispatcher类型的转发器重定向转发特点地址栏改变,两次请求地址栏不变、请求不变目的地可以到达Web项目之外的资源只在Web应用内默认的根服务器的根项目的根共享数据对象session/applicationrequest应用场景不可刷新操作增、删、改之后可以刷新操作查询之后5.6.2转发和重定向【例】编写代码处理用户登录流程。重定向重定向<% Stringusername=request.getParameter("username"); Stringpwd=request.getParameter("pwd");
if(username.equals("admin")&&pwd.equals("123456")){ session.setAttribute("username",username);//令session存储数据
response.sendRedirect("welcome.jsp");//重定向到welcome.jsp }else{
response.sendRedirect("login.html"); }%>欢迎,<%=(String)session.getAttribute("username")%>verify.jspwelcome.jsp5.7豆瓣影评添加评论短评列表1.重定向2.所有用户、所有评论信息的存储applicationsessionrequest(1)星级数据的获取star.js移入:黄色星星移出:灰色星星单击:本星和之前的星星全部黄色(1)星级数据的获取star.js$("li").mouseover(function(){if(!$(this).hasClass("select")){ $(this).addClass('select').prevAll().addClass('select');}}).mouseout(function(){$("li").each(function(){if($(this).attr("flag")!="star"){//如果未选中,移出改变;所以要为每个设置标志 $(this).removeClass("select");}})})(1)星级数据的获取star.js<input
type="hidden"
id="score"
name="score"
value="4">.click(function(){$("li").removeClass('select').removeAttr("flag");$(this).addClass('select').attr("flag","star").prevAll().addClass('select').attr("flag","star");$("#score").val($(this).index()+1))}(2)评论信息的获取和封装getMessage.jsppublic
classMessage{private
int
id;privateStringuser;privateStringinterest;//兴趣:看过/想看private
int
score;//星级privateDatedate;private
int
vote_count;//有用的数量privateStringcomment;}applicationList<Message>(2)评论信息的获取和封装getMessage.jsp<% Stringuser=(String)session.getAttribute("userName");//已登录用户记录 request.setCharacterEncoding("UTF-8"); Stringinterest=request.getParameter("interest");
intscore=Integer.parseInt(request.getParameter("score")); Stringcomment=request.getParameter("comment");
List<Message>list=(List<Message>)application.getAttribute("message");
if(list==null){//第一次使用 list=newArrayList<Message>(); } Messagemsg=newMessage(list.size()+1,user,score,interest,comment,newDate(),0); list.add(msg); application.setAttribute("message",list);//添加至application,共享 response.sendRedirect("list.jsp");//重定向至短评列表页面%>5.7.2短评列表页面数据的呈现list.jsp5.7.2短评列表看过和想看数据统计好评、一般和差评数据统计applicationList<Message>4星和5星是好评,3星是一般,2星和1星是差评5.7.2短评列表热门、好评数据的筛选按"有用"和"评分"降序筛选10条展示public
classMessage{private
int
id;privateStringuser;private
int
score;privateStringinterest;privateStringcomment;privateDatedate;private
int
vote_count;}定义一个“比较器”类5.7.2短评列表public
classComparatorHotBestimplementsComparator{public
intcompare(Objectobj1,Objectobj2){if(obj1
instanceofMessage&&obj2
instanceofMessage){Messages1=(Message)obj1;Messages2=(Message)obj2;int
diff=s2.getVote_count()-s1.getVote_count();//投票降序if(diff==0){return
s2.getScore()-s1.getScore();//评分降序}else{return
diff;}}return0;}}list.sort(newComparatorHotBest());5.7.2短评列表短评展示对排序好的结果集合进行遍历在指定区域显示数据用户名看过/想看星级图片评论日期有用的数量评论5.7.2短评列表<%for(Messagem:show){%><spanclass="comment-votefr"><spanclass="vote_counts">
<%=m.getVote_count()%></span><inputtype="button"class="vote"value="有用"><spanstyle="display:none">
<%=m.getId()%></span></span><p><spanclass="short"><%=m.getComment()%></span></p>JSP的代码块JSP的表达式项目流程LoginServletsessionusername:Stringlogin.htmladd.jspgetMessage.jspapplicationlist:List<Message>list.jsplist.jsp有用count.jspadd.jsp没有username有username重定向list:List<Message>Ajax隐含对象:session:会话间数据共享。application:所有用户,所有会话间数据共享。5.7.2短评列表<%for(Messagem:show){%><spanclass="comment-votefr"><spanclass="vote_counts">
<%=m.getVote_count()%></span><inputtype="button"class="vote"value="有用"><spanstyle="display:none">
<%=m.getId()%></span></span><p><spanclass="short"><%=m.getComment()%></
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 报废汽车回收行业回收员形象规范
- 靶向PD-L1的抗体偶联药物在非小细胞肺癌中的疗效研究报告
- DB15T 4142-2025 风电场和光伏发电站消防管理规程
- 自然语言处理(微课版)课件 第5-9章 情感分析-对话系统
- 一级建造师考试(机电工程管理与实务)题库含答案(2025年绵阳)
- 抚顺市一级建造师考试(机电工程管理与实务)题库含答案(2025年)
- 2026年资产评估师资产评估方法专项练习及答案
- 2025年广东梅州一级建造师考试(机电工程管理与实务)题库含答案
- 2026年从“五方面人员-驻村工作队员”中选拔乡镇领导班子成员考试卷附答案解析(廊坊)
- 2026年海南省遴选公务员考试职业能力倾向测试复习题及答案
- 2026上半年四川遂宁产业投资集团有限公司招聘11人笔试历年备考题库附带答案详解
- 2026年镇江市交通运输系统事业单位人员招聘考试备考试题及答案详解
- 2026年昆明市政务服务中心(综合窗口)人员招聘考试备考试题及答案详解
- 2026年上海市高考语文备考之古诗鉴赏答题总结梳理
- 2026智能体原生网络AN白皮书
- 2026年中考道德与法治考前冲刺复习:常考考点答题模板分类汇编
- 2026中华全国供销合作总社直属事业单位招聘27人考试参考题库及答案解析
- 事故隐患排查治理基本知识
- 煤矿防治水知识培训
- 2026江铜铜箔科技股份有限公司第一批次春季校园招聘89人建设笔试参考题库及答案解析
- 2026年建安杯信息通信建设行业安全竞赛重点题库(新版)
评论
0/150
提交评论