Java Web程序设计 课件 第5章 JSP;第6章 JSP内置对象_第1页
Java Web程序设计 课件 第5章 JSP;第6章 JSP内置对象_第2页
Java Web程序设计 课件 第5章 JSP;第6章 JSP内置对象_第3页
Java Web程序设计 课件 第5章 JSP;第6章 JSP内置对象_第4页
Java Web程序设计 课件 第5章 JSP;第6章 JSP内置对象_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章JSP主讲人:2025/2/61主要内容2025/2/6《Web程序设计》21JSP基础2指令标签3相对路径与绝对路径本章课程目标知识目标掌握JSP基本语法、指令标签及路径;熟练掌握Web应用服务器的配置方法以及Web开发工具的使用方法。能力要求:能够理解并掌握Web程序设计中的基础知识与工作原理,将知识与原理应用于开发过程中的问题分析;2025/2/6《Web程序设计》35.1JSP简介JSP全称JavaServerPages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。JSP是一种JavaServlet,主要用于实现Javaweb应用程序的用户界面部分。网页开发人员通过结合HTML代码、XHTML代码、XML元素以及嵌入Java代码块来编写JSP。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。2025/2/6《Web程序设计》4JSP简单示例2025/2/6《Web程序设计》5<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%><html><head><title>简单JSP示例</title></head><body><h3>输出Fibonacci数列</h3><div><%inta=0,b=1,c;for(inti=0;i<20;i++){c=a+b;println(“<b>”+c+“</b”);}%></div></body></html>2025/2/6《Web程序设计》6JSP语法JSP中的脚本程序必须包含在<%和%>之间2025/2/6《Web程序设计》7<%代码片段%>或<%

