文章目录
我的学习路线
——本次学习的简单说明
本次的学习分为九节
注:点击题目会跳转到其他博客链接
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,欢迎有兴趣的人一起学习。