建议学习,可以通过开发工具试着看源码servlet,这样有助于更深层次的理解
九大内置对象
out、config、page、exception、response、pageContext、request、session、application
1.out
1)介绍:out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据,本质在servlet中是一个输出流;
2)常用方法:println()浏览器打印内容
3)例子:
jsp中
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
out.println("内置对象out");
%>
</body>
</html>
运行结果:
servlet中
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//抓获请求地址url(项目名/out)
@WebServlet(value = "/out")
public class OutTest extends HttpServlet {//继承HttpServlet
//从新写service方法
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//HttpServletResponse对象中获取PrintWriter对象,向浏览器打印内容
PrintWriter out = response.getWriter();
out.println("浏览器输出PrintWriter");
}
}
运行结果:
上面存在一个乱码问题,这也是初学者经常初现的问题,下面解决这个乱码问题。
//抓获请求地址url(项目名/out)
@WebServlet(value = "/out")
public class OutTest extends HttpServlet {//继承HttpServlet
//从新写service方法
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从服务器向浏览器输出,解决中文乱码问题
response.setCharacterEncoding("utf-8");
//HttpServletResponse对象中获取PrintWriter对象,向浏览器打印内容
PrintWriter out = response.getWriter();
out.println("浏览器输出PrintWriter");
}
}
2.config(ServletConfig):对应“真身”中的ServletConfig;
3.page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象,引用为Object类型;
4.pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
5.exception(Throwable):只有在错误页面中可以使用这个对象;
6.request(HttpServletRequest):即HttpServletRequest类的对象;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
//request对象中常用方法
//向request对象中存入一个底层为map对象,key-value
request.setAttribute("key","value");
//获取request中key对应的value值
Object value = request.getAttribute("key");
//删除key对应的内容
request.removeAttribute("key");
//设置请求编码
request.setCharacterEncoding("utf-8");
//获取Cookie对象
Cookie[] cookies = request.getCookies();
//请求转发
request.getRequestDispatcher("/url").forward(request,response);
//获取session对象
HttpSession session1 = request.getSession();
//获取servletContext对象
ServletContext servletContext = request.getServletContext();
//获取表单数据
request.getParameter("name");
%>
</body>
</html>
public class RequestTset extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//重定向
response.sendRedirect("url");
//转发
request.getRequestDispatcher("url").forward(request,response);
//request对象中常用方法
//向request对象中存入一个底层为map对象,key-value
request.setAttribute("key","value");
//获取request中key对应的value值
Object value = request.getAttribute("key");
//删除key对应的内容
request.removeAttribute("key");
//设置请求编码
request.setCharacterEncoding("utf-8");
//获取Cookie对象
Cookie[] cookies = request.getCookies();
//请求转发
request.getRequestDispatcher("/url").forward(request,response);
//获取session对象
HttpSession session1 = request.getSession();
//获取servletContext对象
ServletContext servletContext = request.getServletContext();
//获取表单数据
request.getParameter("name");
}
}
重定向与转发请浏览
7.response(HttpServletResponse):即HttpServletResponse类的对象;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//response对象中常用方法
response.sendRedirect("url");
//添加cookie
response.addCookie(new Cookie("key","value"));
//获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)
response.getOutputStream();
//获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)
PrintWriter writer = response.getWriter();
//设置服务器向客户端的字符编码
response.setCharacterEncoding("utf-8");
%>
</body>
</html>
public class ResponseTest extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//response对象中常用方法
response.sendRedirect("url");
//添加cookie
response.addCookie(new Cookie("key","value"));
//获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)
ServletOutputStream outputStream = response.getOutputStream();
//获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)
PrintWriter writer = response.getWriter();
//设置服务器向客户端的字符编码
response.setCharacterEncoding("utf-8");
}
}
8.application(ServletContext):即ServletContext类的对象;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//application对象中常用方法
//向application对象中存入一个底层为map对象,key-value
application.setAttribute("key","value");
//获取application中key对应的value值
Object key = application.getAttribute("key");
//删除application中key对应的值
application.removeAttribute("key");
%>
</body>
</html>
application消失,关闭服务器。
9.session(HttpSession):即HttpSession类的对象,多次回话,多次请求响应
HTTP协议是一种无状态协议,客户向服务器发出的请求request,然后服务器返回响应response,连接就被关闭了,在服务器不保存连接的有关信息,因此在下一次连接时,服务器已经没有以前的连接信息了,无法判断这一次连接和上一次连接时同一个客户信息,因此,必须使用会话记录有关连接的信息。
从客户打开浏览器连接到服务器,到客户关闭浏览器离开这个服务器,称做一个会话。当客户访问服务器是,可能会反复连接这个服务器上的几个页面、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种方法知道这是同一个客户,这时就需要session对象。
session的工作原理如下:
1、客户首次访问服务器的一个页面时,服务器就会为该用户分配一个session对象,同时为这个session指定唯一的ID,并且将该ID发送到客户端并写入到cookie中,使得客户端与服务器的session建立一一对应的关系;
2、当客户端继续访问服务器端的其它资源时,服务器不再为该客户分配新的session对象,直到客户端浏览器关闭、超时或调用session的invalidate()方法使其失效,客户端与服务器的会话结束。
3、当客户重新打开浏览器访问网站时,服务器会重新为客户分配一个session对象,并重新分配sessionID。
session对象主要用于属性操作和会话管理,常用方法如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//session对象中常用方法
//设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。
session.setAttribute("key","value");
//在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。
session.getAttribute("key");
//删除指定名字的session属性,若该属性不存在,则出现异常。
session.removeAttribute("key");
//使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。
session.invalidate();
//获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。
String id = session.getId();
//设置会话的最大持续时间,单位是秒,负数表明会话永不失效。
session.setMaxInactiveInterval(30);
//获取会话的最大持续时间,使用时候需要一些处理
session.getMaxInactiveInterval();
%>
</body>
</html>
public class SessionTest extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从request对象获取session对象
HttpSession session = request.getSession();
//session对象中常用方法
//设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。
session.setAttribute("key","value");
//在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。
session.getAttribute("key");
//删除指定名字的session属性,若该属性不存在,则出现异常。
session.removeAttribute("key");
//使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。
session.invalidate();
//获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。
String id = session.getId();
//设置会话的最大持续时间,单位是秒,负数表明会话永不失效。
session.setMaxInactiveInterval(30);
//获取会话的最大持续时间,使用时候需要一些处理
session.getMaxInactiveInterval();
}
}
session失效的方法请浏览
1)等待超时
2)session.invalidate();消亡
3)关闭浏览器(注意:这里关闭的是整个浏览器,而不是当前的页面)
4)cookie删除sess
5)重启服务器
作用域排行
pageContext(this当前页面)<request<session<application