代码片段%>今天是:<%out.println(newjava.util.Date().toLocaleString());%><%java.util.Datetoday=newjava.util.Date();out.println(“今天是:”+today.toLocaleString());%>JSP注释JSP中可以为代码添加注释,主要分为三种情况,HTML注释、Java代码注释、JSP脚本程序注释2025/2/6《Web程序设计》8注释方式语法格式说明HTML注释<!--注释文本-->HTML注释,通过浏览器查看网页源代码时可以看见注释内容Java注释//Java单行注释/*Java多行注释*/Java中的单行与多行注释,注释内容不会被发送至浏览器,也不会被编译JSP注释<%--JSP注释--%>JSP注释,注释内容不会被发送至浏览器,也不会被编译JSP注释示例2025/2/6《Web程序设计》9<!--以下代码显示了当前系统时间(HTML注释)--><%--代码释义(JSP注释):初始化日期对象使用Date获取系统日期--%><%java.util.Datetoday=newjava.util.Date();out.println(“今天是:”+today.toLocaleString());//以当前时区格式显示日期%>JSP表达式JSP中允许表达式的单独输出,可以将任何合法的Java表达式的值直接输出。表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。这种方式主要的用途是输出某个变量和表达式的值。2025/2/6《Web程序设计》10<%=表达式%><%out.println(表达式);%>2025/2/6《Web程序设计》11<body><div><%java.util.Datetoday=newjava.util.Date();%>今天是:<%=today.toLocaleString())%><!--以当前时区格式显示日期--></div></body>普通变量声明在脚本程序中可直接声明变量,这种方式声明的变量能被后续的代码直接使用。例如,以下代码声明了一个area变量,后面的代码中计算并输出了该变量的值。2025/2/6《Web程序设计》12<%floatarea;area=3.14*10*10;//计算圆的面积%>圆的面积为:<%=area%>类变量的声明类变量的声明通过“<%!%>”来实现例如,声明了计数器变量counter,在后续的代码中进行累加并显示。2025/2/6《Web程序设计》13<%!DataTypevar1,var2;%><%!intcounter=0;%>计数器的值为:<%counter++;out.println(counter);%>这种方法声明的变量是类的成员变量,普通变量声明的是函数内的局部变量。左例中,当页面不断刷新时,counter值会不断累加。如果换成普通变量的声明,则该counter值始终为1。方法的声明JSP页面中的方法声明通过”<%!%>“来实现2025/2/6《Web程序设计》14<body><%!floatcalcArea(floatradius){return3.14*radius*radius;}%><div>半径为10的圆面积为:<%out.println(calcArea(10));%></body>需要注意的是,JSP中声明的方法只能在同一页面中使用,不允许跨页面使用。主要内容2025/2/6《Web程序设计》151JSP基础2指令标签3相对路径与绝对路径JSP指令标签JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。JSP指令通过专门的指令标签定义,主要包含以下三种:page指令include指令taglib指令。2025/2/6《Web程序设计》16page指令JSP中的page指令用于向JSP容器提供与当前JSP页面相关的指令。2025/2/6《Web程序设计》17<%@pageattribute=”value”attribute2=”value2”...%>属性名描述buffer指定out对象使用缓冲区的大小autoFlush控制out对象的缓存区contentType指定当前JSP页面的MIME类型和字符编码errorPage指定当JSP页面发生异常时需要转向的错误处理页面isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面extends指定servlet从哪一个类继承import导入要使用的Java类info定义JSP页面的描述信息isThreadSafe指定对JSP页面的访问是否为线程安全language定义JSP页面所用的脚本语言,默认是Javasession指定JSP页面是否使用sessionisELIgnored指定是否执行EL表达式isScriptingEnabled确定脚本元素能否被使用contentType和pageEncoding属性contentType属性设置Content-Type响应报头,标明即将发送到客户程序的文档的MIME类型。pageEncoding属性设置页面的编码字符集。通常contentType中包含了字符集的声明,如果只设置字符集,则可以通过pageEncoding声明。MIME-Type:text/html;charset=GBKCharacter-Set:GBK2025/2/6《Web程序设计》18<%@pagecontentType="MIME-Type;charset=Character-Set"pageEncoding=”Character-Set”%>import属性使用page指令的import属性可以指定JSP页面需要引入的外部包。通常JSP中Java程序除了默认引入了java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*包外,其它需要使用的包或类都需要通过import指令引入。2025/2/6《Web程序设计》19<%@pageimport="package1.class1,package2.class2,package3.*,"%><%@pageimport=“java.util.Date,nchu.ss.util.*”%>errorPage与isErrorPage属性errorPage属性用来指定一个JSP页面,由该页面来处理当前页面中抛出但未被捕获的任何异常(即类型为Throwable的对象)。例如,页面中要指定/error.jsp为异常处理页面,可以声明如下:2025/2/6《Web程序设计》20<%@pageerrorPage="/error.jsp"%>include指令JSPinclude指令用于通知JSP引擎在翻译当前JSP页面时,将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式,称为静态引入。当前JSP页面与静态引入的文件紧密结合为一个完整的文件。这些文件可以是JSP页面、HTML页面、文本文件或是一段Java代码。2025/2/6《Web程序设计》21<%@includefile="relativeURL|absoluteURL"%>例如,有一段js文件引入的JSP文件—all_js.jsp2025/2/6《Web程序设计》22<scripttype=”text/javascript”src=”js/jquery-min.js”></script><scripttype=”text/javascript”src=”js/util.js”></script><scripttype=”text/javascript”src=”js/index.js”></script><%@pagecontentType="text/html;charset=utf-8"%><html><head><jsp:includefile=”all_js.jsp”/></head><body><!--正常业务内容--></body></html>需要注意的是:include指令是以静态方式包含文件,被包含文件将原封不动地插入JSP文件中。因此,在所包含的文件中不能使用<html></html>、<body></body>标记,否则会因为与原有的JSP文件有相同标记而产生错误。另外,因为原文件和被包含文件可以相互访问彼此定义的变量和方法,所以要避免变量和方法在命名上产生冲突。2025/2/6《Web程序设计》23taglib指令JSPAPI允许自定义JSP标签,如:HTML或XML标签,标签库是一组实现自定义行为的用户定义标签。在自定义标签库中,可以把复杂的业务逻辑功能都封装在标签库中,而不必在jsp中写具体的代码。这样,jsp代码与java编码能力不必强制耦合在一起,可以提高代码的封装性和可维护性。2025/2/6《Web程序设计》24taglib指令的使用语法如下:2025/2/6《Web程序设计》25<%@tagliburi="uri"prefix="prefixOfTag">参数说明:uri:自定义标签的完整URI,是由第三方标签库定义的,如果是开发者定义的,则由开发者给出URI,一般是唯一的;prefixOfTag:自定义标签的前缀,可以根据需要或业务特点命名,一般不宜过长。例如,在页面中使用JSTL标签库中的out标签示例代码如下2025/2/6《Web程序设计》26<%@pagecontentType=”text/html;charset=utf-8”%><%@taglibprefix="c"uri="/jsp/jstl/core"%><html><head><metacharset=”utf-8”><title>使用JSTL标签库示例</title></head><body><%java.util.DatecurDate=newjava.util.Date();%>当前系统时间:<c:outvalue=”{curDate}”></c:out></body>主要内容2025/2/6《Web程序设计》271JSP基础2指令标签3相对路径与绝对路径简介Web开发过程中,各种资源的定位和访问,都必须指明其相应的路径,才能准确地访问该资料。路径通常可分为两类:相对路径与绝对路径。相对路径,就是相对于当前文件的路径,当前文件所在的路径也通常称为基准路径,相对路径给出的是相对于这个基准路径的位置,与当前的位置密切相关。绝对路径,就是资源在网站或存储中的绝对路径,也即是访问资源时的确切位置,一般是指资源的完整路径或相对于网站根目录的路径,与当前的位置无关。2025/2/6《Web程序设计》28在使用路径时,通常会用到以下三种特殊路径符号。2025/2/6《Web程序设计》29符号含义示例./当前目录./home.jpg,访问当前目录下的home.jpg文件../上一级目录../index.jsp,访问上一级目录下的index.jsp文件/网站根目录/error.jsp,访问网站根目录下的error.jsp文件示例当前正在访问pro_list.jsp,如果需要在pro_list.jsp中引用js目录下的common.js文件,可以使用两种方式来访问:(1)相对路径,基准路径为pages目录(2)绝对路径,可以直接使用“/”从网站的根目录开始访问2025/2/6《Web程序设计》30<scripttype=”text/javascript”src=”../js/common.js”></script><scripttype=”text/javascript”src=”/myweb/js/common.js”></script>两种路径方式的优缺点如下:相对路径的优点是,不依赖于某个具体的位置,网页代码易维护、可重用性好;缺点是必须严格保证当前资源路径正确性,否则容易导致资源访问出错。绝对路径的优点是,使用简单,不依赖于当前资源路径,网页代码可阅读性好;缺点是可重用性与可维护性不好,网页路径发生变化时需同步更新。2025/2/6《Web程序设计》31静态资源路径问题静态资源路径主要是指访问Web项目中的静态资源资源,例如图片、Javascript、CSS、链接等资源时,对路径的解析方式。静态资源访问时,通常相对路径都是基于当前路径,而绝对路径则是相对于整个服务器的基础地址。2025/2/6《Web程序设计》32代码访问方式实际访问资源<ahref="http://localhost:8080/app2/index.html">链接1</a>绝对路径点击链接1将访问app2/index.html<ahref="/app3/pages/index.html">链接2</a>绝对路径点击链接2将访问app3/pages/index.html<ahref="index.html">链接3</a>相对路径点击链接3将访问app1/pages/index.html<formaction="http://localhost:8080/app2/index.html"><inputtype="submit"value="按钮1"/></form>绝对路径点击按钮1将访问app2/index.html<formaction="../../app2/index.html"><inputtype="submit"value="按钮2"/></form>相对路径点击按钮2将访问app2/index.html2025/2/6《Web程序设计》33动态网页资源路径动态资源路径主要指服务器中的资源路径,通常在JavaWeb开发中,服务器端的资源路径通常是Servlet中的资源路径。服务器端的资源路径可以是相对路径和绝对路径:相对路径:./与../均可使用,同样表示以当前位置为基准路径,访问当前目录下或上一级目录中的资源。绝对路径:与静态资源不同,动态资源不能使用主机名、IP、端口等绝对资源位置,只能使用“/”开始的路径,表示从当前应用的根目录开始。2025/2/6《Web程序设计》34例如,Servlet中转发请求时,2025/2/6《Web程序设计》35/*当前服务器端位置:http://localhost:8080/app/servlet/AServlet,其中app为应用名称*/publiclassAServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{if(isValid==true)request.getRequestDispatcher("/BServlet").forward(req,resp);//位置1elserequest.getRequestDispatcher(“../BServlet").forward(req,resp);//位置2}}其中,位置1使用了绝对路径,其访问资源的完整路径为:http://localhost:8080/app/BServlet;位置2使用了相对路径,其访问资源的完整路径为:http://localhost:8080/app/servlet/BServlet。2025/2/6《Web程序设计》36本章结束第6章JSP内置对象主讲人:2025/2/6372025/2/6《Web程序设计》381JSP对象2out对象3request对象4response对象5session对象6application对象7其他对象及综合示例本章课程目标知识目标掌握JSP内置对象基本属性及方法、使用方法;能力要求:能够理解并掌握Web程序设计中的基础知识与工作原理,将知识与原理应用于开发过程中的问题分析;具备复杂问题的分析与综合能力,能够综合运用所学知识,分析关键需求,设计适用于复杂问题的解决方案;2025/2/6《Web程序设计》396.1JSP内置对象JSP内置对象是Web容器创建的一组对象,开发人员在进行JSP页面编程时,不需要使用new关键字进行实例化,就可以使用的一组内置对象。由于这些对象是由容器在初始化时隐式创建的,因此,这些内置对象也称为JSP隐式对象。JSP中的内置对象有:out、request、response、session、application、config、pageContext、page、exception2025/2/6《Web程序设计》40特点这些内置对象具有以下特点:

