04.第二章 JSP内置对象request、response【作业】
- 格式:doc
- 大小:211.50 KB
- 文档页数:3
实验2 JSP内置对象的使用1.相关知识点(1)request对象:是实现了HttpServletRequest接口的类的对象。
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。
request对象提供的下面两个方法可以用于请求中参数数据的获取:●String getParameter(String name):返回name指定参数的参数值●String[] getParameterValues(String name):返回包含参数name的所有值的数组可以通过request对象对Cookie进行操作,用于保存客户的相关信息:(2)response对象:是实现了HttpServletResponse接口的类的对象。
封装了对客户端的响应信息●void addCookie(Cookie cookie):将指定的Cookie添加到响应中●void sendRedirect(String location) :重定向到指定的URL2.实验目的本实验的目的是让学生掌握如何通过request对象获取请求参数数据,以及数据获取过程中的中文乱码的解决方法。
掌握如何通过request对象使用Cookie保存和获取客户信息。
3.实验要求1)在实验1的基础上,完成如下登录窗体页面loginForm.jsp的设计,该页面负责显示如图1所示登录窗口内容,并检查是否存在保存用户名和密码的Cookie,如果有则将其内容读取出来,并填入文本框和密码框,如图2所示。
图1未成功登录过的登录窗口图2成功登录过后,再次运行登录页面时的状态2)登录处理页面login_deal.jsp,负责获取用户输入的登录信息,如果用户名为zhangsan,密码为123456,则认为登录成功,使用Cookie保存用户名和密码,并在页面上显示用户名和密码信息(图3);如果登录不成功,则跳转到登录窗口页面。
图3登录成功后的页面4. 实验作业的提交要求1)将实验程序的运行截图放到word文档中。
jsp九种内置对象:request, reponse, out, session, application, config, pagecontext, page, exception.一.request对象:该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交信息。
1.Request对象可以使用getParameter(string s)方法获取该表单通过text提交的信息。
如:Request.getParameter(“boy”)例:request1.jsp:<%@ page contentType="text/Html;charset=GB2312" %><HTML><BODY bgcolor=green><FONT size=1><FORM action="tree.jsp" method=post name=form><INPUT type="text" name="boy"><INPUT TYPE="submit" value="Enter" name="submit"></FORM></FONT></BODY></HTML>tree.jsp:<%@ page contentType="text/html;charset=GB2312" %><HTML><BODY bgcolor=green><FONT size=1><P>获取文本框提交的信息:<%String textContent=request.getParameter("boy");%><BR><%=textContent%><P> 获取按钮的名字:<%String buttonName=request.getParameter("submit");%><BR><%=buttonName%></FONT></BODY></HTML>注意:使用request对象获取信息要格外小心,要避免使用空对象,否则会出现NullPointerException异常,所以我们可以作以下处理.:request3.jsp<%@ page contentType="text/html;charset=GB2312" %><HTML><BODY bgcolor=cyan><FONT size=5><FORM action="" method=post name=form><INPUT type="text" name="girl"><INPUT TYPE="submit" value="Enter" name="submit"></FORM><%String textContent=request.getParameter("girl");double number=0,r=0;if(textContent==null){textContent="";}try{ number=Double.parseDouble(textContent);if(number>=0){r=Math.sqrt(number) ;out.print("<BR>"+String.valueOf(number)+"的平方根:");out.print("<BR>"+String.valueOf(r));}else{out.print("<BR>"+"请输入一个正数");}}catch(NumberFormatException e){out.print("<BR>"+"请输入数字字符");}%></FONT></BODY></HTML>2.处理汉字信息:当request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。
JSP内置对象JSP提供了9大内置对象,为JSP页面的操作提供了丰富的功能,这9个内置对象分别应用到请求、响应、会话、应用、输出、配置信息和异常信息等内容的操作。
下面将介绍各内置对象的使用场合。
request对象:该对象封装了客户端提交的HTTP请求信息,适用于处理客户端提交的信息。
在开发Web应用时,经常应用request对象获取请求参数的值、Cooike等数据。
response对象:该对象适用于响应客户端请求信息。
在开发Web应用时,经常应用response 对象重定向网页,设置HTTP响应报头和缓冲区配置等。
session对象:该对象适用于在同一个应用程序中,每个客户端的各个页面中共享数据。
session对象通常应用在保存用户信息和购物车信息等。
application对象:该对象适用于在同一个应用程序中,各个用户间共享数据。
application对象通常应用在计数器或是聊天室中。
out对象:该对象适用于向客户端输出各种类型的数据。
通常用来向JSP页面输出文本。
page对象:该对象适用于操作JSP页面自身。
应用很少。
config对象:该对象用于读取服务器的配置信息。
exception对象:该对象用于操作JSP文件执行时发生的异常信息。
pageContext对象:该对象适用于get、set页面属性,然后通过jstl标签库向JSP页面输出页面内容。
out输出对象的应用:[html]view plain copy1.out.print("message");//输出页面内容2.out.clear();//清除缓冲区中的内容3.out.clearBuffer();//清除当前缓冲区的内容4.out.isAutoFlush();//检测当前缓冲区已满时自动清空,还是抛出异常5.out.getBufferSize();//获取缓冲区的大小request请求对象的应用:[html]view plain copy1.request.getParameter("param");//获取请求页面传递过来的参数2.String userName = new String(request.getParameter("userName").getBytes("ISO-8859-1"),"UTF-8");//适用于当访问请求URL链接中参数为中文时,通过request对象获取到的中文参数值为乱码时可用3.request.setCharacterEncoding("UTF-8");//当获取表单提交的信息时,通过request对象获取到的中文参数值为乱码时适用4.request.getHeader("host");//返回服务器IP地址和端口号127.0.0.1:80805.request.getHeader("user-agent");//返回客户端浏览器代理,用来判断是否是MSIE类型,设置兼容浏览器样式。
jsp试题及答案一、单项选择题(每题2分,共20分)1. 在JSP中,以下哪个不是内置对象?A. requestB. responseC. outD. session答案:D2. JSP页面中,以下哪个指令用于指定JSP页面使用的脚本语言?A. <%@ page language="java" %>B. <%@ page language="jsp" %>C. <%@ page language="javascript" %>D. <%@ page language="html" %>答案:A3. 在JSP中,使用EL表达式获取request作用域中的属性时,正确的语法是:A. ${requestScope.attributeName}B. ${request.attributeName}C. ${sessionScope.attributeName}D. ${applicationScope.attributeName}答案:B4. JSP页面中,以下哪个标签用于包含静态包含?A. <jsp:include page="included.jsp" />B. <jsp:forward page="forwarded.jsp" />C. <jsp:include page="included.jsp" flush="true" />D. <jsp:forward page="forwarded.jsp" flush="false" />答案:A5. 在JSP中,以下哪个标签用于创建一个名为"user"的会话范围属性?A. <jsp:attribute name="user" value="John Doe" />B. <jsp:attribute name="user" value="John Doe" session="true" />C. <jsp:session name="user" value="John Doe" />D. <jsp:session name="user" value="John Doe" session="true" /> 答案:B6. 在JSP中,以下哪个表达式用于获取当前时间?A. ${now()}B. ${currentTime}C. ${new java.util.Date()}D. ${java.util.Date.now()}答案:C7. JSP页面中,以下哪个指令用于设置页面的默认字符编码?A. <%@ page charset="UTF-8" %>B. <%@ page contentType="text/html; charset=UTF-8" %>C. <%@ page encoding="UTF-8" %>D. <%@ page pageEncoding="UTF-8" %>答案:B8. 在JSP中,以下哪个标签用于声明一个JavaBean属性?A. <jsp:useBean id="bean" class="com.example.Bean" />B. <jsp:setProperty name="bean" property="property"value="value" />C. <jsp:getProperty name="bean" property="property" />D. <jsp:declareBean id="bean" class="com.example.Bean" /> 答案:A9. JSP页面中,以下哪个指令用于设置页面的自动刷新时间?A. <%@ page refresh="5" %>B. <%@ page autoRefresh="5" %>C. <%@ page sessionTimeout="5" %>D. <%@ page cache="5" %>答案:A10. 在JSP中,以下哪个指令用于指定页面的访问权限?A. <%@ page access="private" %>B. <%@ page access="public" %>C. <%@ page access="protected" %>D. <%@ page access="public" import="java.util.*" %>答案:B二、多项选择题(每题3分,共15分)1. 在JSP中,以下哪些标签用于实现页面跳转?A. <jsp:forward>C. <jsp:redirect>D. <jsp:action>答案:A, C2. JSP页面中,以下哪些指令用于设置页面的属性?A. <%@ page %>B. <%@ include %>C. <%@ taglib %>D. <%@ session %>答案:A, C3. 在JSP中,以下哪些表达式用于获取session范围的属性?A. ${sessionScope.attributeName}B. ${session.attributeName}C. ${requestScope.attributeName}D. ${applicationScope.attributeName}答案:A, B4. JSP页面中,以下哪些指令用于导入Java类?A. <%@ page import="java.util.*" %>B. <%@ page import="java.sql.*" %>C. <%@ page import="java.io.*" %>D. <%@ page import=".*" %>答案:A, B, C, D5. 在JSP中,以下哪些标签用于操作JavaBean属性?B. <jsp:setProperty>C. <jsp:getProperty>D. <jsp:include。
JSP主要的内置对象有:resquest、response、session、application等。
1.Requestrequest包含了来自浏览器请求的相关信息,并且提供了获取Cookie、header和请求相关的参数值等数据的有效方法。
request对象封装了用户提交的信息,通过调用该对象相应的方法可以获取用户提交的信息。
内置对象request对象是实现了ServletRequest接口类的一个实例。
当客户端请求一个JSP页面时,JSP容器会将客户端的请求信息包装在这个request对象中。
请求信息的内容包括请求的头信息(Header)、系统信息(比如:编码方式)、请求的方式(比如:GET 或POST)、请求的参数名称和参数值等信息。
request对象代表的是来自客户端的请求,例如:我们在FORM表单中填写的信息等,是最常用的对象。
获取查询字符串中的变量值①getParameter( )②getParameterValues( )③getParameterNames( )通过调用这几个方法来获取请求对象中所包含的参数的值。
Request常用方法:getProtocol():获取请求使用的通信协议,如http/1.1等。
getServletPath():获取请求的JSP页面所在的目录。
getContentLength():获取HTTP请求的长度。
getMethod():获取表单提交信息的方式,如POST或GET。
getHeader(String s):获取请求中头的值。
getHeaderNames():获取头名字的一个枚举。
getHeaders(String s):获取头的全部值的一个枚举。
getRemoteAddr():获取客户的IP地址。
getRemoteHost():获取客户机的名称(如果获取不到,就获取IP地址)。
getServerName():获取服务器的名称。
getServerPort():获取服务器的端口号。
JSP内置对象⼀.request对象(1)定义:request对象是javax.servlet.http.HttpServletRequest 类的实例(2)作⽤:1.使⽤对应的⽅法获取客户端提交的数据(eg:getPqrameter(),setPqrameter()[要考虑转码]、setAttribute(),getAttribute()[不⽤考虑转码]) 2.在作⽤域中管理属性,取名,设值,以名获值 3.请求转发(getRequestiDispatcher("xxx.jsp").forward(request,response))【我⾃⼰都不愿意看的:客户端的请求信息被封装在request对象中(如⽤户名填写后提交的信息,客户端的IP地址等),再通过request对象与客户端交互,通过request相对应的各种⽅法来收集客户端的Form Cookies 超连接,或者收集服务器的⼀些环境变量,主要⽤来处理客户端浏览器提交的请求中的各项参数和选项。
(是HttpServletRequset的实例)】(3)使⽤过程描述:服务器通过request对象的相关⽅法获取到客户端通过HTML表单或⽹页地址后⾯提供的参数⽅法(get或post)提交的数据(4)常⽤⽅法1.取值和设值get/setParameter(String name)setAttribute(String ,Object)getAttribute(String name)2.请求相关getContentType()getProtocol()getServerName()getServerPort()getContentLength()getRemoteAddr()3.编码相关get/setCharacterEncoding()4.路径相关getRealPath(String path)getContextPath()/**以上都是对安全信息的访问*/5.提交相关get.Method()⼆.response对象(1)定义:response对象是javax.sevlet.HttpServletResPonse接⼝类的对象,封装了JSP产⽣的响应(2)作⽤:1.重定向(sendRedirect("xxx.jsp")) 2.设置HTTP响应报头 3.缓冲区配置 4.添加或处理响应,例如将响应重定向到另⼀个资源,发送错误等。
jsp内置对象-response对象
⼀、概念
隐含对象response是javax.servlet.HttpServletResponse接⼝实现类的对象。
response对象封装了JSP产⽣的响应,⽤于响应客户端的请求,向客户端输出信息。
每次服务器端都会响应⼀个response实例。
response对象经常⽤于设置HTTP标题、添加Cookie、设置响应内容的类型和状态、发送HTTP 重定向和编码URL等。
response对象的常⽤⽅法:
⼆、response重定向
request对象的sendRedirect()⽅法是向服务器发送⼀个重定向请求。
当使⽤该⽅法转到另⼀个页⾯时,等于重新发送了⼀个请求,所以在原来页⾯中的request参数转到新页⾯之后就失效了,这是因为他们的request不同。
⼀般来说,在页⾯中使⽤sendRedirect()⽅法时,不能在⽅法前有HTML输出,但并⾮绝对的,不能有HTML输出其实是指不能有HTML被送到浏览器。
实际上,现在的服务器有cache机制,⼀般在8KB左右。
所以,除⾮关闭cache,或者你使⽤了⽅法out.flush()强制刷新,否则在使⽤sendRedirect()⽅法之前,有少量的HTML输出也是允许的。
项⽬ch04案例
step1:创建user.jsp:
step2:创建response.jsp
结果:http://localhost:8080/ch04/userresponse.jsp
登录失败:
点击登录后,重新定向到该页⾯:
登录成功:。
JSP作业
1. 编写登录界面,并模拟校验登录信息
(1)登录成功跳转到成功页面
(2)登录失败跳转到失败页面,并提示错误类型
在上一WORD中已经完成此任务。
2. 制作商品入库页面,
(1)设置商品的名称、类型、数量、价格等信息,并存储到数据结构List中(2)制作商品显示页面,将List中的全部商品显示出来。
提示:List对象应设置为static变量,以达到保存信息的目的
存储页面
<%@page language="java"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>商品入库</title>
</head>
<body>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<form action="GoodsSelect.jsp"method="post"target="_self"
enctype="application/x-www-form-urleconded">
<center>商品名为:<input type="text"name="name"/></center>
<center>商品类型为:<input type="text"name="type"/></center>
<center>商品数量为:<input type="text"name="number"/></center> <center>商品价格为:<input type="text"name="price"/></center>
<center><input type="submit"value="确认"></center>
</form>
</body>
</html>
<%@page language="java"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String type = request.getParameter("type");
String number = request.getParameter("number");
String price = request.getParameter("price");
%>
<%@page import="java.util.LinkedList"%>
<%!
class goods{
S tring name="UNSET";
S tring type="UNSET";
S tring number="UNSET";
S tring price="UNSET";
}
static LinkedList<goods> LL=new LinkedList<goods>();
%>
<%
g oods gs = new goods();
g = name;
g s.number = number;
g s.price = price;
g s.type = type;
L L.add(gs);
%>
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Insert title here</title>
</head>
<body>
存储成功!
<%for(int i=0;i<LL.size();i++){
out.print("商品名"+LL.get(i).name);
out.print("商品数量"+LL.get(i).number);
out.print("商品价格"+LL.get(i).price);
out.print("商品类型"+LL.get(i).type);
}
</body> </html>。