第五章、JSP基本语法
第六章、JSP内置对象
1、request对象
1.1、访问请求参数
request对象用于处理HTTP请求中的各项参数
当通过链接的方式发送请求的时候,可以为该请求传递参数,即在链接的页面后面加上?加参数实现(注意问号要英文半角),多个参数用&链接,如下:
<a href="delete.jsp?id=1&user=">删除</a>
在目标界面中通过request对象的getParameter()方法来接收参数。
<%
String id = request.getParameter("id");
%>
注意:request的getPrameter()方法在获取参数的时候,(1)如果指定的参数不存在,则返回null。(2)如果指定了参数名单未给定参数值,则返回""空字符串。
<br/>
1.2、在作用域中管理属性
在一个页面的java代码中setAttribute(),然后再在后一个界面中使用getAttribute()。
前一个界面index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>request</title>
</head>
<%
try {
int money = 100;
int number = 1;
request.setAttribute("result", money/number);
} catch (Exception e) {
request.setAttribute("result","很抱歉,页面发生错误");
}
%>
<jsp:forward page="deal.jsp" />
</body>
</html>
跳转页面deal.jsp(此处只写出了主要的body部分,其他部分与index.jsp中相同,不再赘述)
<body>
<%
String message = request.getAttribute("result").toString();
%>
<%=message %>
</body>
</html>
1.3、获取cookie
在互联网中cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器。
通过cookie可以表示用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到了客户机的某个指定目录中。
(1)index.jsp中首先获得cookies对象的数组,如果不为空,则遍历数组找出设置的cookie(这里设置为mrCookie),并从该cookie中提取出用户名和注册时间显示出来
<%@ page import="java.net.*"%>
<%@ page import="java.util.*" %>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>通过cookie保存并读取用户登录信息</title>
</head>
<%
Cookie[] cookies = request.getCookies();
String user = "";
String date = "";
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("mrCookie")) {
user = URLDecoder.decode(cookies[i].getValue().split("#")[0]);
date = cookies[i].getValue().split("#")[1];
}
}
}
if ("".equals(user) && "".equals(date)) {
%>
游客您好欢迎您首次光临!
<form action="deal.jsp" method="post">
请输入姓名:<input name="user" type="text" value=""> <input
type="submit" value="确定">
</form>
<%
} else {
%>
欢迎[<b><%=user%></b>]再次光临!
<br /> 您的注册时间是<%=date%>
<%
}
%>
</body>
</html>
(2)deal.jsp文件,用于向cookie中写注册信息。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.*"%>
<%@ page import="java.util.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>写入cookie</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");//设置编码格式
String user = URLEncoder.encode(request.getParameter("user"),"utf-8");//获取用户名
Cookie cookie = new Cookie("mrCookie",user+"#"+new Date().toLocaleString());//创建并实例化cookie对象
cookie.setMaxAge(60*60*24*30);//设置cookie有效期,这是cookie的最大年龄
response.addCookie(cookie);//将刚刚实例化的cookie对象加到cookie数组中
%>
<script type="text/javascript">window.location.href="index.jsp"</script>
</body>
</html>
遇到了“Cookie cannot be resolved to a type”的错误,解决方法如下:
右击项目,Properties->Java Bulid Path->Libraries->Add Library->Sever Rutime
还有一个问题,我运行网页注册一次之后每次打开网页都显示的是欢迎再次光临,而没有重置数据,让我可以重新注册。还不明白为什么有待解决
1.4、解决中文乱码
1.5、获取客户端信息
2、response对象
response对象用于响应客户请求向客户端输出信息
2.1、重定向网页
使用response.sendRedirect()方法让网页跳转到另一个页面
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%response.sendRedirect("login.jsp"); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>通过cookie保存并读取用户登录信息</title>
</head>
</body>
</html>
login.jsp文件内容如下
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login</title>
</head>
<body>
<form name="form1" method="post" action="">
用户名:<input name="name" type="text" id="name" style="width:120px">
密 码<input name="pwd" type="password" id="pwd" style="width:120px"><br>
<br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
执行index.jsp之后页面会重新跳转到login.jsp页面,网址栏中显示的也是重定向之后的页面的地址,也就是login.jsp的地址
2.2、处理HTTP文件头
通过response对象可以设置HTTP响应报头,其中,最常用的是禁用缓存、设置页面自动刷新和定时跳转页面
首先介绍禁用缓存
<%
response.setHeader("Cache-Control","no-store");
response.setDateHeader("Expires",0);
%>
然后是自动刷新页面
<%response.setHeader("refresh","10"); %>
最后是定时跳转(可以理解为一种自动刷新页面)
<%response.setHeader("refresh","5;URL=login.jsp"); %>
2.3、设置输出缓冲
当遇到以下三种情况的时候会把缓冲区的信息写到客户端
A、JSP页面的输出信息已经完全写到了缓冲区
B、缓冲区已满
C、在JSP页面中调用了response对象flushBuffer()方法或者out对象的flush方法
response对象提供的对缓冲区进行配置的方法如下
response.flushBaffer() //强制将缓冲区的内容输出到客户端
response.getBufferSize() //获取相应所使用的缓冲区的实际大小,如果没有使用则返回0
response.setBufferSize(int) //设置缓冲区的大小
response.reset() //清楚缓冲区的内容,同时清楚代码头和报头
response.isCommitted() //检查服务器端是否已经把数据写入到了客户端
3、Session对象
在index.jsp页面中输入姓名,传输给result.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login</title>
</head>
<body>
<form name="form1" method="post" action="session.jsp">
<div align="center">
<table width="23%" border="0">
<tr>
<td width="36%"><div align="center">您的名字是:</div>
</td>
<td width="64%"><label><div align="center">
<input type="text" name="name" />
</div>
</label></td>
</tr>
<tr>
<td colspan="2"><label><div align="center">
<input type="submit" name="Submit" value="提交" />
</div>
</label></td>
</tr>
</table>
</div>
</form>
</body>
</html>
在session.jsp中接受index.jsp中submit的姓名,然后将其存到session中,再让用户填写address,传输给result.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>session</title>
</head>
<body>
<%
String name = request.getParameter("name");
//由于这个是上个界面中submit传输的数据,所以这里使用request的getParameter()方法,
session.setAttribute("name", name);
//此处将name字符串,用name为名字存入到session中,
//所以在后面的页面中就可以通过session.getAttribute("name")来获取存在name名字中的信息
%>
<div align="center">
<form id="form1" name="form1" method="post" action="result.jsp">
<table width="28%" border="0">
<tr>
<td>您的名字是:</td>
<td><%=name%></td>
</tr>
<tr>
<td>您喜欢去的地方是:</td>
<td><label><input type="text" name="address">
</label>
</td>
</tr>
<tr>
<td colspan="2"><label><div align="center">
<input type="submit" name="Submit" value="提交" />
</div>
</label></td>
</tr>
</table>
</form>
</div>
</body>
</html>
在result.jsp中接受session.jsp中submit的address,并且在session中读取之前储存的name
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>result</title>
</head>
<body>
<%
//由于在上个界面的时候将name存入了session中,所以这里可以通过session。getAttribute("name")来直接获取对应的信息
String name = (String) session.getAttribute("name");
//由于上个address是上个界面submit的属性,所以这里需要使用request.getParameter("address")来获取address的信息
String address = request.getParameter("address");
%>
<form name="form1" method="post" action="">
<table width="28%" border="0">
<tr>
<td colspan="2"><div align="center">
<strong>显示答案</strong>
</div>
</td>
</tr>
<tr>
<td width="49%"><div align="left">您的名字是:</div>
</td>
<td width="51%"><label><div align="right"><%=name%></div>
</label>
</td>
</tr>
<tr>
<td><label><div align="left">您最喜欢去的地方是:</div>
</label>
</td>
<td><div align="left"><%=address%></div>
</td>
</tr>
</table>
</form>
</body>
</html>
4、application对象
application对象用于保存所有应用程序的共有数据,他在服务器启动的时候自动创建,在服务器停止的时候销毁。所有用户都可以使用5、out对象
使用out可以输出、管理缓存区,及时清理缓存区的冗杂内容
<%
out.print("11111");
out.println("111");
%>
使用out还可以管理响应缓存
<%
out.clear();//清除缓存区中的内容
out.clearBuffer()//清除当前缓存区中的内容
out.flush();//刷新流
out.isAutoFlush();//检验当前缓冲区已满的时候是否自动清空,还是抛出异常
out.getBufferSize();//获取当前缓冲区的大小
%>
6、其他内置对象(看的太痛苦了,先跳过,后来用的时候在慢慢加入细节)
6.1获取会话范围的pageContext对象
6.2读取web.xml的config对象
6.3应答或者请求的page对象
6.4获取异常信息的exception对象