1:什么是内置对象?
JSP内置对象是Web容器创建的一组对象,不使用new关键字就可以使用的内置对象
2:九大内置对象有哪些?
常用的有:out对象,request对象,response对象,application对象,session对象
不常用的有:Page对象,pageContext对象,exception对象,Config对象
3:out对象
首先要知道缓冲区是什么:缓冲区就是内存的一块区域用来保存临时数据。
那么out对象是什么呢?out对象是JspWriter类的实例,是向客户端输出内容常用的对象
常用方法:
1):void println():向客户端打印字符串
2):void clear():清除缓冲区的内容,如果在flush之后调用会抛出异常
3):void clearBuffer():清除缓冲区的内容,在flush之后调用不会抛出异常
4):void flush():将缓冲区内容输出到客户端
5):int getBufferSize():返回缓冲区以字节数的大小,如不设缓冲区则为0
6):int getRemaining():返回缓冲区还剩余多少可用
7):boolean isAutoFlush():返回缓冲区满时,是自动清空还是返回异常
8):void close() 关闭输出流
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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>
<h1>out内置对象</h1>
<%
out.println("hello");
out.flush();
//out.clear();//会抛出异常
out.clearBuffer();//不会抛出异常
out.println("world");
%>
缓冲区大小:<%= out.getBufferSize() %>byte<br>
缓冲区剩余大小:<%= out.getRemaining() %>byte<br>
是否自动清空缓冲区:<%=out.isAutoFlush() %>
</body>
</html>
4:request对象
学习request对象之前要分清楚表单提交的方式get和post的区别:
get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全性较低但效率比post要好。适合提交数据量不大,安全性不高的数据。比如:搜索,查询等功能
post:将用户提交的信息封装在HTML HEADER内,适合提交数据量大,安全性高的用户信息。比如:注册,修改,上传等功能
客户端的请求消息被封装在request对象中,通过它才能了解到客户的需求,然后做出相应。它是HttpServletRequest类的实例。request独享具有请求域,即完成客户端的请求之前,该对象一直有效
常用的方法:
1):String getParameter(String name):返name指定函数的参数值
2):String[] getParameterValues(String name):返回包含参数name的所有值的数组
3):void setAttribute(String,Object):存储此请求中的属性
4):Object getAttribute(String name):返回指定属性的属性值
5):String getContentType():得到请求题的MIME类型
6):String getProtocol():返回请求用的协议类型及版本号
7):String getServerName():返回接受请求的服务器主机名
register.jsp页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>注册界面</h1>
<form action="request.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="usernmae"></td>
</tr>
<tr>
<td>兴趣爱好:</td>
<td>
<input type="checkbox" name="hobby" value="read">读书
<input type="checkbox" name="hobby" value="tv">看电视
<input type="checkbox" name="hobby" value="internet">上网
<input type="checkbox" name="hobby" value="music">音乐
</td>
</tr>
<tr><td colspan="2"><input type="submit" value="提交"></td></tr>
</table>
</form>
<br>
<br>
<a href=request.jsp?username=zhangsan>测试URL传参</a>
</body>
</html>
request.jsp页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>request内置对象的使用</h1>
<% request.setCharacterEncoding("utf-8");//可以用来解决中文乱码的问题,但是对于URL传参不适用
request.setAttribute("password", "123456");
%>
用户名:<%= request.getParameter("username") %>
爱好:
<%
if(request.getParameterValues("hobby")!=null){
String[] Params=request.getParameterValues("hobby");
for(String Param:Params){
out.println(Param);
}
}
%>
密码:<% request.getAttribute("password"); %>
请求实体的MIME类型:<% request.getContentType(); %><br>
协议类型及其版本号:<%request.getProtocol(); %><br>
服务器主机名:<% request.getServerName(); %><br>
服务器端口号:<%request.getServerPort(); %><br>
请求文件的长度:<%request.getContentLength(); %>
请求客户端的ip地址:<%request.getRemoteAddr(); %>
请求的真实路径:<%request.getRealPath("request.jsp"); %>
请求的上下文路径:<%request.getContextPath(); %>
</body>
</html>
如果要解决URL传递参数的乱码问题,应该在server.xml(conf文件目录下)文件当中修改。添加URIEncoding属性,修改配置文件之后一定要重启服务器才能生效.
5.response对象
response对象包含了响应客户请求的有关信息,但在jsp中很少直接用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只对这次访问有效,其他页面的response对象对当前页面无效
常用方法:
String getCharacterEncoding():返回响应用的是何种字符编码
void setContentType(String type)设置响应的MIME类型
PrintWriter getWriter()返回可以向客户端输出字符的一个对象
sendRedirect(java.lang.String location)重新定向客户端的请求
请求转发与请求重定向的区别:
请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变
请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变
<%
response.setContentType("text/html");//设置相应MIME类型
out.println("<h1>response内置对象</h1>");
out.println("<hr>");
PrintWriter outer=response.getWriter();//获得输出流对象
outer.println("大家好,我是response对象生成的输出流outer对象");//提前与内置的out对象
response.sendRedirect("regiser.jsp");//请求重定向
%>
6.session对象
session是什么呢?
session表示客户端与服务器的一次会话,Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。session实际上是一个特定的时间概念
session对象:
1): session对象是在第一个jsp页面被装载时自动创建的,完成会话期管理。
2):从一个客户打开浏览器并连接到服务器开始,到客户端关闭浏览器离开这个服务器结束,被称为一个会话。
3):当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象
4):session对象是HttpSession类的实例
常用方法:
long getCreationTime()返回session创建的时间
public String getId()返回session创建时jsp引擎为它设的唯一ID号
public Object setAttribute(String name,Object value)使用指定名称将对象绑定到此会话
public Object getAttribute(String name)返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null
String[] getValueNames():返回一个包含此session中所有可用属性的数组
int getMaxInactiveInterval()返回两次请求间隔多长时间此session被取消
session1.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>session内置对象</h1>
<hr>
<%
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d=new Date(session.getCreationTime());
session.setAttribute("username", "admin");
session.setAttribute("password", "123456");
session.setAttribute("age", 12);
//设置当前session最大生成周期
session.setMaxInactiveInterval(10);
%>
创建的时间:<%= sdf.format(d) %>
session的ID编号:<%= session.getId() %>
从session中获取用户名:<%= session.getAttribute("username") %>
<a href="session2.jsp" target="_blank">跳转</a>
</body>
</html>
session测试页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>session内置对象</h1>
session的ID编号:<%= session.getId() %>
从session中获取用户名:<%= session.getAttribute("username") %>
session中保存的属性有:<%
String [] names=session.getValueNames();
for(int i=0;i<names.length;i++)
{
out.println(names[i]+" ");
}
%>
</body>
</html>
session的生命周期:
1):创建:当客户端第一次访问某个jsp或者servlet时候,服务器会为当前会话创建一个SessionID,每次客户端向服务器发送请求时,都会将此SessionID携带过去,服务端会对此SessionId进行校验.
2):活动:
a:某次会话当中通过超链接打开的新页面属于同一次会话
b:只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话
c:除非本次会话的所有页面都关闭后再重新访问某个jsp或者servlet将会创建新的会话
3):销毁:session的销毁只有三种方式
a:调用了session.incalidate()方法
b:Session过期(超时)
c:服务器重启
7:application对象
application对象实现了用户间数据的共享,可存放全局变量。开始于服务器的启动,终止于服务器的关闭。在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
常用方法:
public void setAttribute(String name,Object value)使用指定名称将 对象绑定到此会话中
public Object getAttribute(string name)返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名下,则返回null
Enumeration getAttributeNames()返回所有可用属性名的枚举
String getServerInfo()返回Jsp引擎名及版本号
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>application对象 </h1>
<%
application.setAttribute("username","zhangsan");
application.setAttribute("age", 11);
application.setAttribute("email", "546546546@qq.com");
%>
用户名为:<%=application.getAttribute("username") %><br>
年龄为:<%= application.getAttribute("age") %><br>
邮箱为:<%= application.getAttribute("email") %><br>
application中的属性有:
<%
Enumeration attributes=application.getAttributeNames();
while(attributes.hasMoreElements()){
out.println(attributes.nextElement()+" ");
}
%><br>
JSp引擎的版本号:<%=application.getServerInfo() %>
</body>
</html>
8:page对象
page独享是指当前页面本身,有点像类中的this指针,它是java.lang.Object类的实例,常用方法如下:
Class getClass():返回此类Object类
int hashCOde():返回此Object的hash码
boolean equals(Object obj):判断此Object是否与指定的Object对象相等
void copy(Object obj):把此Object拷贝到指定的Object对象中
Object clone():克隆此对象
String toString():把此Object对象转换成String类的对象
void notify():唤醒一个等待的线程
void notifyAll():唤醒所有等待的线程
void wait(int timeout):使一个线程处于等待直到timeout结束或被唤醒
void wait():使一个线程处于等待直到被唤醒
9:pageContext对象
1):pageContext对象提供了对jsp页面内所有的对象及名字空间的访问
2):pageContext对象可以访问到本页所在的session,也可以获取本页面所在的application的某一属性
3):pageContext对象相当于页面中所有功能的集大成者
4):pageContext对象的本类名也叫pageContext
10:Config对象
Config对象是在一个servlet初始化时,JSP引擎向它传递信息用的,此信息包括servlet初始化时所要用到的参数以及服务器的有关信息(通过传递一个ServletContext对象),常用方法如下:
ServletContext getServletContext():返回含有服务器相关信息的servletConext对象
String getInitParameter(String name):返回初始化参数的值
Enumeration getInitParameterNames():返回servlet初始化所需所有参数的枚举
11:exception对象
exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSp页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。实际上是java.lang.Throeable对象,常用方法如下:
String getMessage():返回描述异常的消息
String toString():返回关于异常的简短描述信息
void printStackTrace():显示异常及其栈轨迹
Throwable FillInStackTrace():重写异常的执行栈轨迹
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>测试异常的页面</h1>
<hr>
<%
System.out.println(100/0);
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>异常内置对象</h1>
<hr>
异常消息是:<%=exception.getMessage() %>
异常字符串的描述:<%=exception.toString() %>
</body>
</html>
<h1>异常内置对象</h1>
<hr>
异常消息是:<%=exception.getMessage() %>
异常字符串的描述:<%=exception.toString() %>
</body>
</html>