Day4-JSP 九大内置对象及四个作用域

我的学习路线

——本次学习的简单说明

本次的学习分为九节
注:点击题目会跳转到其他博客链接

Day1:JSP的入门&环境的配置&Tomcat的注意点
Day2:简单项目的创建和基本的功能的实现(打war包,共享项目)
Day3:JSP基础语法
Day4:JSP 九大内置对象及四个作用域
Day5:JavaBean 组件
Day6:Servlet 开发
Day7:EL 表达式
Day8:Jsp 自定义标签
Day9:Jsp 标准标签库

持续更新中:新的博客写完会加链接

下面是Day4的学习

1 Jsp 九大内置对象及四大作用域概述

在 Jsp 开发中,Jsp 提供了 9 个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。这个9
个内置对象分别是:pageContext,request,response,session,application,config,out,page,exception;常用的是前面 5个,需要熟练掌握;在 Jsp 开发中,可以保存数据,Jsp 提供了四种数据保存范围;分别是
page,request,session,application;

2 Jsp 四大作用域

Page 范围

只在一个页面中保存数据;
javax.servlet.jsp.PageContext(抽象类)

代码:
<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
	//设置两个page范围的数据key->value,都是键值对的形式
	pageContext.setAttribute("name","张三");
	pageContext.setAttribute("age",123);
%>
<%
	//取值,pageContext中封装的有set方法和get方法
	//注意把取到的值转型,因为我们的name是String类型的
	//pageContext中封装的还有很多的方法,有兴趣的可以去实验一下
 	String name = (String)pageContext.getAttribute("name") ;
	int age= (Integer)pageContext.getAttribute("age");
%>
<font>姓名:<%=name %></font><br>
<font>年龄:<%=age %></font>
</body>
</html>

运行效果
在这里插入图片描述
pageContext是一个抽象类,抽象类是不能直接使用的,千万不要以为这里的抽象类是直接使用的,其实是要被编译成servlet文件后才能使用的,就像上一节学习的标签的使用一样,都是需要被编译成java文件的。
下面的就是我找到的被编译成的java文件中的代码,可以简单的看一下,这里不是直接使用这个抽象类的,而是生成了一系列的代码,我们最终程序跑的其实是这个java文件。
在这里插入图片描述

Request 范围

只在一个请求中保存数据;
javax.servlet.http.HttpServletRequest(接口)

可以理解成发短信,我们就发一条信息过去,然后就没有然后啦,对方就接收到我们发的短信的内容,requestScope.jsp向requestTarget.jsp发有关姓名和年龄这两个数据的信息过去,然后requestTarget.jsp读取到短信的内容是姓名为张三,年龄123。
发完了就无效了,就结束了
先简单的看一下写的两个代码吧
在这里插入图片描述requestScope.jsp的代码

<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
	//设置两个request范围的数据key->value,都是键值对的形式
	request.setAttribute("name","张三");
	request.setAttribute("age",123);
%>
<!-- 内部转发 -->
<jsp:forward page="requestTarget.jsp"></jsp:forward>
</body>
</html>

requestTarget.jsp的代码

<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
	//取值,request中封装的有set方法和get方法
 	String name = (String)request.getAttribute("name") ;
	int age= (Integer)request.getAttribute("age");
%>
<font>姓名:<%=name %></font><br>
<font>年龄:<%=age %></font>
</body>
</html>

访问的效果
在这里插入图片描述

Session 范围

在一次会话范围中保存数据,仅供单个用户使用;
javax.servlet.http.HttpSession(接口)

可以理解成打电话,只要不挂掉,就可以一直进行通话。前提是跟你打电话的那个人向你打电话了,电话是通的你才能和他打电话。这里的sessionScope.jsp是打电话的人,sessiontarget.jsp是接电话的人,sessiontarget.jsp只有在sessionScope.jsp把电话打过来之后,sessiontarget.jsp才能从sessionScope.jsp那里获得数据和信息,
数据是保存在服务器里的,只要不关闭浏览器,在session的有效范围内,(默认的是半个小时有效),是可以一直使用的。
sessionScope.jsp代码

<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
	//设置两个session范围的数据key->value,都是键值对的形式
	session.setAttribute("name","张三");
	session.setAttribute("age",123);
	//上面的数据已经存在服务器里面的,所以不需要转发的,直接可以被其他的jsp进行访问
%>
<h1>session的值设置完毕!</h1>
</body>
</html>

sessionTarget.jsp代码

