270 likes | 421 Views
JSP 内置对象. 1. 返回. 3.1 request. request 对象的类型是一个执行 javax.servlet.http.HttpServletRequest 界面的类。当客户端请求一个 JSP 网页时,客户端的请求信息将被 JSP 引擎封装在这个 request 对象中。那么该对象调用相应的方法可以获取用户提交的信息。下面我们介绍一下 request 对象中的常用方法。 getCookies() :返回客户端的 cookie 对象,结果是一个 cookie 数组。
E N D
JSP内置对象 1 返回
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
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
getServerName():获得服务器的名字。 • getServerPort():获得服务器的端口号。 • getRemoteAddr():获得客户端的IP地址。 • getRemoteHost():获得客户端电脑的名字,若失败,则返回客户端电脑的IP地址。 • getProtocol():获取客户端向服务器端传送数据所使用的协议名称(如http/1.1) • 通常用户向JSP页面提交信息是借助于表单来实现的。表单中包含文本框、列表、按钮等输入标记。当用户在表单中输入完信息后,按Submit按钮这些信息将被提交。客户端可以使用post以及get两种方法实现提交。它们的区别是get方法提交的信息会显示在IE浏览器的地址栏中,而post方法不会显示。提交后的信息就被封装在request对象中。通常request对象调用getParameter()方法获取用户提交的信息。下面我们给出利用request对象获取客户提交页面信息的例程,其源程序如下。 4
<%@ 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
<%@ 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
如果do51.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF- 8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。 解决办法:通过request.seCharacterEncoding ("gb2312")对请求进行统一编码,就实现了中文的正常显示。 8
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
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
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
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
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
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
JSP表单处理 17 返回
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"> 您的密码:<input type="password" name="pwd" size="20"><br> <br> <p>你最喜欢的运动: <input type="checkbox" name="sports" value=football> 足球 <input type="checkbox" name="sports" value=bastketball> 排球 您的性别: <input type="radio" name="sexy" value=male> 男 <input type="radio" name="sexy" value=female> 女<br><br> <p>请填写您的计算机配置:</p> 18
<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"> 您的家庭所在地: <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
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
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
下面编写服务器端的表单信息提取程序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
if(colorinfo==null) out.println("很抱歉,您没有选择您喜欢的颜色!"); else { out.println("<br>"); out.println("您喜欢的颜色:"); out.println(colorinfo); } %> </body> </html> 当我们输入完整的个人信息时,结果显示如图A所示,当我们输入信息不完整时(例如没有输入喜欢的颜色或者没有选择性别),结果显示如图B所示 26
图A 图B 27