Jsp页面的九大隐式对象
来源:互联网 发布:网站性能优化技术 编辑:程序博客网 时间:2024/05/20 14:26
Jsp页面的九大隐式对象
问题1:哪九大隐式对象?
Request, Response, Session, Config, Application, Page ,PageContext, Out, Exception
问题2:为什么会有九大隐式对象?
这与访问Jsp页面时,服务器做出响应的原理相关——任何响应都将被编译成一个Servlet,最终将结果返回给浏览器。访问Jsp页面时,首先将Jsp编译成一个Java文件(Servlet),并将页面内容放在_jspService()方法中,此方法中将会用到九大隐式对象,而这九大隐式对象是定义在_jspService()方法中,供使用。所以在Jsp页面无需再定义这九大隐式对象,而是可以直接拿来使用。
具体实现:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%><% String data="aaa"; request.setAttribute("data",data);//直接使用request和out对象%>out.write(request.getAttribute("data"))//向浏览器输出aaa
具体介绍:
Request,Session,Application(即ServletContext),PageContext已在http://blog.csdn.net/edson121/article/details/73702278介绍了,此处不再重复,需要补充的一点是PageContext对象还有一个重要的方法:PageContext.findAttribute(属性名);它表示将在page,request,session,application域中查找该属性,若没有则返回”“空字符串,而非null。
① Out对象
Out对象属于JspWriter类,它是带有缓冲区的PrintWriter;也就是说数据会写到缓冲区,而非直接写给浏览器,只有数据缓冲区满了或整个Jsp页面结束时才会写给浏览器。
例如:
<%@page language="java" import="java.util.*" "pageEncoding="UTF-8"%><html> <head></head> <body> out.println("aaa") response.getWriter().write("bbb");//显示的是bbbaaa </body></html>
也可以通过Jsp页面的Page指令中buffer属性来设置out 对象的缓冲,buffer=none|8kb|sizekb 设为none则数据不缓存,直接写给浏览器。
② Exception对象
这个对象只有在Jsp页面的Page命令中将isErrorPage属性设为true时才会在编译完成的Java文件中定义。
例:<%@page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>编译后的Servlet中显示这样一行代码:java.lang.Throwable exception=org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);if (exception != null) { response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR); }
③ Config对象
Config对象即ServletConfig类,该类用来保存相关的配置信息;例如:数据库用户名、密码等,也可以自己配置需要的参数,配置的信息作用与某一个Servlet,而前面介绍过的ServletContext即Application对象配置信息的方法作用于整个应用程序。
配置方法:
<init-param> <param-name>password</param-name> <param-value>123456</param-value></init-param>
获取配置信息:
通过ServletConfig对象获取,在Jsp页面中可直接使用Config对象的getInitParameter(name)方法获取。
④ Response对象
即响应内容,熟悉HTTP协议中的响应头基本上就掌握该对象了,需要注意的是response在输出时有两种输出方式:Response.getOutputStream()和Response.getWriter()方法;这两种方法不能在一次请求中同时调用。
⑤ Page对象:相当于Java程序中的this,表示当前Jsp页面。
查看Jsp页面被编译出来的Servlet的方法:
C:\apache-tomcat-7.0.78\apache-tomcat-7.0.78\work\Catalina\localhost\Jsp\org\apache\jsp在work目录下:
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request); if (exception != null) { response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html;charset=UTF-8"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n"); out.write("<html>\r\n"); out.write(" <head>\r\n"); out.write(" \r\n"); out.write("\r\n"); out.write(" </head>\r\n"); out.write(" \r\n"); out.write(" <body>\r\n"); out.write(" 出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!出错了!<br>\r\n"); out.write(" </body>\r\n"); out.write("</html>\r\n"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } }
下一篇将简单总结一下重定向和请求转发的区别。
- Jsp页面的九大隐式对象
- jsp页面显示request对象的值
- jsp页面的隐藏对象及方法
- jsp的页面元素和内置对象
- JSP页面的9个隐含对象
- 黑马day06 jsp错误页面&九大隐式对象
- jsp学习2-jsp页面的9个隐含对象
- jsp 页面传对象
- ftl页面转jsp页面page对象的用法
- JSP的九大隐式对象
- JSP 页面获得bean对象
- JSP页面中的隐含对象
- JSP页面给对象或字段设置属性的区别
- 隐含对象简单笔记+jsp页面之间的请求
- JSP页面间传递对象的方法与其特点
- jsp页面获取后台session保存的对象
- jsp页面内置对象out的clear()及clearBuffer()比较
- Jsp页面内置对象不提示的问题解决
- win10+64位 安装Theano并实现GPU加速
- 什么是TCP粘包?
- MYSQL ERROR CODE 错误编号的意义
- apktool反编译工具使用
- 在java maven工程中,使用tomcat插件启动web应用
- Jsp页面的九大隐式对象
- ram & rom
- 什么是js面向对象?有什么特点?
- 扑克牌的顺子
- QML实现可定制模态对话框【核心部分详解】
- jquery获取input 复选框值
- 词性标注的python实现-基于平均感知机算法
- [Linux学习]修改bashrc、/etc/profile环境变量导致系统命令不能使用
- Java线程中yield与join方法的区别代码解析