<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
	//取值,session中封装的有set方法和get方法
 	String name = (String)session.getAttribute("name") ;
	int age= (Integer)session.getAttribute("age");
%>
<font>姓名:<%=name %></font><br>
<font>年龄:<%=age %></font>
</body>
</html>

首先我们要运行的是sessionScope.jsp,从这个jsp开始运行,不要从sessionTarget.jsp开始运行,因为sessionScope.jsp是打电话的一方,是传递信息的一方,而sessionTarget.jsp是接收信息的一方,只有打电话的一方愿意打了,接电话的才能接。
这里的sessionTarget.jsp可以理解成单相思,被动恋爱,单相思主动了,受到的乘法就是程序报错,同样你的女神sessionScope.jsp是不会给你任何会用的。(哭晕在厕所)

效果图:
在这里插入图片描述在这里插入图片描述
看一下没有女神打电话的效果
在这里插入图片描述
注意:接下来的这个的效果就是 Application与 Session的区别。
在这里插入图片描述虽然session启动了,但是,我们只能通过同一个浏览器进行访问,这里是不能跨越浏览器进行访问的,下面的的Application是可以跨服务器进行访问的。

Application 范围

== 在整个服务器上保存数据,所有用户共享;==
javax.servlet.ServletContext(接口)

可以理解成打电话,只要不挂掉,就可以一直进行通话。能供多个浏览器使用,就像女神打电话过来了,你可以用A手机接,然后同样也可以同时用B手机接,两个手机都可以在通话中的。

applicationScope.jsp代码

<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
	//设置两个application范围的数据key->value,都是键值对的形式
	application.setAttribute("name","张三");
	application.setAttribute("age",123);
%>
<h1>application设置完毕</h1>
</body>
</html>

applicationTarget.jsp代码

<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
	//取值,pageContext中封装的有set方法和get方法
 	String name = (String)application.getAttribute("name") ;
	int age= (Integer)application.getAttribute("age");
%>
<font>姓名:<%=name %></font><br>
<font>年龄:<%=age %></font>
</body>
</html>

这里的Application大部分都和上面的session是一样的,不一样的地方在于可以跨浏览器进行访问。同样也是要女神先打电话过来哦。
在这里插入图片描述
注意,上面讲的范围,范围是依次增大的。

3 response 对象

Response 内置对象和 request 内置对象是相对应的,response 内置对象用于响应客户请求,向客户端输出信息
avax.servlet.HttpServletResponse 接口

自动刷新应用

重点部分代码,注意都改成UTF-8的形式。
在这里插入图片描述

代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
</head>
<body>
<%
	//resonse内置对象
	response.setHeader("refresh", "1");
	//获取当前的时间,这里的Date不是JSP的内置对象
	//所以要导入包
	Date mydate = new Date();
%>
	当前时间:<%=mydate.toLocaleString() %>
</body>
</html>

效果(由于是截图,没法显示出动态的效果,还没学会怎么弄gif动图)
在这里插入图片描述

如果没有这个response对页面的刷新,那么我们只能通过手动去刷新页面了,这样也能达到时间的改变,怎么手动刷新呢,就是不断的更新网址。
正常情况下获取页面的动态的时间都是通过js来写的,相信学过javaweb的都会的,javaweb的入门接触,相当于学习所以语言的时候helloWorld的输出。

页面重定向应用 客户端跳转

页面重定向是经常用的,很重要

看一下上次写的学习的笔记,下图是上次写的,内部跳转
在这里插入图片描述注意:服务器端跳转和客户端跳转是有本质的区别的,客户端跳转的时候浏览器的地址是会发生改变的,浏览器的地址就是你写的localhost:8080那里的本质访问网址,简称浏览器地址。。。
response2的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
</head>
<body>
<% 
	//重定向,客户端跳转
	response.sendRedirect("index.html");
%>
</body>
</html>

index.html的代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello,我是一个点,这个是我的response1.jsp跳转过来的页面。
</body>
</html>

运行response2.jsp这个代码,会直接跳转到index.heml的界面上,不论是通过eclipse运行的看,还是通过localhost进行访问,效果都是一样的,并且地址发生改变了。
在这里插入图片描述在这里插入图片描述咳咳,文本写错了,其实是response02舔砖过来的,都截图了,懒的改文本了。
这个客户端的跳转在什么时候用呢?有经验的都知道,我们一般有点档次的网站,都是需要用户登录的,这里的index.html就是用户登录后的界面,response2.jsp的界面就是用户一开始看到的界面,我们可以设置一个登录按钮,通过访问数据库进行对比,比对成功了就进行页面的跳转,也就是这里的客户端跳转。