由JSP容器提供实例化,程序开发人员无需实例化即可使用;

由JSP容器管理其生命周期,创建和销毁;

所有的JSP页面均可使用这些内置对象;

只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%>或<%使用内置对象%>)。2025/2/6《Web程序设计》41示例2025/2/6《Web程序设计》42//设置请求字符的编码格式request.setCharacterEncoding("utf-8");//获取login.jsp页面表单元素的值,参数名称和表单元素名称一致Stringsname=request.getParameter("sname");Stringpasswd=request.getParameter("passwd");if(sname!=null&&!sname.equals("")&&passwd!=null&&!passwd.equals("")){out.println("登陆成功!"+"<br>");out.println("账号:"+sname+"<br>");out.println("密码:"+passwd+"<br>");}else{out.println("登录失败!");}工作机制JSP页面在被客户端请求时,容器首先判断该JSP页面是否为第一次访问,如果是第一次,则初始化该JSP页面:即生成JSP页面的java文件,编译为class,然后执行这个class文件,产生响应后的HTML代码,返回给客户端。2025/2/6《Web程序设计》43publicfinalclassindex_jspextendsorg.apache.jasper.runtime.HttpJspBaseimplementsorg.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports{

publicvoid_jspInit(){}publicvoid_jspDestroy(){}publicvoid_jspService(){finaljavax.servlet.jsp.PageContextpageContext;javax.servlet.http.HttpSessionsession=null;finaljavax.servlet.ServletContextapplication;finaljavax.servlet.ServletConfigconfig;javax.servlet.jsp.JspWriterout=null;finaljava.lang.Objectpage=this;javax.servlet.jsp.JspWriter_jspx_out=null;try{

}}2025/2/6《Web程序设计》441JSP对象2out对象3request对象4response对象5session对象6application对象7其他对象及综合示例out简介out是javax.servlet.jsp.JspWriter类的实例化对象,主要功能就是完成页面的输出操作,将计算结果和从数据库中获取的数值输出到网页上,使用println()或print()方法输出,形成最终返回给客户端的HTML代码。2025/2/6《Web程序设计》45方法作用publicvoidprintln()向客户端打印字符串,带’\n’publicvoidprint()向客户端打印字符串publicvoidclear()清除缓存区的内容,如果在flush之后调用会抛出异常。publicvoidclearBuffer()清除缓存区的内容,如果在flush之后调用不会抛出异常publicvoidflush()将缓存区内容输出到客户端publicintgetBufferSize()返回缓存区的大小以字节数的大小,如不设缓存区则为0publicbooleanisAutoFlush()返回缓存区满时,是自动清空还是抛出异常publicvoidclose()关闭输出流out使用示例out对象在使用时通常使用out.println()或out.print()输出文本信息。直接输出时,可采用”<%=xxx%>”方式替代。2025/2/6《Web程序设计》46<div><%out.println(“helloworld”);%><!--采用out.println()输出--></div><!--等同于下面这种方式--><div><%=“helloworld”%><!--采用<%=%>输出--></div>杨辉三角形示例输出的主要思路如下:指定n行,循环n次,每次输出其中的一行;采用一个二维数组存储杨辉三角形的值;在处理每一行时,先输出每一行前面的空格(由于HTML会将连续的“”看成一个,所以此处使用

字符);计算每行中的杨辉三角数值,然后输出该数值;输出换行符(由于HTML不会输出”\n”,因此采用<br>进行换行)。完整的示例代码如下所示:2025/2/6《Web程序设计》472025/2/6《Web程序设计》48<%!intn=10;//以10为例int[][]a=newint[n][n];inti,j;%><%for(i=0;i<n;i++){//循环n次,输出n行//输出前导空格for(j=0;j<n-i;j++)out.print("    ");//计算输出数字for(j=0;j<i;j++){if(i==0||j==0||i==j){a[i][j]=1;}else{a[i][j]=a[i-1][j]+a[i-1][j-1];}out.print("<spanclass='cell'>"+a[i][j]+"</span>");//每个数字后面2个空格}out.println("<br>");//输出后面的换行标记,注意输出"\n"不能使网页上的文本换行}%>2025/2/6《Web程序设计》491JSP对象2out对象3request对象4response对象5session对象6application对象7其他对象及综合示例6.3request对象request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。请求中一般包含了请求所需的参数值或者信息。因此,可以通过request来获取客户端和服务端的信息,如传递参数名和参数值、IP地址、应用系统名,服务器主机名等。2025/2/6《Web程序设计》50request对象常用方法Cookie[]getCookies()返回客户端所有的Cookie的数组EnumerationgetAttributeNames()返回request对象的所有属性名称的集合EnumerationgetHeaderNames()返回所有HTTP头的名称集合EnumerationgetParameterNames()返回请求中所有参数的集合HttpSessiongetSession()返回request对应的session对象,如果没有,则创建一个ObjectgetAttribute(Stringname)返回名称为name的属性值,如果不存在则返回null。StringgetParameter(Stringname)返回此request中name指定的参数,若不存在则返回nullString[]getParameterValues(Stringname)返回指定名称的参数的所有值,若不存在则返回nullStringgetHeader(Stringname)返回name指定的信息头StringgetProtocol()返回此request所使用的协议名和版本StringgetContextPath()返回requestURI中指明的上下文路径StringgetRemoteAddr()返回客户端的IP地址StringgetRequestURI()返回request的URIintgetContentLength()返回request主体所包含的字节数,若未知的返回-12025/2/6《Web程序设计》51request对象的主要作用体现在两个方面。1)获取请求中的参数值,主要通过request.getParameter(paramName)和request.getParameterValues(paramName)按参数名称获取,前者为获取单个值,后者通常用于获取多个值,例如多选框checkbox选中的值。请求中的参数值通过是采用映射表的形式存储,即key-value对,key为参数名称,对应表单元素的name或请求url中的参数名称,value为该参数的值;2)获取请求中的请求头参数(Headers),主要通过request.getHeader(paramName),请求头是HTTP协议规定的必要内容,通常用于标识该请求的一些相应设置2025/2/6《Web程序设计》52requestheaders2025/2/6《Web程序设计》53request请求处理当客户端通过超链接的形式发送请求时,可以为该请求传递参数,通过在超链接的后面加上问号“?”来实现。如果要同时指定多个参数,各参数间使用与符号“&”分隔即可。2025/2/6《Web程序设计》54<ahref=”detail.jsp?id=3320183901&from_module=22”>查看商品</a><!--detail.jsp--><%Stringid=request.getParameter(“id”);Stringmodule=request.getParameter(“from_module”);%>get与post请求通过form表单方式传递参数时,有个非常重要的属性method。method有两个值,分别是get和post。get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全性较低但效率比post方式高。适合提交数据量不大,安全性不高的数据。如:搜索、查询等功能。post:将用户提交的信息封装在HTMLheader内。适合提交数据量大,安全性高的用户信息。比如:注册、修改、上传等功能。2025/2/6《Web程序设计》55中文参数值处理由于JSP页面默认使用iso-8859-1字符集,而中文字符集一般使用GBK或utf-8,因此容易出现中文乱码的情况。在JSP页面中处理中文乱码的情况需要注意以下几个方面(以utf-8字符集为例,GBK亦然):确认HTML编码字符集与JSP的contentType均为utf-8字符集JSP页面的保存文本字符集也要设置为utf-8字符集;在处理请求参数的页面,对获取到的中文参数值进行解码处理2025/2/6《Web程序设计》56request.setCharacterEncoding(“utf-8”);Stringname=request.getParameter(“item_name”);Stringname=newString(request.getParameter("item_name").getBytes("ISO-8859-1"),"utf-8")设置cookiecookie是用来存储小段的文本信息,在网络服务器上生成,并发送给浏览器的。通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。2025/2/6《Web程序设计》57//写入cookie对象Stringusername=request.getParameter(“username”);Cookiecookie=newCookie("username",username);//创建并实例化cookie对象cookie.setMaxAge(60*60*24*7);//设置cookie有效期为7天response.addCookie(cookie);//保存cookie对象//读取cookie值Cookie[]cookies=request.getCookies();//从request中获取cookie对象的集合Stringusername="";if(cookies!=null){//遍历cookie对象集合for(CookiecookieItem:cookies){if(cookieItem.getName().equals("username")){username=cookieItem.getValue();//读取cookie对象的的值}}}用户名:<inputtype=”text”name=”username”value=”<%=username%>”>request使用示例2025/2/6《Web程序设计》58注册页面(ex_req.jsp)提交查看页面(ex_req_save.jsp)2025/2/6《Web程序设计》59<formaction="ex_req_save.jsp"method="post"><div>用户:<inputtype="text"name="username"></div><div>密码:<inputtype="password"name="password"></div><div>确认:<inputtype="password"name="password2"></div><div>性别:<inputtype="radio"name="sex"value="1"checked="checked">男<inputtype="radio"name="sex"value="0">女</div><div>邮箱:<inputtype="text"name="email"></div><div>课程:<inputtype="checkbox"name="subject"value="0"/>计算机视觉<inputtype="checkbox"name="subject"value="1"/>人工智能<inputtype="checkbox"name="subject"value="2"/>自然语言处理<inputtype="checkbox"name="subject"value="3"/>数据可视化</div><div>简介:<textareaname="intro"cols="60"rows="8"></textarea></div><div><inputtype="submit"value="提交查看"></div><%!/*自定义函数,将字符串转码为中文*/publicstaticStringtoCN(Stringstr){if(str==null)returnstr;try{str=newString(str.getBytes("iso-8859-1"),"utf-8");}catch(UnsupportedEncodingExceptione){e.printStackTrace();}returnstr;}%><%//获取单个值使用getParameter方法

