什么是内置对象
内置对象其实就是已经定义好的对象,我们不需要创建直接使用即可。
内置对象主要是为了方便我们的开发,提升我们的开发效率
JSP有9个内置对象
- request ( HttpServletRequest ) 作用域,表示一次请求
- response ( HttpServletResponse ) 表示一次响应
- session ( HttpSession ) 作用域 表示一次会话
- out ( JspWriter )向浏览器返回数据
- page (Servlet) 当前jsp对应的Servlet对象
- application ( ServletContext )作用域,表示当前Web应用,全局对象。
- pageContext ( pageContext ) 作用域 页面上下文,获取页面的信息
- config (ServletConfig) 当前JSP对应的ServletConfig对象
- exception (Exception) JSP页面中发生的异常
不同的内置对象有不同的作用域
常用的内置对下如下
request
response
session
application
pageContext
request
不管是前端后端还是移动端,只要涉及到网络请求都少不了request和response对象。
关于HTTP协议,可以看这篇文章简单了解一下 数据交互
request对象就是一个请求对象,封装了客户端的请求信息,比如我们填写的表单信息,服务端需要通过request对象拿到需要的数据,然后做出响应
在jsp中,request对象是HttpServletRequest的实例。
常用方法
<%
request.setAttribute("name","喻志强"); //往request对象中存储一个值 key-value的形式
request.setCharacterEncoding("utf-8"); //设置编码格式
request.getParameter("");//获取提交的指定参数的值
request.getParameterNames();//返回请求中所有参数的集合
request.getParameterValues("");//获取包含指定参数的所有值的数组
request.getAttributeNames();//获取所有属性名称集合
request.getAttribute("name");//获取指定属性的属性值,如果不存在返回null
request.getCharacterEncoding();//获取编码格式
request.getProtocol();//获取HTTP使用的协议
request.getServletPath();//获取用户提交信息的页面的路径
request.getMethod();//获取用户提交的方式(GET/POST 等)
request.getHeaderNames();//返回所有HTTP头的名称集合
request.getHeader("");//获取header中指定属性的值
request.getRemoteAddr();//获取用户的ip地址
request.getRemoteHost();//获取用户的主机名
request.getServerName();//获取服务器的名称
request.getServerPort();//获取服务器端口号
request.getCookies();//返回客户端所有的Cookie的数组
request.getSession();//返回request对应的session对象,如果没有,则创建一个
request.getInputStream();//返回请求的输入流
request.getContextPath();//返回request URI中指明的上下文路径
request.getRequestDispatcher("result.jsp").forward(request,response);//请求转发
%>
小例子:我们写一个简单的表单,将提交的request一些信息打印出来
<form action="request.jsp" method="get">
姓名:<input name="userName"><br>
年龄:<input name="age"> <br>
爱好:<input type="checkbox" name="hobby" value="吃">吃
<input type="checkbox" name="hobby" value="喝">喝
<input type="checkbox" name="hobby" value="玩">玩
<input type="checkbox" name="hobby" value="乐">乐
<br>
<input type="submit" value="提交">
</form>
request.jsp代码
<%@ page import="java.util.Enumeration" %><%--
Created by IntelliJ IDEA.
User: yzq
Date: 2018/7/24
Time: 11:44
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>request内置对象</title>
</head>
<body>
<%
Enumeration<String> headers = request.getHeaderNames();
while (headers.hasMoreElements()) {
String headerName = headers.nextElement();
String headerValue = request.getHeader(headerName);
System.out.println(headerName + " : " + headerValue);
%>
<span>
<%=headerName%>
:
<%=headerValue%>
</span>
<br>
<% }%>
<hr>
<%
String userName = request.getParameter("userName");
String age = request.getParameter("age");
String[] hobbies = request.getParameterValues("hobby");
int serverPort = request.getServerPort();
String serverName = request.getServerName();
%>
serverPort:<%=serverPort%>
<br>
serverName:<%=serverName%>
<hr>
提交的用户名:<%=userName%><br>
提交的年龄:<%=age%><br>
提交的爱好:
<%
for (int i = 0; i < hobbies.length; i++) {
out.print(hobbies[i] + " ");
}
%>
</body>
</html>
看一下运行效果
可以看到,我们顺利的拿到了表单中提交的数据,并将头信息打印出来
拿到数据后就可以进行下一步的处理了。
response
response对象对应着http请求的响应,其封装了响应体的信息,我们可以通过response对象响客户端返回数据。
response对象是HttpServletResponse的实例
常用方法
response.getOutputStream();//返回一个响应二进制的输出流
response.getWriter();//返回可以输出字符的对象
response.sendRedirect("");//页面重定向
response.setContentLength(1000);//设置响应头长度
response.setContentType("text/html; charset=utf-8");//设置响应的MIME类型
response.getCharacterEncoding();//获取编码格式
response.addCookie(new Cookie("",""));//添加Cookie
response.setHeader("Content-Disposition","attachment; filename=fileName");//配置header,表示浏览器已下载的方式打开文件
response.setStatus(200);//设置响应码
...
示例,验证用户名密码,并向页面写入数据
<%
String account = request.getParameter("account");
String pwd = request.getParameter("pwd");
if (account.equals("yzq")&&pwd.equals("123")){
response.getWriter().write("登录成功");
}else {
response.getWriter().write("账号或密码错误");
}
%>
session
session:代表客户端与服务端的一次会话
用户第一次进入系统直到退出系统或关闭浏览器,期间的一系列行为称为会话,是HttpSession的实例。
session主要用于会话跟踪,可以用来共享数据,例如登录的用户信息等等
一次会话可能包含多次request和response
常用方法:
<%
session.setAttribute("name", "yzq");
session.setAttribute("age", 25);
session.getCreationTime();//获取创建时间
session.getId();//获取sessionid
session.invalidate();//取消session,使session不可用
session.removeAttribute("name");//移除某个属性
%>
out
out对象代表输出流对象,我们可以通过out对象向客户端输出内容
out对象是JspWriter类的实例
常用方法
<%
out.println("");//换行输出
out.clear();//清空缓冲区内容
out.clearBuffer();//清除缓存区的当前内容
out.close();//关闭输出流
%>
application
application 实现了用户间数据的共享,可存放全局变量。
它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在,这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了 application 对象的生命周期。它是 ServletContext 类的实例。
常用方法:
<%
application.setAttribute("", "");//新增属性
application.getAttribute("");//获取属性
application.getRealPath("");//获取指定虚拟路径的真实路径
application.getResource("");//返回指定资源的url路径
%>
page
page 指向当前 JSP 页面本身,有点象类中的 this 指针,它是 java.lang.Object
类的实例 。“page” 对象代表了正在运行的由 JSP 文件产生的类对象。
getServletInfo();
getServletConfig();
exception
exception 是一个表示错误对象,当一个页面在运行过程中发生了错误,就产生这
个对象。如果一个 JSP 页面要应用此对象,就必须把 isErrorPage 设为 true,否则
无法编译。它实际上是 java.lang.Throwable 的对象。
通常情况下我们会指定一个error.jsp 专门用来显示错误页面。
例如:
<%--
Created by IntelliJ IDEA.
User: yzq
Date: 2018/7/24
Time: 15:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>exception</title>
</head>
<body>
<%
exception.getCause();
exception.getLocalizedMessage();
exception.getMessage();
%>
</body>
</html>
我们在其他页面指定errorPage即可
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="exception/error.jsp" %>
config
config 对象是在一个 Servlet 初始化时,JSP 引擎向它传递信息用的,此信息
包括 Servlet 初始化时所要用到的参数(通过属性名和属性值构成)以及服务器
的有关信息(通过传递一个 ServletContext 对象),不是太常用
pageContext
pageContext 对象提供了对其他内置对性的获取方法,也就是说他可以访问到本页面的所有其他内置对象
常用方法
pageContext.setAttribute("","");
pageContext.getAttribute("");
pageContext.getRequest();
pageContext.getServletConfig();
pageContext.getSession();
以上就是Jsp中的内置对象
下一篇比较重要:
如果你觉得本文对你有帮助,麻烦动动手指顶一下,可以帮助到更多的开发者,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!