操作 cookie 应用 、post get 方法比较

post 放数据包里 get 放 Url 后面 、get 数据量小,不安全;

可以记录在本地的客户端的,可以减轻客户端的压力,但是cookie是不安全的。
下面简单的做一个登录的界面
代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
<!-- 实现重置功能的js -->
<script type="text/javascript">
	function resetValue() {
		document.getElementById("userName").value="";
		document.getElementById("password").value="";
	}
</script>
</head>
<body>

<table>
	<!-- 控制生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>用户名</td>
		<td><input type="text" id="userName" name="userName"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>密码</td>
		<td><input type="text" id="password" name="password"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>记住密码</td>
		<td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td><input type="submit" value="登录"></td>
		<td><input type="button" value="重置" onclick="resetValue()"></td>
	</tr>
</table>
</body>
</html>

效果图:
在这里插入图片描述上面的重置按钮是已经实现的,输入内容点击一下重置就可以了,通过js进行简单的重置的实现,重置按钮的点击事件onclick触发了就会调用js的代码,将用户名和密码那里的信息传回成一个空的。
接下面写提交的部分
response03修改后的代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
<!-- 实现重置功能的js -->
<script type="text/javascript">
	function resetValue() {
		document.getElementById("userName").value="";
		document.getElementById("password").value="";
	}
</script>
</head>
<body>
<!-- action提交的是地址 -->
<form action="userLogin.jsp" method="get">
<table>
	<!-- 控制生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>用户名</td>
		<td><input type="text" id="userName" name="userName"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>密码</td>
		<td><input type="text" id="password" name="password"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>记住密码</td>
		<td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td><input type="submit" value="登录"></td>
		<td><input type="button" value="重置" onclick="resetValue()"></td>
	</tr>
</table>
</form>
</body>
</html>

userLogin的代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
</head>
<body>
大家好,我是一个点,这个页面是由response03.jsp中的页面点击提交操作后,跳转过来的
</body>
</html>

我在输入账户和密码登录成功后,就到了这个界面了,这里的账户和密码是可以随便输的,很明显我输入的是账户123,密码12,但是,但是!我们的账户和密码被别人看到了!
在这里插入图片描述并且浏览器上数据是有长度限制的,大概是两三百位的样子,这里不仅不安全,同时当你的数据量过大的时候,它是没法显示完整的。

具体怎么改呢,其实很简单,把get改成post,然后浏览器那里就不会显示你的账户和密码的信息了
在这里插入图片描述现在就没有了,因此我们以后写这个的时候,都要把默认的get改成post,不然会出现一系列的不好的问题。
在这里插入图片描述

cookie 和 session 的比较

cookie 信息是存在客户端的,session 信息是存在服务器的;

什么是cookie呢?看下面的
在这里插入图片描述
上图的解释来源链接如下:
https://zhidao.baidu.com/question/378620283.html
session已经在前面学习了,应该还是有印象的,这里的cookie其实和session是差不多的用法的。

再简单的看看这个,前面是关于对request的学习,知道了四大作用域的范围,我们request的范围是只在一个请求中保留数据,这里的request.getparameter()中填写的是你需要的东西的name,不是id, 我们写js,css的时候,一般情况写的是id,这里一定要注意,用的是name,同样的,竟然我们需要获取数据,就得给个默认的初始值,就像你定义一个数据一样,得给默认的初始值,一般的int的初始值是0,boolean类型的默认的是false,这里的value的作用就是赋初始值的。
在这里插入图片描述
下面看我写的代码,与上面的部分是连续的,同样还是用的这两个jsp在进行操作。
在这里插入图片描述还是放全部的代码在这里吧,,,怕大家操作的不好。

response03.jsp的代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
<!-- 实现重置功能的js -->
<script type="text/javascript">
	function resetValue() {
		document.getElementById("userName").value="";
		document.getElementById("password").value="";
	}
</script>
</head>
<body>
<!-- action提交的是地址 -->
<form action="userLogin.jsp" method="post">
<table>
	<!-- 控制生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>用户名</td>
		<td><input type="text" id="userName" name="userName"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>密码</td>
		<td><input type="text" id="password" name="password"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>记住密码</td>
		<td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td><input type="submit" value="登录"></td>
		<td><input type="button" value="重置" onclick="resetValue()"></td>
	</tr>
</table>
</form>
</body>
</html>