Stringusername=toCN(request.getParameter("username"));Stringpassword=request.getParameter("password");Stringpassword2=request.getParameter("password2");Stringsex=request.getParameter("sex");Stringintro=toCN(request.getParameter("intro"));//获取多个值使用getParameterValues方法,返回值是字符串数组

String[]subjects=request.getParameterValues("subject");if("0".equals(sex.trim())){sex="女";}else{sex="男";}

2025/2/6《Web程序设计》601JSP对象2out对象3request对象4response对象5session对象6application对象7其他对象及综合示例6.4response对象response对象用于响应客户请求,向客户端输出信息。response对象属于javax.servlet.http.HttpServletResponse接口的实例。它封装了JSP产生的响应,并发送到客户端以响应客户端的请求。请求的数据可以是各种数据类型,甚至是文件。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。response对象的主要作用是对客户端的请求进行回应,将Web服务器处理后的结果发回给客户端。2025/2/6《Web程序设计》61HTTP协议响应信息响应头描述Allow指定服务器支持的request方法(GET,POST等等)Cache-Control指定响应文档能够被安全缓存的情况。通常取值为public,private或no-cache等等。Public意味着文档可缓存,Private意味着文档只为单用户服务并且只能使用私有缓存。No-cache意味着文档不被缓存。Connection命令浏览器是否要使用持久的HTTP连接。close值

