1、out对象
用来向客户端输出各种数据类型的内容;对应用服务器上的输出缓冲区进行管理。
主要有out.print()和out.println()两种方法,两者的区别是out.print()函数在输出完毕后并不会换行,out.println()函数在输出完毕后会结束当前行,下一个输出语句将会在下一行开始输出。但在输出中换行在网页上并不会换行。在网页上换行应该打印字符串“<br>”。
2、request对象
负责得到客户端的请求信息,主要有以下几种方法:
String getMethod()得到提交方式;
String getRequestURI()得到请求的URL地址;
String getProtocol()得到协议名称;
String getServletPath()获得客户端请求服务器文件的路径;
String getQueryString()得到URL的查询部分;
String getServerName()得到服务器名称;
String getServerPort()得到服务器端口号;
String getRemoteAddr()得到客户端的IP地址。
此外,request对象还可以获得客户端的参数,其常用的两种方法如下:
String getParameter(String name) 获得客户端传送给服务器的name值,当传送给此函数的参数名没有实际参数与之对应时返回null;
String[] getParameterValues(String name)以字符串数组的形式返回指定参数的所有值。
3、response对象
负责向客户端发出响应,可利用response对象进行重定向,重定向就是跳转到另一个页面。方法如下:
response.sendRedirect(目标页面路径);
注意:重定向方法的另一种主要形式:
<jsp:forward page=""></jsp:forward>
两者区别:①从浏览器的地址显示来看:
forward方法属于服务器端去请求资源,服务器直接访问目标地址,并对该目标地址的响应内容进行读取,再把读取的内容发给浏览器,因此客户端浏览器的地址不变;
response方法是告诉客户端,使浏览器知道去请求哪一个地址,相当于客户端重新请求一遍,所以地址显示栏会改变。
②从数据共享来看:
forward方法转发的页面以及转发到的目标页面能够共享request里面的数据;
response方法转发的页面以及转发到的目标页面都不能够共享request里面的数据;
③从功能来看:
forward方法只能在同一个Web应用程序内的资源之间转发请求,可以理解为服务器内部的 一种操作;
response方法能够重定向到当前应用程序的其他资源,还能重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点资源。
④从效率来看:
forward方法效率较高,因为跳转仅发生在服务器端;
response方法效率相对较低,因为相当于又进行了一次请求。
4、session对象,负责保存同一客户端一次会话过程中的一些信息。
5、application对象,表示整个应用的环境信息。
6、exception对象,表示页面上发生的异常,可以通过它获得页面异常信息。
7、page对象,表示的是当前JSP页面本身,如Java类定义中的this。
8、pageContext对象,表示此JSP的上下文。
9、config对象,表示此JSP的ServletConfig。
附:Cookie操作
在写Cookie时主要用到以下方法:
response.addCookie(Cookie c):通过该方法将Cookie写入客户端;
Cookie.setMaxAge(int second):通过该方法设置Cookie的存活时间,参数表示存活的秒数。
练习1、页面1输入用户名和密码,页面2处理数据,将正确的用户名和密码输出打印到页面3,否则打印出“登录失败”到页面4。
页面1代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<form action="Jsp2.jsp">
用户名:<input type="text" name="user">
密码:<input type="password" name="password">
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
页面2代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%
String s1=request.getParameter("user");
String s2=request.getParameter("password");
if(s1.equals("qwert")&&s2.equals("123456")){
%>
<jsp:forward page="Jsp3.jsp"></jsp:forward>
<%
}else{
%>
<jsp:forward page="Jsp4.jsp"></jsp:forward>
<%
}
%>
</body>
</html>
页面3代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%
out.print("登录成功"+"<br>");
out.print("用户名为:"+request.getParameter("user")+"<br>");
out.print("密码为:"+request.getParameter("password")+"<br>");
%>
</body>
</html>
页面4代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%
out.print("登录失败");
%>
</body>
</html>
练习2、页面1计算指定数据的平方,页面2计算原数据的立方。(使用Cookie方法)
页面1代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%
String s1="10";
int num=Integer.parseInt(s1);
%>
该数字的平方为:<%=num*num %>
<%
Cookie cookie=new Cookie("num",s1);
cookie.setMaxAge(500);
response.addCookie(cookie);
%>
<a href="Jsp6.jsp">页面2</a>
</body>
</html>
页面2代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%
String s1=null;
Cookie[] cookies=request.getCookies();
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("num")){
s1=cookies[i].getValue();
break;
}
}
int number=Integer.parseInt(s1);
%>
该数字的立方为:<%=number*number*number %>
</body>
</html>