1 / 27

JSP 内置对象

JSP 内置对象. 1. 返回. 3.1 request. request 对象的类型是一个执行 javax.servlet.http.HttpServletRequest 界面的类。当客户端请求一个 JSP 网页时,客户端的请求信息将被 JSP 引擎封装在这个 request 对象中。那么该对象调用相应的方法可以获取用户提交的信息。下面我们介绍一下 request 对象中的常用方法。 getCookies() :返回客户端的 cookie 对象,结果是一个 cookie 数组。

Télécharger la présentation

JSP 内置对象

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JSP内置对象 1 返回

  2. 3.1 request request对象的类型是一个执行javax.servlet.http.HttpServletRequest界面的类。当客户端请求一个JSP网页时,客户端的请求信息将被JSP引擎封装在这个request对象中。那么该对象调用相应的方法可以获取用户提交的信息。下面我们介绍一下request对象中的常用方法。 getCookies():返回客户端的cookie对象,结果是一个cookie数组。 getHeader(String name):获得http协议定义的传送文件头信息,如:request.getHeader("User-agent")返回客户端浏览器的版本号、类型等信息。 getAttribute(String name):返回name指定的属性值,若不存在指定的属性,就返回空值(null)。 getattributeNames():返回request对象所有属性的名字,结果集是一个Enumeration(枚举)类的实例。 2

  3. lgetHeaderNames():返回所有请求标头(request header)的名字,结果集是一个Enumeration(枚举)类的实例。 getHeaders(String name):返回指定名字的请求标头(request header)的所有值,结果集是一个Enumeration(枚举)类的实例。 getMethod():获得客户端向服务器端传送数据的方法(如GET、POST和PUT等类型)。 getParameter(String name):获得客户端传送给服务器端的参数值,该参数由name指定。 get parameterNames():获得客户端传送给服务器端的所有的参数名,结果集是一个Enumeration(枚举)类的实例。 getParameterValues(String name):获得参数name所包含的值(一个或多个)。 getQueryString()获得由客户端以GET方式向服务器端传送的字符串。 getRequestURI():获得发出请求字符串的客户端地址。 getServletPath():获得客户端所请求的脚本文件的文件路径。 setAttribute(String strname,Java.lang.Object obj):设定名字为strname的request参数值,该值由Object类型的obj指定。 3

  4. getServerName():获得服务器的名字。 • getServerPort():获得服务器的端口号。 • getRemoteAddr():获得客户端的IP地址。 • getRemoteHost():获得客户端电脑的名字,若失败,则返回客户端电脑的IP地址。 • getProtocol():获取客户端向服务器端传送数据所使用的协议名称(如http/1.1) • 通常用户向JSP页面提交信息是借助于表单来实现的。表单中包含文本框、列表、按钮等输入标记。当用户在表单中输入完信息后,按Submit按钮这些信息将被提交。客户端可以使用post以及get两种方法实现提交。它们的区别是get方法提交的信息会显示在IE浏览器的地址栏中,而post方法不会显示。提交后的信息就被封装在request对象中。通常request对象调用getParameter()方法获取用户提交的信息。下面我们给出利用request对象获取客户提交页面信息的例程,其源程序如下。 4

  5. <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <html> <head> <title>ex5-1.jsp</title> </head> <body><h1><center> <form method="POST" action="do51.jsp" name="fm"> <br> <br> 请输入您的尊姓大名:<input type="text" name="user" size="20"> </h1><br> <br> <input type="submit" value="我要提交" name="sm"> </center> </form> </body> </html> 该程序通过表单向do51.jsp提交信息。do51.jsp通过request对象获取用户提交页面的信息。do51.jsp的源程序如下。 5

  6. <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <html> <head><title>do51.jsp</title></head> <body><h4><center> <% out.println("客户协议: " + request.getProtocol()); out.println("<br>"); out.println("服务器名: " + request.getServerName());out.println("<br>"); out.println("服务器端口号: " + request.getServerPort()); out.println("<br>"); out.println("客户端IP地址:" + request.getRemoteAddr()); out.println("<br>"); out.println("客户机名: " + request.getRemoteHost()); out.println("<br>"); out.println("客户提交信息长度: " + request.getContentLength());out.println("<br>"); out.println("客户提交信息类型: "+ request.getContentType());out.println("<br>"); out.println("客户提交信息方式: " + request.getMethod()); out.println("<br>"); out.println("Path Info: " + request.getPathInfo());out.println("<br>"); out.println("Query String: " + request.getQueryString());out.println("<br>"); out.println("客户提交信息页面位置: " + request.getServletPath()); out.println("<br>"); out.println("HTTP头文件中accept-encoding的值: " + request.getHeader("Accept-Encoding")); out.println("<br>"); out.println("HTTP头文件中User-Agent的值 : " + request.getHeader("User-Agent")); out.println("<br>"); %> </h4><h2>您的名字是:</h2> <h1><% String username=request.getParameter("user"); %> <%=username%></h1></body> </html> 6

  7. 程序运行效果如下图所示 在文本框中输入名字“孙悟空”后,按“我要提交”按钮,效果如下图所示 7

  8. 如果do51.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF- 8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。 解决办法:通过request.seCharacterEncoding ("gb2312")对请求进行统一编码,就实现了中文的正常显示。 8

  9. 3.2 response response对象的类型为javax.servlet.http.HttpServletResponse类。当用户向服务器端提交了HTTP请求后,服务器将会根据用户的请求建立一个默认的response对象,然后传入-jspService()函数中,给客户端提供响应的信息。下面介绍response对象中所包含的方法。 setContentType(String s):该方法可以改变contentType的属性值。当用户访问一个contentType属性值是“text/html”的jsp页面时,jsp引擎将按照ContentType属性的值来响应客户的请求信息。Response对象可以调用该方法来设置contentType的值,其中参数s可取“text/html”、“application/x-msexcel”和 “application/msword”等。 lsendRedirect(URL):该方法将实现客户的重定向。即在处理客户请求的过程中,可能会根据不同事件的将客户重新引导至另一个页面。其中参数URL的值为重定向页面所在的相对路径。 laddCookie(Cookie cookie):该方法将实现添加1个Cookie对象。Cookie可以保存客户端的用户信息。通过request对象调用getcookies()方法可获得这个Cookie。 laddHeader(String name,String value):该方法将实现添加http文件头。该header将会传到客户端,若同名的header存在,原来的header会被覆盖。其中参数name指定http头的名字,参数value指定http头的值。 lcontainsHeader(String name):该方法判断参数name所指名字的HTTP文件头是否存在,如果存在返回true,否则为false。 9

  10. lsendError(int ernum):该方法实现向客户端发送错误信息。其中参数ernum表示错误代码。比如当ernum为404时,表示网页找不到错误。 setHeader(String name,String value):该方法将根据HTTP文件头的名字来设定它的值。如果HTTP头原来有值,则它将会被新值覆盖。其中参数name表示http头的名字,参数value指定http头的值。 下面我们给出利用response对象实现自动刷新客户页面的例程,源程序如下 <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <HTML> <HEAD><TITLE>ex4-3.jsp</TITLE></HEAD> <BODY><br> <h3>本例将给大家演示该页面每隔1秒钟的自动刷新过程</h3> <br><h1>现在的时间是: <% response.setHeader("refresh","1"); out.println(new Date().toLocaleString()); %></h1> </BODY> </HTML> 10

  11. 程序运行效果如下图所示 11

  12. 3.3 session Session对象在第一个jsp页面被装载时自动创建,完成会话期管理。当用户第一次登陆网站时,服务器端的JSP引擎将为该用户生成一个独一无二的Session对象。用以记录该用户的个人信息,一旦该用户退出网站,那么属于他的Session对象将会注销。Session对象可以绑定若干个人信息或者Java对象。如果不同Session对象内部定义了相同的变量名,那么这些同名变量是不会相互干扰的。需要说明的是,session对象中所保存和检索的信息不能是基本数据类型,必须是Java语言中相应的Object对象。下面我们给大家介绍session对象中所包含的方法。 lsetAttribute(String key, Object obj):该方法实现将参数obj所指定的对象添加到session对象中,并为添加的对象指定一个索引关键字。索引关键字的指由参数key确定。 lgetAttribute(String name):该方法实现从session对象中提取由参数name指定的对象。若该对象不存在,将返回null。 lgetattributeNames(): 该方法返回session对象中存储的第一个对象,结果集是一个Enumeration类的对象。我们可以使用nextElements()来遍历session中的全部对象。 getCreationTime():该方法将返回创建session对象的时间,以毫秒为单位从1970年1月1日起计数。 12

  13. lgetId():每生成一个session对象,服务器都会给其分配一个独一无二的编号,该方法将返回当前session对象的编号。lgetId():每生成一个session对象,服务器都会给其分配一个独一无二的编号,该方法将返回当前session对象的编号。 lgetLastAccessedTime():该方法将实现返回当前session对象最后1次被操作的时间,即1970年1月1日起至今的毫秒数。 lgetMaxInactiveInterval():该方法将获得session对象的生存时间,单位为秒。 lremoveAttribute(String name):该方法将实现从session中删除由参数name所指定的对象。 lisNew(): 该方法判断是否是一个新的用户。如果是返回true,否则为false。 为了说明session对象的具体应用,下面我们用三个页面模拟一个多页面的Web应用。用户访问ex5-4.jsp时所输入的姓名在do54.jsp中被保存在session对象中,它对其后继的页面newdo54.jsp一样有效。它们的源程序如下。 <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <html><head><title>ex5-4.jsp</title></head> <body> <form method="POST" action="do54.jsp" name="fm"> <center><br><h1> 请输入您的尊姓大名:<input type="text" name="user" size="20"> <input type="submit" value="提交"> <input type="reset" value="重填"> </center></form></body> </html> ex5-4.jsp的源程序 13

  14. do54.jsp的源程序 <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <html><head><title>do54.jsp</title></head> <body><center><h1><br> <%! String username="";%> <% username=request.getParameter("user"); session.putValue("name",username); %> 很高兴认识<%=username%>! <br> <form method="POST" action="newdo54.jsp" name="fom"> 请输入您最欣赏的歌星的名字:<input type="text" name="singer" size="20"> <input type="submit" value="提交"> <input type="reset" value="重填"></center></h1> </form> </body> </html> 14

  15. newdo54.jsp的源程序 <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <html> <head><title>newdo54.jsp</title></head> <body><center><h1><br> <%! String singername="";%> <% String name; singername=request.getParameter("singer"); name=(String)session.getValue("name"); %> <%=name%>最欣赏的歌星是<%=singername%> </center></h1> </form> </body> </html> 15

  16. 运行效果如下图所示 输入姓名“孙梨花”,按“提交”按钮屏幕效果如下图所示 输入歌星名“张学友”,按“提交”按钮屏幕效果如图所示 16

  17. JSP表单处理 17 返回

  18. 4.1 表单 下面我们给出表单实例ex7-1.html,介绍一些常用标记的应用技巧。 <%@ page contentType="text/html;charset=gb2312"%> <html><head><title>表单</title></head> <body><form method="POST" action=""> <p align="center">用户注册 <p align="center"> 您的尊姓大名:<input type="text" name="User" size="20">&nbsp;&nbsp;&nbsp;&nbsp; 您的密码:<input type="password" name="pwd" size="20"><br> <br> <p>你最喜欢的运动: <input type="checkbox" name="sports" value=football> 足球 <input type="checkbox" name="sports" value=bastketball> 排球 &nbsp;&nbsp;&nbsp;&nbsp; 您的性别: <input type="radio" name="sexy" value=male> 男 <input type="radio" name="sexy" value=female> 女<br><br> <p>请填写您的计算机配置:</p> 18

  19. <textarea NAME=“Computer” ROWS=6 COLS=64> CPU PIV 2700 Memory 256M DDR </textarea><br><br> <p>您的计算机操作系统图标 <input type="image" name="os" src="c:\image\mycomputer.jpg"> &nbsp;&nbsp;&nbsp;&nbsp; 您的家庭所在地: <select name="area" style="width"50" size="1"> <option value="北京" selected > 福州</option> <option value="天津" > 厦门</option> <option value="上海" > 泉州</option> <option value="重庆" > 三明</option> </select> <br> <br> <input type="submit" value=" 我要提交"> <input type="reset" value="全部重填"></p> </form> </body> </html> 程序运行效果如下图所示 19

  20. 20

  21. 4.2 表单在客户端确认的实例 以下程序将在客户端实现对表单的确认,防止用户输入的密码为空 。 <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <html> <head><title>表单</title></head> <SCRIPT language="JavaScript" src="JSPconfirm.js"> </SCRIPT> <SCRIPT language=JavaScript > function formcheck(Fm) { var flag=true; if(isEmpty(Fm.pwd.value)) { alert("您没有输入密码,请重新输入!"); Fm.pwd.focus(); flag=false; } return flag; } </SCRIPT> <body> <Form method="POST" name=Fm Onsubmit="return formcheck(this) "> <p align="center">密码:<input type="password" name="pwd" size="20"><br> </p> <p align="center"><input type="submit" name="Submit" value="我要提交"><br> </p> </form> </body> </html> 21

  22. 程序运行下效果如下图所示 22

  23. 4.3 从表单中提取参数 我们通过一个实例来讲述JSP是如何提取客户端表单中的数据。首先我们建立一个HTML表单如下所示: <html><head><title>用户注册网页</title></head> <body> <form method="POST" action="formget.jsp "> <p align="center">用户注册</p> <p align="center"> 您的尊姓大名:<input type="text" name="user" size="20"><br> <br> 您的密码:<input type="password" name="pwd" size="20"><br> <br> 您的性别:<input type="radio" name="sex" value="男"> 男 <input type="radio" name="sex" value="女"> 女<br><br> 您最喜欢的颜色:<br> <input type="radio" name="likecolor" value="红色"> 红色<br> <input type="radio" name="likecolor" value="黄色">黄色<br> <input type="radio" name="likecolor" value="蓝色"> 蓝色<br> <input type="radio" name="likecolor" value="白色"> 白色<br> <input type="radio" name="likecolor" value="黑色"> 黑色<br><br> <input type="submit" value=" 我要提交"> <input type="reset" value="全部重填"></form> </body> </html> 23

  24. 网页的效果如下图所示 24

  25. 下面编写服务器端的表单信息提取程序formget.jsp,其源代码如下下面编写服务器端的表单信息提取程序formget.jsp,其源代码如下 <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <html><head><title>用户注册网页信息提取</title></head> <body> <% String username=request.getParameter("user"); String pwdinfo=request.getParameter("pwd"); String sexinfo=request.getParameter("sex"); String colorinfo=request.getParameter("likecolor"); out.println("<br>"); out.println("您的姓名:"); out.println(username); out.println("<br>"); out.println("<br>"); out.println("您的密码:"); out.println(pwdinfo); out.println("<br>"); if(sexinfo==null) out.println("很抱歉,您没有选择性别!"); else { out.println("<br>"); out.println("您的性别:"); out.println(sexinfo); out.println("<br>"); } 25

  26. if(colorinfo==null) out.println("很抱歉,您没有选择您喜欢的颜色!"); else { out.println("<br>"); out.println("您喜欢的颜色:"); out.println(colorinfo); } %> </body> </html> 当我们输入完整的个人信息时,结果显示如图A所示,当我们输入信息不完整时(例如没有输入喜欢的颜色或者没有选择性别),结果显示如图B所示 26

  27. 图A 图B 27

More Related