命令浏览器不使用持久HTTP连接,而keep-alive意味着使用持久化连接。Content-Disposition让浏览器要求用户将响应以给定的名称存储在磁盘中Content-Encoding指定传输时页面的编码规则Content-Language表述文档所使用的语言,比如en,en-us,,ru等等Content-Length表明响应的字节数。只有在浏览器使用持久化(keep-alive)HTTP连接时才有用Content-Type表明文档使用的MIME类型Expires指明啥时候过期并从缓存中移除Last-Modified指明文档最后修改时间。客户端可以缓存文档并且在后续的请求中提供一个If-Modified-Since请求头Location在300秒内,包含所有的有一个状态码的响应地址,浏览器会自动重连然后检索新文档Refresh指明浏览器每隔多久请求更新一次页面。Retry-After与503(ServiceUnavailable)一起使用来告诉用户多久后请求将会得到响应Set-Cookie指明当前页面对应的cookie2025/2/6《Web程序设计》62响应示例2025/2/6《Web程序设计》63response对象的主要方法方法描述StringencodeURL(Stringurl)将URL编码,回传包含SessionID的URLvoidaddCookie(Cookiecookie)添加指定的cookie至响应中voidaddHeader(Stringname,Stringvalue)添加指定名称的响应头和值voidreset()清除任何缓存中的任何数据,包括状态码和各种响应头voidsendError(intsc,Stringmsg)使用指定的状态码和消息向客户端发送一个出错响应voidsendRedirect(Stringlocation)使用指定的URL向客户端发送一个临时的间接响应voidsetCharacterEncoding(Stringcharset)指定响应的编码集(MIME字符集),例如UTF-8voidsetContentType(Stringtype)设置响应的内容的类型,如果响应还未被提交的话voidsetHeader(Stringname,Stringvalue)使用指定名称和值设置响应头的名称和内容2025/2/6《Web程序设计》64重定向网页使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。用户可以从浏览器的地址栏中看到跳转后的地址。进行重定向操作后,request中的属性全部失效,并且重新创建一个新的request对象。2025/2/6《Web程序设计》65sendRedirect()方法的语法格式如下:2025/2/6《Web程序设计》66response.sendRedirect(Stringpath);参数说明:path:用于指定目标路径,可以是相对路径,也可以是不同主机的其他URL地址。<%response.sendRedirect(“login.jsp");//重定向到登录页面%>通过response对象可以设置HTTP响应报头。1)禁用缓存2)设置页面自动刷新3)设置定时跳转网页2025/2/6《Web程序设计》67<%response.setHeader("Cache-Control","no-store");//设置没有缓存response.setDateHeader("Expires",0);//设置缓存过期日期为0%><%response.setHeader("refresh","10");//单位为秒%><%response.setHeader("refresh","5;URL=login.jsp");//单位为秒%>response使用示例2025/2/6《Web程序设计》68<body><%Stringmsg=null,url=null;//获取输入的登录信息

Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");if(username==null||"".equals(username)){msg="用户名不能为空";url="login.jsp";}elseif(password==null||"".equals(password)||password.length()<6){msg="密码不能为空或长度过短";url="login.jsp";}else{msg="登录成功,即将跳转至系统首页!";url="index.jsp";}out.println(msg);//显示提示信息,设置5秒后自动跳转

response.setHeader("refresh","5;URL="+url);%></body>check.jsplogin.jspindex.jsp失败成功2025/2/6《Web程序设计》691JSP对象2out对象3request对象4response对象5session对象6application对象7其他对象及综合示例session简介session表示客户端与服务器的一次会话,是javax.servlet.http.HttpSession接口的实例化对象。Web中的session指定是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,与用户相关的所有信息都被保存在session中,因此,JSP中使用session对象存储与用户一次会话相关的所有信息。HTTP协议是一种无状态的协议(即不保存连接状态的协议),每次用户请求在接收到服务器的响应后,连接就关闭了。为了弥补这一缺点,HTTP协议提供了session。2025/2/6《Web程序设计》70Session对象的常用方法方法描述publicObjectgetAttribute(Stringname)返回session对象中与指定名称绑定的对象,如果不存在则返回nullpublicEnumerationgetAttributeNames()返回session对象中所有的对象名称publicStringgetId()返回session对象的IDpublicvoidinvalidate()将session无效化,解绑任何与该session绑定的对象publicbooleanisNew()返回是否为一个新的客户端,或者客户端是否拒绝加入sessionpubliclonggetLastAccessedTime()返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起publicvoidremoveAttribute(Stringname)移除session中指定名称的对象publicvoidsetAttribute(Stringname,Objectvalue)使用指定的名称和值来产生一个对象并绑定到session中publicvoidsetMaxInactiveInterval(intinterval)用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效2025/2/6《Web程序设计》71session生命周期管理session的生命周期分为三个阶段:创建、活动、销毁。(1)创建当客户端第一次访问某个JSP页面时,服务器会为当前会话创建一个sessionID,每次客户端向服务端发送请求时,都会将此sessionID一并发送过去,服务端会进行校验。(2)活动当session创建后,客户端再访问其它页面都属于同一次会话。只要当前会话页面没有全部关闭,重新打开的新的浏览器窗口访问同一项目资源时,也属于同一次会话。除非本次会话的所有页面都关闭后再重新访问系统某个页,将会创建新的会话。(3)销毁session的销毁只有三种方式:明确调用session.invalidate()方法、session过期(超时)、服务器重新启动。这三种方式会使当前的会话清除。2025/2/6《Web程序设计》72Tomcat的默认session超时时间为30分钟,可以通过session.setMaxInactiveInterval(time)方法设置某个session的超时时间。还可以通过web.xml中配置参数“session-timeout”,这种方法是设置所有的session超时时间。2025/2/6《Web程序设计》73<!--web.xml--><session-config>//单位是分钟

<session-timeout>10</session-timeout></session-config>session使用示例2025/2/6《Web程序设计》74<%//获取会话信息Stringusername=(String)session.getAttribute("username");DatelastAccessTime=newDate(session.getLastAccessedTime());DatecurTime=newDate();longminuteDiff=(curTime.getTime()-lastAccessTime.getTime())/(1000*60);//如果用户名不为空,则会话还在,且与上次访问时间相差不超过30分钟,则正常

if(username!=null&&minuteDiff<30){

}else{//认为会话已超期,跳转到登录页面

session.removeAttribute(“username”);session.invalidate();response.sendRedirect("/login.jsp");}%>session.setAttribute(“username”,username);//将用户名写入到会话中注销用户的登录状态,清空会话信息2025/2/6《Web程序设计》75<!--注销页面--><%//清空session中的信息Enumerationelem=session.getAttributeNames();while(elem.hasMoreElements()){Stringname=(String)elem.nextElement();session.removeAttribute(name);}session.invalidate();//跳转至登录页面response.sendRedirect(“/login.jsp”);%>2025/2/6《Web程序设计》761JSP对象2out对象3request对象4response对象5session对象6application对象7其他对象及综合示例6.6application对象application对象用于保存所有应用中的共有数据。它在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁时,所有用户都可以共享该application对象。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”。application对象是javax.servlet.ServletContext接口的实例化对象。向application中添加的数据,该web应用的所有JSP文件都能访问,在任何地方对application对象中的数据操作,都将影响到其他用户对此的访问。2025/2/6《Web程序设计》77application对象常用方法方法描述publicvoidsetAttribute(Stringname,Objectvalue);使用指定名称将对象绑定到此对话publicObjectgetAttribute(Stringname);返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回nullEnumerationgetAttributeName();返回所有可用属性名的枚举StringsetServerInfo();返回JSP(Servlet)引擎名及版本号StringgetRealPath(Stringpath);得到虚拟路径对应的绝对路径publicStringgetContextPath();取得当前的虚拟路径名称2025/2/6《Web程序设计》78应用内共享数据通过setAttribute()方法向application中添加数据,通过getAttribute方法从application中获取已添加的数据。2025/2/6《Web程序设计》79<%

//添加数据List<String>msgList=bo.getMessageList();application.setAttribute(“messageList”,msgList);

%><%//从application中获取数据List<String>messageList=(List<String>)application.getAttribute(“messageList”);if(messageList!=null){//要判断是否为空,因为可能还未添加}%>访问应用程序初始化参数application对象提供了对应用程序初始化参数进行访问的方法。应用程序初始化参数在web.xml文件中通过<context-param>标记配置应用程序初始化参数,web.xml位于Web应用WEB-INF子目录中。2025/2/6《Web程序设计》80<!--web.xml--><context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost/book_db</param-value></context-param><context-param><param-name>username</param-name><param-value>user</param-value></context-param>//通过参数名称获取单个参数Stringurl=application.getInitParameter("url");Stringusername=application.getInitParameter(“username”);//还可以通过参数枚举方法进行遍历Enumeration<String>elems=application.getInitParameterNames();//获取全部初始化参数while(elems.hasMoreElements()){Stringname=elems.nextElement();//获取参数名Stringvalue=application.getInitParameter(name);//获取参数值}application使用示例2025/2/6《Web程序设计》81<%@pagelanguage="java"contentType="text/html;charset=UTF-8"%><html><head><title>application对象使用示例</title></head><body><%Integercounter=(Integer)application.getAttribute("c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论