第一篇:JSP内置对象讲解教案
第5章 JSP内置对象
在JSP中预先定义好了一些常用的对象,在Web应用中可以直接使用这些对象。内置对象的应用大大简化了Web开发工作。
5.1 JSP内置对象概述
因为java是区分大小写的,所以在JSP中对象名要注意字母的大小写。
JSP内置对象有9个 request对象 response对象 out对象 session对象 application对象 exception对象 page对象
pageContext对象 config对象
5.2 request对象
request对象用于接收客户端通过HTTP协议传送给服务器端的数据。
而response对象主要用来向客户发送信息,它包含了Web服务器对客户的响应信息。
request和response对象是JSP中很重要的两个内置对象,是实现客户端和服务器交互的基础。
5.2.1 request对象的功能
request对象用来接收客户端提交的请求
例如:接收用户提交的表单信息
infoReceive.jsp代码
<% String str1=request.getParameter(“RdName”);%> <% String str2=request.getParameter(“PhName”);%> 您输入的信息为:
姓名: <%=str1%>
电话: <%=str2%>
5.2.4 request对象常用方法
在客户访问页面时,向服务器的JSP引擎提交一个HTTP请求,该请求包含一个请求行、主机头和上载信息。例如:
◦ POST /chapt5/infoReceive.jsp HTTP/1.1
//请求行 ◦ Host localhost
//头,host是头名字
request对象也提供了一些其他方法,用来获得客户传来信息的其他部分。 request对象常用方法:
1.getProtocol():获取客户端向服务器端传送数据所使用的协议名称和版本号 2.getServerName():获得服务器的名字
3.getServerPort():获得服务器所使用的端口号。4.getRemoteAddr():获得客户端的IP地址。
5.getRemoteHost():获得客户端主机的名字,若失败,则返回客户端的IP地址。6.getMethod():返回客户端向服务器端传送数据的方法,一般方法为get或post。
7.getCookies():返回客户端的cookie对象,结果是一个cookie数组。如果客户端没有发送cookie,则返回空值。
8.getSession(boolean create):返回和当前客户端请求相关联的HttpSession对象,如果当前客户端请求没有和任何HttpSession对象关联,那么当create变量为true,则创建一个HttpSession对象并返回;反之,返回null。9.getHeader(String name):获得http协议定义的传送文件头信息。
10.getAttribute(String name):返回name指定的属性值,若不存在指定的属性,就返回null。
11.getAttributeNames():返回request对象所有属性的名字,结果集是一个Enumeration(枚举)类的实例。12.getHeaderNames():返回所有request header的名字,结果集是一个Enumeration(枚举)类的实例。
13.getHeaders(String name):返回指定名字的request header的所有值,结果集是一个Enumeration(枚举)类的实例。
14.getParameter(String name):以字符串的形式返回客户端传来的某一个请求参数的值,该参数名由name指定。当传递给此方法的参数名没有实际参数与之对应时,返回null。通常是表单中的参数.15.getParameterNames():返回客户端传送给服务器端的所有的参数名,结果集是一个Enumeration(枚举)类的实例。当传递给此方法的参数名没有实际参数与之对应时,返回null。
16.getParameterValues(String name):以字符串数组的形式返回指定参数所有值。
17.getQueryString():返回查询字符串,该字符串由客户端以GET方法向服务器端传送。18.getRequestURI():获得发出请求字符串的客户端地址
19.getServletPath():获得客户端所请求的脚本文件的文件路径。
20.setAttribute(String name,Java.lang.Object o):设定名字为name的request参数值,该值由Object类型的o指定。
21.getContentLength():以字节为单位返回客户端请求的大小。如果无法得到该请求的大小,则返回-1。22.getContentType():获取客户端请求的MIME类型。如果无法得到该请求的MIME类型,那么返回-1。23.getInputStream():以二进制的形式将客户端的请求以一个ServletInputStream的形式返回。使用此方法可以获得客户端的multipart/form-data数据,可以实现文件上传。
24.isSecure():如果客户机是通过一个安全的访问方式访问的,就返回true;反之,返回false。25.getDateHeader():返回一个long类型的数据,表示客户端发送到服务器的头信息中的时间信息。26.getInitHeader():获取客户端发送到服务器端的头信息中的某一个特定的信息,并转换为int类型。27.getContextPath():返回环境路径.对于JSP来说,一般是当前Web应用程序的根目录。
28.isRequestedSessionIdValid():返回一个指示客户端请求发送Session ID是否仍然有效的布尔值。
29.isRequestedSessionIdFromCookie():返回一个指示客户端请求发送Session ID是否存在于Cookie中的布尔值。
30.isRequestedSessionIdFromURL():返回一个指示客户端请求发送Session ID是否存在于URL中的布尔值。
5.2.5 request对象常用方法应用案例
【例5.2】 使用request对象的常用方法,获取客户端提交信息的不同部分。
本例中的用户输入页面infoInput2.html只需要把例5.1的文件infoInput.html的form的action属性值改为infoReceive2.jsp即可。infoReceive2.jsp主要代码
<%
out.println(“姓名文本框提交信息:” + request.getParameter(“RdName”)+ “
”);out.println(“电话文本框提交信息:” + request.getParameter(“PhName”)+ “
”);out.println(“客户端协议名和版本号:” + request.getProtocol()+ “
”);out.println(“客户机名:” + request.getRemoteHost()+ “
”);out.println(“客户机的IP地址:” + request.getRemoteAddr()+ “
”);out.println(“客户提交信息的长度:” + request.getContentLength()+ “
”);
%> out.println(“---------
”);
out.println(“getContextPath:” +request.getContextPath()+ “
”);out.println(“requestURI=” + request.getRequestURI()+ “
”);out.println(“requestURL=” + request.getRequestURL()+ “
”);out.println(“servletPath=” + request.getServletPath()+ “
”);// getServletPath 不建议使用 因为当servlet映射成/*时 无法获得
String uri = request.getRequestURI();String servletPath = uri.substring(request.getContextPath().length());out.println(“servletPath=” + servletPath + “
”);总结:
request.getRequestURI()与request.getRequestURL()与request.getServletPath()区别
a)getRequestURI()获得的信息:/day6/servlet/RequestServlet b)getRequestURL()获得的信息:http://localhost/day6/servlet/RequestServlet c)getServletPath()获得的信息: servlet/RequestServlet
getServletPath 不建议使用
因为当servlet映射成/*时 无法获得。
d)request.getContextPath()获得的信息: /day6
那如何获取serverpath String uri = request.getRequestURI();
// /day06aaa/servlet/RequestDemo1
String servletPath = uri.substring(request.getContextPath().length());
System.out.println(“servletPath=” + servletPath);5.3 response对象
◦ ◦ 把服务器端的数据以HTTP的格式发送到客户端浏览器 它的功能和request对象的功能相反
request对象用于得到用户提交的信息 而response对象是向用户发送信息
两者结合起来完成动态页面的交互功能。
5.3.1 response对象的功能
response对象提供的几种输出结果的主要方法:
◦ sendRedirect():页面重定向方法。◦ setStatus():设置状态行方法。
◦ setContentType():设置文本类型方法。
5.3.2 sendRedirect()方法
将客户端浏览器转向新的页面,页面中重定向语句后的代码不再被执行。 它可以根据用户的不同要求转向不同的页面。 例如:防盗链。(第3章 http协议中讲解)
【例5-3】response对象的使用。
用户在登录界面输入用户名和密码,提交后验证登录者输入的用户名和密码是否正确,根据判断结果转向不同的页面。
◦ 其中userLogin.html为用户输入界面
◦ userReceive.jsp为接收用户输入信息并判断输入是否正确页面
◦ loginCorrect.html和loginError.html分别为登录成功界面和登录失败界面。
userLogin.html页面主要代码:
userReceive.jsp页面源代码:<% String Name = request.getParameter(“RdName”);String Passwd = request.getParameter(“RdPasswd”);if(Name.equals(“Mary”)&& Passwd.equals(“123456”))
response.sendRedirect(“loginCorrect.html”);else
response.sendRedirect(“loginError.html”);%>
需要注意的是,在实际的Web开发中,用户的信息保存在数据库中,判断用户登录时所输入的用户名和密码是否正确需要连接到数据库,和数据库中的数据进行匹配。此处为了演示sendRedirect方法的使用,简单的和常量进行比较。
5.3.3 response的状态行
1.状态行的作用
当页面出现错误时,服务器会自动响应,将相应的出错信息返回客户端。状态行包含3位数字的状态代码,代表错误的性质和处理方法。共有5类状态码,如下:
1XX(1开头的3位数):主要是实验性质的。例如101表示服务器正在升级协议。
2XX:表示请求成功。如200表示请求成功。
3XX:表示在请求满足之前应采取的进一步行动。如302请求重定向; 305表示请求必须通过代理来访问。
4XX:浏览器不能满足请求时,返回的状态码。如404表示请求的页面不存在。
5XX:服务器执行出现错误时,返回的状态码。如500表示服务器内部发生错误,不能服务。
2.setStatus()方法
程序中可以使用response对象的setStatus()方法设置状态码。在一般情况下,不需要在程序中设置状态码。页面出现问题时,服务器会自动响应,并发送相应的状态码提示用户。
使用response.setStatus(int n)方法设置状态行
◦ 例如response.setStatus(501)取得错误信息为501的出错信息,返回该出错页面到客户端。◦ 如果状态代码为出错码,页面中 response.setStatus()后面的语句将不被执行。
[例5-4]状态行的应用
本例包含4个文件 : StatueCode.html
显示不同的状态行
href=“statusCode200.jsp”>200请求成功信息
第二篇:JSP内置对象实验报告
JSP程序设计实验报告
(三)院系:计算机科学与工程学院
【实验题目】
JSP内置对象
【实验目的】
1、了解JSP中4个内置对象request、reponse、session、pagecontext的基本概念。
2、理解JSP内置对象的常用方法的功能。
3、掌握JSP内置对象的应用。
【实验内容】
1、request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
2、response对象:response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
3、session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。
4、pageContext对象:pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者。
5、练习(自己完成)
【实验代码】
实验1 request对象使用
<%@ page language=“java” import=“java.util.*” pageEncoding=“GBK”%> <%
%>
+ request.getServerName()+ “:” + request.getServerPort()+ path + “/”;
请求方式:<%=request.getMethod()%>
请求的资源:<%=request.getRequestURI()%>
请求用的协议:<%=request.getProtocol()%>
请求的文件名:<%=request.getServletPath()%>
请求的服务器的IP:<%=request.getServerName()%>
请求服务器的端口:<%=request.getServerPort()%>
客户端IP地址:<%=request.getRemoteAddr()%>
客户端主机名:<%=request.getRemoteHost()%>
表单提交来的值:<%=request.getParameter(”qwe“)%>
<%
%> String str = ”“;if(request.getParameter(”qwe“)!= null){ Enumeration enumt = request.getParameterNames();while(enumt.hasMoreElements()){ str = enumt.nextElement().toString();out.println(str + ”:“ + request.getParameter(str)+ ”
");} }
第三篇:感恩教案jsp
洪常小学一年级语文上册第一单元“基于标准的教学”教学设计
第三课 童心 “基于标准的教学”教学设计
(总第 20 学时)
课型:新授课
案序:第三单元
设计者:万金辉
学习目标:
1.让学生了解感恩,即让学生懂得为什么要感恩。
2.让学生懂得怎样去感恩,通过活动让学生真真学会如何做人。3.引导学生畅谈理想,展开想象对自己的未来进行美好憧憬。
学习重点:
让学生了解感恩,即让学生懂得为什么要感恩,在有理想的目标中怀着感恩心去实现,自己理想.学习难点:
让学生懂得怎样去感恩。自己脚踏实地的努力去实现。
评价方案:
兴趣激励:让学生明确学习的重要价 值,优化导入设计,教师通过精心设 汁教学过程,适当补充与学生生活相关联的教学材料,激发学生的学习。
氛围激励;正确运用肯定和奖励,采 取适当的竞争方法,适度的竞争,营造民主、平等、和谐、积极向上的课堂氛围。充分、恰当地运用教材、录音、录像等多媒体,让学生全感官参与学习。
教学过程活动化:组织多种形式的课堂教学讨论、交流、等活动形式,完成教学目标,在教学中注重学生自学、指导学生学会自由学习、指导学生学会自我评价。
课前准备:
搜集与主题相关的歌曲,如《感恩的心》 洪常小学一年级语文上册第一单元“基于标准的教学”教学设计搜集相关的学生对感恩的认识,和对自己理想的憧憬,了解学生。
教学预设:
我们每一个人都获得过别人的帮助和支持,应该时刻感谢这些帮助你的人,感谢上天的眷顾。一个人的成长,要感谢父母的恩惠,感谢朋友的恩惠,感谢师长的恩惠,感谢社会的恩惠。
一、讨论:自己怎样认识感恩的?
学生1:所谓“感恩”,就是要记住别人对自己的恩惠,学会报答那些给自己帮助的人。
学生2:我认为我们在生活中就是要多帮助父母,多体谅老师,那就是感恩。
学生3:感恩是一种品德,是一种生活态度。我们只有学会了感恩,生活才会快乐,生活中才会有真挚的情感。
学生4:生活中我们要感恩父母,感恩老师,感恩一切帮助过我的人。教师总结:
刚才几位同学都说了自己对“感恩”的理解,非常好。老师想,在生活中,我们首先要感恩的是父母,因为他们生养了我们;其次,我们要感恩的是老师,因为他们教育了我们;另外,我们还要感恩朋友和对手,因为他们促进了我们的成长;甚至我们还要感恩自然,因为自然给了我们阳光雨露,蓝天碧树,四季变换。可以这样说,面对生活,我们就要怀着一颗感恩之心。
二、讨论:
1.为什么要感恩父母?
2.为什么要感恩老师?为什么要感恩自然和身边的人? 学生先自己考虑,然后再进行小组交流。
三、继续讨论: 1.怎样感恩父母? 洪常小学一年级语文上册第一单元“基于标准的教学”教学设计2.怎样感恩老师?
3.怎样感恩自然和身边其他的人?
学生针对以上三个问题进行讨论,而后教师总结。1.分组讨论发言 2.教师总结
四、下面进行现场调查:
问题:
1、你母亲的生日?
2、你给父亲买过生日礼物吗?
3、你母亲最喜欢的是哪套衣服?
4、你父母的结婚纪念日?
5、你爸爸今天40几岁?属什么的?
6、你爸爸喜欢喝白酒吗?那他一般喝什么牌子的?
7、你父亲喜欢吃的菜是? „„„
总结:通过刚刚的调查我们发现,并不是每个同学都十分了解自己的父母,可是反过来如果被问的是父母,不用调查也会知道结果,父母会对我们的一切记忆的都很深刻!感恩方法大奉献:(1)为劳累的父母、长辈倒一杯茶,揉揉肩,洗洗脚,说说笑话。
(2)每天好好学习,学会尊重、关心老师,给老师一个好心情。(3)体谅、理解父母、老师的苦楚,不顶嘴、争吵,多为他们着想。(4)每天分担些力所能及的事,学会说 “谢谢”、“您辛苦了!”。(5)尊重父母、老师的劳动成果,天天反思过失,学会说“对不起”(6)学会关爱身边的人,存好心,做好人,及时给他人送上温暖。(7)多做善事、好事,尽自己最大的力量报效国家、社会、人民。(8)列一张感恩表,记下感恩的事情,感恩的人,时时图求报答。洪常小学一年级语文上册第一单元“基于标准的教学”教学设计
一起做一个感恩的人吧!感恩父母,感恩老师,感恩社会„„这是我们共同的宣誓,从我做起,从现在做起,总之,希望同学们:1.孝敬父母,学会体贴;2.尊敬老师,努力学习;3.尊重他人,团结友爱。
孩子们,我们带着感恩的心,怀揣自己的理想让我们一起飞翔,理想是灯塔,指引人生前进的方向,照亮人生前进的路程。没有理想,就没有坚定的方向,没有坚定的方向,就没有生活。福尔摩斯也说:世界上最重要的事,不在于我们在何处,而在于我们朝什么方向走。我们头上的一颗指路明星就是——理想。搜集资料:
1.这些有关理想的名人名言是否给同学们一点启示,同学们,我们作为风华正茂的青少年,更应该及早立下自己的志向今天的习作课,我们就一起来畅谈自己的理想。(板书:我的理想)
2、课前同学们不但搜集了关于理想的名言,还搜集了一些故事,下面请同学为大家讲述一个周恩来“为中华崛起而读书”的故事。
总结:理想是美好的,但现在的我们是六年级的小学生,要实现自己远大的理想,那我们应该怎么做呢?
(1)、让学生小组内自由讨论这个问题,并把讨论的结果要点清楚地写下来。
(2)、各小组代表在班上汇报本组的讨论结果。(教师引导学生适当用上“只有„„才„„,虽然„„但是„„”等关联词。)
引路:孩子们,我们一起看一看我们的理想树,你的理想是什么呢?(找学生那自己的理想名片贴在理想树上)
同学们,你有什么样的理想呢?在实现自己理想的旅途中做为五年级的学生你准备怎么做?
学生1:努力学习,按时完成作业。学生2:脚踏实地,做自己应该做的事。
学生3:做事不要急于求成,不要放弃,相信自己会实现。学生4:合理认识自己,有条理安排自己时间去学习。
(引导学生从理想回到现实,从眼前的、力所能及的事做起,以实现人生理想。)总结与鼓励: 洪常小学一年级语文上册第一单元“基于标准的教学”教学设计
理想是还没有实现的东西,是对未来的美好憧憬和希望,这要求我们好好把握今天,努力学习,打下坚实的知识基础,才能拥有美好的明天,理想的实现前提是把握人生。孩子们,我们带着感恩,一起祝福我们实现理想吧!音乐:《感恩的心》,感恩的心,感谢有你,伴我一生,让我有勇气作我自己,感恩的心,感谢命运,花开花落,我依然会珍惜„„
伴随着这动人的歌曲,我宣布“谈感恩,畅理想”到此结束。板书设计:
童 心
学会感恩:父母 老师 朋友 社会 „„ 我的理想:医生 宇航员 科学家 „„课后反思:
第四篇:jsp教案6
湖南城市学院教师备课纸
第 6 次课
题
JSP内置对象(Exception、application、page、PageContext、config)及其应用
目的要求
掌握Exception、application、page、PageContext、config对象的属性、方法及应用
教学重点
JSP内置对象的含义、属性、方法及使用 教学难点 各对象的综合运用 教学课时 4(含2课时上机)
教学方法 讲解、示例与启发式教学相结合 教学内容和步骤
JSP内置对象是不需要声明,直接可以在JSP中使用的对象,JSP有以下几种内置对象: request, reponse, out, session, application, config, pagecontext, page, exception.6.1 aplication对象 6.1.1 什么是application application是执行javax.Servlet.ServletContext界面的类,主要用于保存用户信息,代码片段的运行环境; 它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享。服务器启动后就产生了这个application对象,当客户再所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。6.1.2 Application对象常用方法
(1)public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。
(2)public Object getAttribute(String key): 获取application对象中含有关 键字的对象。(3)public Enumeration getAttributeNames():获取application对象中含存
储的对象的名字。
(4)public void removeAttribute(String name)(5)public String getMajorVersion()取得服务器支持的主版本号。(6)public String getMinorVersion()取得服务器支持的次版本号。(7)public String getServerInfo()(8)public String getRealPath()例1:application.jsp
<% Object obj = null;String strNum =(String)application.getAttribute(“Num”);int Num = 0;//检查是否Num变量是否可取得 if(strNum!= null)Num = Integer.parseInt(strNum)+ 1;//将取得的值增加1 application.setAttribute(“Num”, String.valueOf(Num));//起始Num变量值 %> application对象中的Num变量值为 <%= Num %>
第五篇:jsp教案8
湖南城市学院教师备课纸
第 8 次课
题 JAVA服务器小程序(ServLet)之Servlet链、编程应用
目的要求 掌握Servlet链的含义及编程应用 教学重点 ServLet链的构建与Shtml的使用 教学难点 ServLet链的构建 教学课时 4(含2课时上机)
教学方法 讲解、示例与启发式教学相结合 教学内容和步骤 8.1 Servlet链
8.1.1 什么是servlet链
Servlet链,它是JvavServer体系结构的高级特征之一, 与UNIX和DOS命令中的管道类似,你也可以将多个servlet以特定顺序链接起来。在servlet链中,一个servlet的输出被当作下一个servlet的输入,而链中最后一个servlet的输出被返回到浏览器。8.1.2表过滤器(Table Filter)我们以表过滤器看看如何编写一个可以被用于链接的servlet,这个表过滤器servlet将分析另一个servlet的输出,查找含有特殊表格式指令的HTML注释,这些指令包括表有多少列、是否显示表头等等。在该表格式指令之后的所有行将会被格式化成一个HTML表格。这样,链中的前一个servlet只要简单地将数据用逗号分割,数据就可以一行一行地直接输出了,而无须将这些数据格式化成HTML表格。同样,当你决定修改这个表格的格式时,你就不必修改产生数据的servlet,而直接修改这个表过滤器servlet就可以了。
这个表过滤器servlet实现了HTTP服务的方法。首先,它必须重复(echo)上一个servlet中设置的头信息。这些信息包括内容类型、调用的URL、远程主机等等。TableFilter.java显示了设置这些头信息的必要代码。
例1:TableFilter.java
package javaservlets.samples;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TableFilter extends HttpServlet
{
/**
*
Performs an HTTP service request
* @param req The request from the client
* @param resp The response from the servlet
*/
public void service(HttpServletRequest req,HttpServletResponse resp)
throws ServletException, java.io.IOException
{
// Get all headers set by the previous servlet and echo them
java.util.Enumeration e = req.getHeaderNames();
while(e.hasMoreElements()){
String header =(String)e.nextElement();
String value = req.getHeader(header);
resp.setHeader(header, value);
} // 如下述代码所示,接下来的步骤是取得一个可以从前一个servlet的输出流中讲读取数据的输入流,如果该输入流的内容类型是某种我们可以分析的类型(如HTML),我们就继续下一步骤;否则,我们就从输入流中读出所有字节并毫不修改地把它们写回浏览器。
// Get the input and output streams
ServletInputStream in = req.getInputStream();
ServletOutputStream out = resp.getOutputStream();
// Only process if this is a recognized MIME type
String type = req.getContentType();
if(type.equals(“text/html”)||
type.equals(“text/table”)||
type.equals(“application/x-www.xiexiebang.command, process
// the line
if(inTable){
// Search for the end of the table
if(s.startsWith(””);
// Output the table
out.println(“Symbol,Element”);
out.println(“Ac,Actinium”);
out.println(“Ag,Silver”);
out.println(“Al,Aluminum”);
//Etc...out.println(“Y,Yttrium”);
out.println(“Yb,Ytterbium”);
out.println(“Zn,Zinc”);
out.println(“Zr,Zirconium”);
out.println(“”);
// Wrap up
out.println(“”);
out.flush();
out.close();
}
在你浏览器的URL中输出“/Elements”调用我们在Jrun中配置的servlet映射。在刷新时,浏览器向Web服务器发出URL请求,Web服务器找到与这个URL信息对应的servlet映射,然后调用Elemetns Servlet。Elements Servlet处理GET请求并返回未格式化的元素周期表数据给Web服务器。之后,Web服务器发现存在servlet链接,于是将Elements Servlet的输出重定向为servlet链接中下一个servlet,也就是表过滤器的输入。表过滤器重新设置所有HTTP首部,以适应表过滤器的需要,然后读入所有元素周期表数据,表过滤器使用指定的表格格式信息来分析和处理这些数据,最后生成一个格式化的元素周期表。
⑶ Mime类型
触发servlet链接的另外一种方法是将一个servlet与特定Mime类型联系起来。当这种Mime类型的应答产生时,输出就会被发送给与之相联系的servlet。由于MIME类型是在servlet向输出流中写入时才确定的,所以用这种方法你可以轻易地将servlet的输出重定向到其他servlet。
① Java Web Server
如前所述,在所有的工作之前,你必须确认servlet链接功能已经启用(见图4.4)。截止到本书发稿,还没有可以管理MIME类型和servlet映射的图形用户接口(GUI),所以你不得不手工编辑“mimeservlets.properties”文件。这个文件位于目录“/
# This file maps mime-types to the servlets which process them
# This is used by the filter manager to set up chains of servlets
# where the ouput of one servlet gets piped to the input of
# another servlet based on the mime-type that the servlet specifies
# with setContentType(“mime-type”)
#
# The default servlet for all mime-types is file.Do not set this
# explicitly.#
# Entries in this file should be of the form
# mime-type/servletname
# ie.# foo/bar=fooServlet
# where fooServlet is defined in servlets.properties
java-internal/parsed-html=ssi
java-internal/template-content=template
② Jrun
在JRun中,你可以通过系统管理应用程序设置MIME类型映射。如图4.10所示,你可以把一个servlet和特定的MIME类型联系起来。
MIME类型链接的例子:Indy 500
为了说明如何通过MIME类型来触发servlet链接,让我们编写一个列出Indianapolis 500自1911年起的所有优胜者。就像Elements Servlet一样,我们直接将输入用逗号分隔的各行数据,并用表过滤器将其格式化成HTML表格形式输出。惟一的不同在于我们设置了一个不同的MIME类型,通过这个MIME类型,Web服务器将Indy 500 Servlet的输出重定向为表过滤器servlet的输入(见例3)。
例3 Indy500.java
package javaservlets.samples;
import javax.servlet.*;
import javax.servlet.http.*;
/**
This is a simple servlet that will return a list of
* past Indianapolis 500 winners
*/
public class Indy500 extends HttpServlet
{
/**
*
Performs the HTTP GET operation
* @param req The request from the client
* @param resp The response from the servlet
*/
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException, java.io.IOException{
// Create a PrintWriter to write the response
java.io.PrintWriter out =
new java.io.PrintWriter(resp.getOutputStream());
// Set the content type of the response
resp.setContentType(“text/table”);
// Print the HTML header
out.println(“”);
out.println(“
”);out.println(“
”);// Output special table formatting instructions for // the TableFilter servlet out.println(“”);out.println(“Planet,Avg.Distance from Sun,” + “Time to orbit,Time to spin,Moons”);out.println(“Mercury,58 million km,88 days,58.6 days,0”);out.println(“Venus,108 million km,225 days,243 days,0”);out.println(“Earth,150 million km,365.25 days,24 hours,1”);out.println(“Mars,228 million km,687 days,24.62 hours,2”);out.println(“Jupiter,778 million km,11.9 years,9.83 hours,16”);out.println(“Saturn,1427 million km,29.5 years,10.65 hours,19”);out.println(“Uranus,2870 million km,84 years,17.23 hours,15”);out.println(“Neptune,4497 million km,164.8 years,16 hours,8”);out.println(“Pluto,5913 million km,248 years,6.375 days,1”);out.println(“”);// Wrap up out.println(“”);out.flush();out.close();
} /** *
Initialize the servlet.This is called once when the * servlet is loaded.It is guaranteed to complete before any * requests are made to the servlet * * @param cfg Servlet configuration information */
public void init(ServletConfig cfg)
throws ServletException{
super.init(cfg);
}
/**
*
Destroy the servlet.This is called once when the servlet
* is unloaded.*/
public void destroy()
super.destroy();
}
}
和前面的servlet一样,Solar System Servlet将直接输出无格式的数据而将格式化的工作交由表过滤器servlet来完成。由于Java Web Server不支持用HTTP请求触发servlet链接,我们将使用JRun。图4.14显示了Solar System Servlet和表过滤器servelt链接起来以后的输出结果。请注意调用servlet时使用的URL,在这种情况下,URL中包含了一个链接在一起的servlet名字,它们之间用逗号来间隔。8.2 Java Servlet 编程及应用 8.2.1服务器端包含
服务器端包含(Server-Side Includes)是Web 页面设计中的一种常用技术,在一个输出很多网页的系统中,经常会有一些网页的组成部分在多个网页中同时出现。Server-Side Includes 是Java Server 体系结构的一个高级特征,它可以在HTML 文档中嵌入servlet,这样就可以利用一个或多个servlet 来组成最终的HTML 文档,这种特殊的包含了Servlet 输出和HTML 标记的文件用扩展名.shtml 表示。
Servlet 标记的语法:
<servlet name=Servlet_name code=Servlet.class codebase=类路径
名称 1 = 参数值 1
名称 2 = 参数值 2
........名称 n = 参数值 n >
<param name =名称 1 value = 参数值 1 param name =名称 2 value = 参数值 2........param name =名称 n value = 参数值 n > </servlet>
编程思路及技巧:下面是一个完整的简单的服务器包含(SSI)的实例,整个shtml 页面由2个Servlet 组成,第1个Servlet是Header.java,代表页头,主要功能是显示标题信息;第2个Servlet 是Footer.java,代表页脚,主要功能是显示页脚的版权信息;Together.shtml 是将2个Servlet 组合在一起显示的服务器包含,它应当从文档根目录(如root)中加载。
例5: Header.java
import javax.servlet.*;import java.io.*;public class Header extends GenericServlet { public void service(ServletRequest req,ServletResponse resp)throws ServletException, IOException
{ res.setContentType(“text/html;charset=gb2312”);
PrintWriter out =res.getWriter();
// Get the title of the page.Set to empty string if
// no title parameter was given
String titles[] = req.getParameterValues(“title”);
String title = “";
if(titles!= null){
if(titles.length > 0){
title = titles[0];
}
}
Footer.java import javax.servlet.*;import java.io.*;public class Footer extends GenericServlet{ public void service(ServletRequest req,ServletResponse resp)throws ServletException, IOException
{ res.setContentType(”text/html;charset=gb2312“);
PrintWriter out =res.getWriter();
// Format the standard header
out.println(”<hr>“=;
out.println(”<p align='center'><i> 版权所有,信息公司</i></p>“=;
// Wrap up
out.flush();
out.close();
}
/** * <p>Returns information about this servlet */ public String getServletInfo(){
return ”Footer “;
} public void init(ServletConfig cfg)throws ServletException
{
super.init(cfg);} public void destroy(){
super.destroy();
} } 8.2.2使用Java Servlet API 进行会话管理
javax.servlet.http.HttpSession 接口封装了HTTP 会话的细节,该会话与一段时间内特定的Web 客户对Web 服务器的多个请求相关。管理会话数据主要涉及到3个方面:会话交换、会话重定位和会话持久性,只有实现了java.io.Serializable 接口的数据对象才能够被交换、重定位和保持。这个接口主要是让对象具有序列化的能力,它可以将对象的状态信息写入任意的输出流中如:文件、网络连接等。
编程思路:下面是实现一个简单在商场购物的例子,当用户选购商品(糖果、收音机和练习簿)放入购物袋中,保存选购的商品信息。编程技巧说明:
在Servlet 中进行会话管理时,首先要获得会话对象。HttpServletRequest.getSession()对象返回与请求相关的当前HttpSession 对象,并且当该对象不存在时就新创建一个对象;HttpServletRequest.getSession(true)实现相同的功能。如果参数是false,当不存在会话对象时,将返回一个null 值。
8.3 小结
在本讲中,我们讨论了servlet链及编程应用,这是JavaServer体系结构的高级特征之一。servlet链接提供了将一个servlet的输出重定向为另一个servlet的输入的能力。这样,你就可以划分工作,从而使用一系列servlet来实现它。另外,你还可以将servlet组织在一起以提供新的功能。
作
业
①:用ServLet编程完成向浏览器输出一个九九乘法表的表格 ②:在TOMCAT环境下配置shtml页面的运行环境并完成教案上的例5。教学总结:
上机实验八:ServLet链与Shtml的使用(2课时)
一、实验目的及要求
1.掌握ServLet链在各种WEB服务器中的配置
2.掌握触发ServLet链的各种方法及如何编写ServLet链 3.掌握shtml的使用
二、实验环境
Myeclipse、Tomcat、JDK
三、实验内容
1.上机完成教案上所有的示例
2.编写shtml页面嵌入如下二个servlet并分析运行结果 Header.java
import javax.servlet.*;import java.io.*;public class Header extends GenericServlet { public void service(ServletRequest req,ServletResponse resp)throws ServletException, IOException
{ res.setContentType(”text/html;charset=gb2312“);
PrintWriter out =res.getWriter();
// Get the title of the page.Set to empty string if
// no title parameter was given
String titles[] = req.getParameterValues(”title“);
String title = ”“;
if(titles!= null){
if(titles.length > 0){
title = titles[0];
}
}
Footer.java import javax.servlet.*;import java.io.*;public class Footer extends GenericServlet{ public void service(ServletRequest req,ServletResponse resp)throws ServletException, IOException
{ res.setContentType(”text/html;charset=gb2312“);
PrintWriter out =res.getWriter();
// Format the standard header
out.println(”<hr>“=;
out.println(”<p align='center'><i> 版权所有,信息公司</i></p>“=;
// Wrap up
out.flush();
out.close();
}
/** * <p>Returns information about this servlet */ public String getServletInfo(){
return ”Footer ";
} public void init(ServletConfig cfg)throws ServletException
{
super.init(cfg);} public void destroy(){
super.destroy();
} } 3.在Myeclipse环境下完成教材P143页中习题6-1与6-2
四、实验步骤
略
五、实验思考
1.怎样利用Servlet实现页面重定向?
2.比较在TOMCAT与JRUN下配置Servlet链的异同