userLogin.jsp的代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
</head>
<body>
<% 
	//写存储客户端的用户信息的部分,cookie
	String userName=request.getParameter("userName");//获取用户名
	String passWord=request.getParameter("password");//获取用户密码
	String remember=request.getParameter("remember");//获取记住密码
	//看一下提交后输出的效果,这里是后台输出的,想要在网页上看输出,用out进行输出
	System.out.println("userName"+userName);
	System.out.println("passWord"+passWord);
	System.out.println("remember"+remember);
%>
我是一个点,我已经登录成功啦
</body>
</html>

下面的操作就用到了这两个代码,启动服务器,访问response03.jsp,输入账户密码和选择记住密码,点击登录。
在这里插入图片描述
看一下登录的效果
前台显示(浏览器的显示)
在这里插入图片描述
后台显示(开发工具上的控制台)
在这里插入图片描述这里的request中的东西,来自response03.jsp中的这,看下图
在这里插入图片描述这里的复选框不选的话,默认的就是null,就想int,boolean类型的数据一样,不定义初始值的时候,都有属于自己的默认的初始值的,系统自动会去给它一个初始值,c语言中的好像是给的一个随机的初始值,java中给的不是随机的。

设置一个cookie

在userlogin.jsp中的代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
</head>
<body>
<% 
	//写存储客户端的用户信息的部分,cookie
	String userName=request.getParameter("userName");//获取用户名
	String passWord=request.getParameter("password");//获取用户密码
	String remember=request.getParameter("remember");//获取记住密码
	//假如remember的值是remember-me,那么就进行if语句中的操作
	//这个equals是String中的一个方法,不懂的可以去看我写的J2Se部分的博客
	if("remember-me".equals(remember)){
		Cookie userNameAndPassWord=new Cookie("userNameAndPassWord",userName+"-"+passWord);
		//设置一下cookie的有效期,默认的是1秒的
		userNameAndPassWord.setMaxAge(1*60*60*24*7);//这样设置的就是一星期的
		//添加到系统里去,对cookie进行保存
		response.addCookie(userNameAndPassWord);
		System.out.println("设置Cookie成功");
	}
%>
我是一个点,我已经登录成功啦
</body>
</html>
读取cookie

看代码
response03.jsp中的代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Insert title here</title>
<!-- 实现重置功能的js -->
<script type="text/javascript">
	function resetValue() {
		document.getElementById("userName").value="";
		document.getElementById("password").value="";
	}
</script>

<%
	//设置初始值,初始的为空
	String userName=null;
	String password=null;
	//获取本站在客户端存储的所有的cookie
	Cookie[] cookies=request.getCookies();
	//循环找我们需要的cookie
	for(int i=0;cookies!=null&&i<cookies.length;i++){
	//如果这个cookie是我们存储的账户密码的cookie,那么就取出来
		if(cookies[i].getName().equals("userNameAndPassWord")){
			userName=cookies[i].getValue().split("-")[0];//split返回的是一个数组,现在取的是第个0个
			password=cookies[i].getValue().split("-")[1];
		}
	}
	if(userName==null){
		userName="";
	}
	if(password==null){
		password="";
	}
	//在下面加东西,把这个取到的值显示出来,因为这里其实本质是写的java代码
	//所以我们可以用全局变量的原理把它显示出来的
%>
</head>
<body>
<!-- action提交的是地址 -->
<form action="userLogin.jsp" method="post">
<table>
	<!-- 控制生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>用户名</td>
		<td><input type="text" id="userName" name="userName" value="<%=userName%>"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>密码</td>
		<td><input type="text" id="password" name="password" value="<%=password%>"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td>记住密码</td>
		<td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
	</tr>
	
	<!-- 控制再生成一行 -->
	<tr>
		<!-- 控制生成两列 -->
		<td><input type="submit" value="登录"></td>
		<td><input type="button" value="重置" onclick="resetValue()"></td>
	</tr>
</table>
</form>
</body>
</html>

注意了,我们的value取到的值是上面的java部分定义的
比如这里的
在这里插入图片描述
来源在这里
在这里插入图片描述我们通过cookie记录上次的登录,然后这里的java语句进行判断,如果是空的,那么还是给空的,如果不是空的值,就给上次的在客户端登录的时候的账户和密码。一定要注意,cookie获得的是本地的记录,是客户端上的!

再次登录的时候,账户密码就是自动的有了,这样能够很好的增强用户的体验。
在这里插入图片描述

4 out 对象

