Java web从入门到放弃(1)

第五章、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对象


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值