一、request对象
request对象,又称请求对象,它封装了用户提交的各种请求信息,在服务端通过request对象的相关方法来获取这些数据
1、获取表单数据
<form method="post" action="提交信息的目的页面">
<input type="text" name="name">
<input type="submit" value="提交" name="submit">
</form>
String name=request.getParameter("name");
get与post的区别在于:get提交的信息在地址栏可见,post提交的信息在地址栏不可见
处理中文乱码:request.setCharacterEncoding("utf-8");
获取表单元素的多个值:String [] name=request.getParameterValues("name");
2、获取地址栏后的附加信息
http://url?name=admin&pass=123456
String name=request.getParameter("name");
3、获取客户端的数据
- getProtocol():获取请求使用的通信协议
- getServletPath():获取请求的JSP页面所在的目录
- getContentLength():获取HTTP请求的长度
- getMethod():获取表单提交信息的方式
- getHeader(String s):获取请求头中的值
- getHeaderNames():获取头名字的一个枚举
- getHeaders(String s):获取头的全部值的一个枚举
- getRemoteAddr():获取客户的IP地址
- getRemoteHost():获取客户机的名称(如果获取不到,则获取ip地址)
- getServerName():获取服务器的名称
- getServerPort():获取服务器的端口号
- getParameterNames():获取表单提交的信息体部分中的name参数值的一个枚举
4、管理属性
request.setAttribute("username","admin");
request.getAttribute("username");
5、读cookie
读取cookie数组
Cookie[] cookie=request.getCookies();
遍历cookie数组,读取cookie的值
String name="";
for(Cookie cookie:c){
if("name".equals(c.getName("name"))){
name=c.getValue();
}
}
二、response对象
1、设置HTTP响应头
response.addHeader("refresh",1);
response.setHeader("refresh",1);
2、设置页面相应类型
response.setContentType("text/html");
3、页面重定向
·response.sendRedirect(文件的URL);
页面跳转的方式:
- 客户端跳转:超链接、表单提交、response跳转——地址栏有变化
- 服务端跳转:forward动作标记——地址栏没有变化,request对象保存的信息在跳转后的页面仍然可以使用
4、写cookie
创建cookie对象
Cookie cookie=new Cookie("name",value);
设置cookie的有效期
cookie.setMaxAge(60*60*24);
向客户端写cookie
response.sendRedirect(文件的URL);
三、session对象
session用于跟踪客户的状态,一般每个用户登录网站,系统就为止生成一个session对象,用于保存该用户的信息。
session对象的主要作用:
1.跟踪用户的访问状态和保存特征数据
2.识别用户的身份和是否在线
3.根据用户的身份来控制页面的访问许可
4.购物车
1、session对象的ID
服务器为每一个用户创建一个session对象,并为session对象分配一个String类型的ID。Tomcat服务器将ID发送到客户端,存放在用户的Cookie中
同一用户在同一Web服务目录中的各个页面的session是相同的
2、session对象的常用方法
String getId();//获取session的id
boolean isNew();//判断是否是一个新的session对象
void setAttribute("name","admin");//设置属性的值
Object getAttribute("name");//获取指定属性的值
void removeAttribute("name");//移除指定属性
void invvalidate();//session设置为失效,一般在退出时使用
void setMaxInactiveInterval(int interval);//设置session最大非活跃间隔时间,单位是秒
3、session的生命周期
session对象的生存期限依赖:
1、客户是否关闭浏览器
2、session对象是否调用invalidate()方法使session无效
3、session对象是否达到设置的最长“发呆”时间
4、实现访问控制
<%
String user=(String)session.getAttribute("user");
if(user==null){
response.sendRedirect("../unit3/body.jsp");
}
%>
5、设置session的最大发呆时间
<%
//设置最大发呆时间 单位为秒
session.setMaxInactiveInterval(3);
%>
6、购物车
pay
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
if("1".equals(request.getParameter("flag"))){
session.removeAttribute("good");
}else{
ArrayList list=(ArrayList)session.getAttribute("good");
if(list!=null){
for(int i=0;i<list.size();i++){
out.print(list.get(i)+"<br>");
}
}
}
%>
<a href="buy.jsp">继续购物</a><br>
<a href="pay.jsp?flag=1">清空购物车</a>
</body>
</html>
addcar
<%@page import="java.util.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
ArrayList list=null;
String goodname=request.getParameter("goodname");
String price=request.getParameter("price");
if(goodname!=null){
if(session.getAttribute("good")==null){
list=new ArrayList();
}else{
list=(ArrayList)session.getAttribute("good");
}
list.add(goodname);
session.setAttribute("good", list);
}
response.sendRedirect("buy.jsp");
%>
</body>
</html>
buy
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'buy.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<table>
<tr>
<td>商品名称</td>
<td>商品单价</td>
<td>购买</td>
</tr>
<form action="unit4/addcar.jsp" method="post">
<tr>
<td>手机</td>
<td>2000</td>
<td><input type="submit" name="buy" value="购买" /></td>
</tr>
<input type="hidden" name="goodname" value="手机" /> <input
type="hidden" name="price" value="2000" />
</form>
<form action="unit4/addcar.jsp" method="post">
<tr>
<td>ipad</td>
<td>2000</td>
<td><input type="submit" name="buy" value="购买" /></td>
</tr>
<input type="hidden" name="goodname" value="ipad" /> <input
type="hidden" name="price" value="2000" />
</form>
<form action="unit4/addcar.jsp" method="post">
<tr>
<td>笔记本</td>
<td>2000</td>
<td><input type="submit" name="buy" value="购买" /></td>
</tr>
<input type="hidden" name="goodname" value="笔记本" /> <input
type="hidden" name="price" value="2000" />
</form>
<form action="unit4/addcar.jsp" method="post">
<tr>
<td>硬盘</td>
<td>2000</td>
<td><input type="submit" name="buy" value="购买" /></td>
</tr>
<input type="hidden" name="goodname" value="硬盘" /> <input
type="hidden" name="price" value="2000" />
</form>
</table>
<a href="unit4/pay.jsp">查看购物车</a>
</body>
</html>
四、application对象
一个网站中的任一个JSP页面开始执行时,将产生一个application对象,直到服务器关闭application对象才会被销毁
不同web应用产生不同的application对象
访问同一个网站的客户都共享一个application对象,application对象可以实现多客户间的数据共享
1、application对象的常用方法
public void setAttribute(String key,Object obj);
public Object getAttribute(String key);
public void removeAttribute(String key);
2、网站计数器
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int count=1;
if(application.getAttribute("count")==null){
application.setAttribute("count", 1);
}else{
if(session.isNew()){
count=(Integer)application.getAttribute("count");
application.setAttribute("count", ++count);
}
}
%>
你是第<%=count %>个用户
</body>
</html>
五、out对象
out对象是一个输出流,用来向客户端输出数据
out对象方法
out.pirnt();//输出数据
out.newLine();//输出一个换行符
out.flush();//输出缓冲区的内容
out.close();//关闭流
六、pageContext对象
通过pageContext对象可以访问页面作用域中定义的所有隐式对象
pageContext.getSession();
作用范围:同一页面
常用方法:
以键/值的方式,将一个对象的值存放到pageContext中
void setAttribute(String name,Object value);
根据名称获取pageContext中存放对象的值
void getAttribute(String name);
总结
内置对象的作用域:
page:当前页面有效
request:一次请求有效
session:一次会话有效
application:整个应用有效