Out 内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区。
所以 out内置对象的方法是向客户端输出数据和管理缓冲区;
底层 javax.servlet.jsp.JspWriter 抽象类

先简单的看一下out对象的输出
在这里插入图片描述
就是这点东西,都是存在缓冲的,可以用out内置对象的方法来看

<%@ 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>Insert title here</title>
</head>
<body>
<%
	out.println("<h1>");
	out.println("这是一个out对象的的输出");
	out.println("</h1>");
%>
<%
	int totalbuffer=out.getBufferSize();//获取总的缓冲区的大小
	//可以把代码块放在这个之间,能够得到我们运行这个代码块的缓冲大小
	int available=out.getRemaining();//获取未使用的缓冲区的大小
	int user=totalbuffer-available;//获取使用的缓冲区的大小
	out.println("总共的缓冲区:"+totalbuffer);
	out.println("未使用的缓冲区的大小:"+available);
	out.println("使用的缓冲区的大小:"+user);
%>	
</body>
</html>

效果图
在这里插入图片描述

5 config 对象

Config 内置对象是 JSP 页面通过 JSP 容器进行初始化时被传递的对象。javax.servlet.ServletConfig
。在 Servlet初始化的时候,JPS 引擎通过 config
向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext 对象传递的服务器的有关信息;

先配置一个servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>StudyJSP</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  	<servlet-name>init</servlet-name>
  	<jsp-file>/sysInit.jsp</jsp-file>
  	<init-param>
  		<param-name>jdbcName</param-name>
  		<param-value>com.mysql.jdbc.Driver</param-value>
  	</init-param>
  	<init-param>
  		<param-name>dbUrl</param-name>
  		<param-value>jdbc:mysql://localhost:3306/db_xx</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>init</servlet-name>
  	<url-pattern>/init</url-pattern>
  </servlet-mapping>
</web-app>

在这里插入图片描述在这里插入图片描述
创建一个jsp来进行测试
在这里插入图片描述
代码

<%@ 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>Insert title here</title>
</head>
<body>
<%
	String jdbcName=config.getInitParameter("jdbcName");
	String dbUrl=config.getInitParameter("dbUrl");
%>
<h1>驱动名称:<%=jdbcName %></h1>
<h1>驱动地址:<%=dbUrl %></h1>
</body>
</html>

效果
在这里插入图片描述

6 exception 对象

Exception 内置对象用来处理 JSP 文件在执行时发生的所有异常,它java.lang.Throwable 类的一个对象。

代码

<%@ 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>Insert title here</title>
</head>
<body>
<%
	int a=1;
	int b=0;
	out.print(a/b);
%>
</body>
</html>

运行后看一下这个的效果
在这里插入图片描述如何解决这个问题呢,现在就要用到内置对象了,可以看到,用到的是两个jsp,一个jsp是主页面的,另一个jsp是处理异常的
在这里插入图片描述
exception01.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.*" %>
<%@page errorPage="error.jsp" %>
<!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>Insert title here</title>
</head>
<body>
<%
	int a=1;
	int b=0;
	out.print(a/b);
%>
</body>
</html>

error.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page isErrorPage="true" %>
<!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>Insert title here</title>
</head>
<body>
<%
	if(exception!=null){
		out.println("程序错误信息");
		out.println(exception.getMessage());
	}
%>
</body>
</html>

7 pageContext 对象

pageContext
内置对象是一个比较特殊的对象。它相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext 内置对象由
Jsp 容器创建并初始化,pageContext 对象提供了对 JSP 页面所有对象及控件的访问。

测试代码

<%@ 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>Insert title here</title>
</head>
<body>
<%
//在四个作用域分别设置这四个值
	pageContext.setAttribute("name0", "pageInfo");
	request.setAttribute("name1", "requestInfo");
	session.setAttribute("name2", "sessionInfo");
	application.setAttribute("name3", "applicationInfo");
	
	out.println("使用pageContext<br/>");
	out.println("page中的属性值:"+pageContext.getAttribute("name0")+"<br/>");
	out.println("request中的属性值:"+pageContext.getRequest().getAttribute("name1")+"<br/>");
	out.println("session中的属性值:"+pageContext.getSession().getAttribute("name2")+"<br/>");
	out.println("application中的属性值:"+pageContext.getServletContext().getAttribute("name3")+"<br/>");
%>
</body>
</html>

效果图
在这里插入图片描述

我的天啊,总算写完了,也算是给自己积德吧,以后忘记了回来看看,好累奥,emmmm,欢迎有兴趣的人一起学习。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值