又到了翻笔记找知识点的时候啦,这片博文主要阐述九大内置对象以及各自的用法。
Jsp有九大内置对象,分别是request、response、out、session、application、page、pageContent、exception、config。
按照功能划分:
输出输入对象:request对象、response对象、out对象
通信控制对象:pageContext对象、session对象、application对象
Servlet对象:page对象、config对象
错误处理对象:exception对象
-------------------------------------------------------------------------------
输入输出对象,顾名思义是主管数据的传输的。
out 对象是JspWriter类的实例,用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。out对象的主要方法有:
<body>
<h1>Jsp内置对象out的常用的几个方法</h1>
<%
out.print("<h2>静夜思</h2>");
out.print("床前明月光,<br>");
out.print("疑是地上霜。<br>");
out.print("举头望明月,<br>");
//out.flush();作用是将缓冲区内容输入到客户端,同时清空缓冲区内容
out.print("低头思故乡。<br>");
%>
<br>
<!-- 依次调用 -->
<!-- 使用jsp表达式调用时再句尾不能加; -->
缓冲区大小:<%=out.getBufferSize() %> byte<br>
缓冲区剩余:<%=out.getRemaining() %> byte<br>
返回缓冲区满时是否自动清空:<%=out.isAutoFlush() %><br>
</body>
在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
<h1>内置对象request的注册练习</h1>
<form action="doresponse.jsp" method="post">
姓名 :<input type="text" name="name"/><br>
<!-- checkbox是复选框 -->
<br>
爱好:<input type="checkbox" name="favorite" value="read"/>读书<br>
<input type="checkbox" name="favorite" value="music"/>音乐<br>
<input type="checkbox" name="favorite" value="movie"/>电影<br>
<input type="submit" value="注册">
</form>
dorequest.jsp页面中把request对象的方法写入如下:
<body>
<% request.setCharacterEncoding("utf-8");//解决中文乱码的问题,但是无法解决url传参数的问题
request.setAttribute("password","123456");
%>
<%String name=request.getParameter("name");
//使用url传参数的时候,接收到的乱码转换为utf-8格式。因为eclipse内置的浏览器的原因,推荐使用360测试
//name= new String(name.getBytes("ISO-8859-1"), "UTF-8");
%>
姓名:<%= name %><br>
爱好:<%
if(request.getParameterValues("favorite")!=null)
{
String[] favorite=request.getParameterValues("favorite");
for(int i=0;i<favorite.length;i++)
{out.println(favorite[i]+" ");}
}
%>
<br>
密码:<%=request.getAttribute("password") %>
<br>
mime:<%=request.getContentType() %>
<br>
<% SimpleDateFormat saf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//Date s=new Date();
String time=saf.format(new Date());
%>
输出当前日期:<%=time %>
<br>
返回请求的协议类型及版本号:<%=request.getProtocol() %>
<br>
返回接收请求的服务器主机名:<%=request.getServerName() %>
<br>
返回服务器接受此请求所用的端口号:<%=request.getServerPort() %>
<br>
返回字符编码方式:<%=request.getCharacterEncoding() %>
<br>
<br>
返回请求体的字节数:<%=request.getContentLength() %>
<br>
返回发送此请求的客户端ip地址:<%=request.getRemoteAddr() %>
<br>
返回一个虚拟路径的真实路径:<%=request.getRealPath("dorequest.jsp") %>
<!--
上面虽然喜爱你是返回虚拟路径所调用的方法已经过时,但是仍然可以调用
设置请求的字符编码方式:<%//request.setCharacterEncoding("GBK") %>
-->
<br>
返回上下文路径:<%=request.getContextPath() %>
<br>
</body>
response 对象是 javax.servlet.http.HttpServletResponse类型的对象,代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象与request对象的另一个区别在于,它的作用域在JSP页面内有效。response的主要方法有:
<%
//设置响应的mime类型
response.setContentType("text/html;charset=utf-8");
//out输出流
out.println("<h1>response内置对象</h1><br>这里是out输出流<br>");
//这个out.flush()的调用仅仅是为了调整输出的位置。如果不记得了,可以取消掉下面这一行注释看看效果。
//out.flush();
//response对象生成的输出流
PrintWriter outer = response.getWriter();
outer.println("大家好,这是用response对象生成的输出流");
//请求重定向,相当于客户端向服务器发了一个新的请求,让这个请求定位到需要的页面。
//response.sendRedirect("request.jsp");
//请求重定向
//response.sendRedirect("dorequest.jsp");
//请求转发
request.getRequestDispatcher("dorequest.jsp").forward(request, response);
%>