什么是jsp?jsp的内置对象有哪些?
来源:互联网 发布:php qq发邮件源代码 编辑:程序博客网 时间:2024/06/18 18:13
1、背景介绍
百度百科是这么介绍jsp的:“jsp是一种动态网页技术标准。它出现的根本原因是为了简化servlet的设计,是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。”
从以上的介绍可以得出,servlet是先出的,jsp是后出的。
所以,想要了解jsp,先学习一下servlet。
在地址栏输入"test3"访问该servlet,浏览器返回结果如下。
如果你右键查看网页源代码,可以看到是非常普通的HTML代码。
也就是,在servlet中,各种拼接HTML代码,最终返回给客户端一个HTML页面。
我们想要做的动态的网站,如果所有的HTML页面都通过这样的方式来形成,那岂不太繁琐了。
于是,诞生了jsp。
那么jsp是啥样的呢?
可以看到,jsp页面中的
<% for(int i=0; i<4;i++) {
等嵌入的长得像java代码都消失了。而helloworld这句话出现了4次。于是猜测,jsp是否就是HTML页面嵌入java代码,然后通过某种机制去执行这些java代码,最终返回给我们想要生成的HTML页面?
在系统的某个路径下,你可以找到被tomcat解析成java类的jsp页面。而且一个是.class文件,另一个是java文件。
这不正是我们所熟悉的java类和它被编译成.class字节码文件吗?
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; 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("<html>\r\n"); out.write("<head>\r\n"); out.write(" <title>测试</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\r\n"); out.write(" "); for(int i=0; i<4;i++) { out.write("\r\n"); out.write(" helloWorld! <br>\r\n"); out.write("\r\n"); out.write(" "); } out.write("\r\n"); out.write("\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); } }
2、知识剖析:
来看一下jsp的执行流程:
而且,它并非是将页面本身发送给客户端,而是把页面执行的结果发送给客户端。
客户端收到这个文件后,就可以正常显示在客户端了。
比如我要要访问test.jsp,然后利用Tomcat的解析器,他会将jsp文件转化为java文件,这个java文件就是servlet,
所以jsp本质上就是servlet。
jsp能实现的,servlet也能实现。不管你最终写的是一个多么复杂的jsp文件,它最后总能转化为一个html文件。
jsp的9个内置对象和4个作用域:
request 请求对象 类型 javax.servlet.ServletRequest 作用域 Requestresponse 响应对象 类型 javax.servlet.SrvletResponse 作用域 PagepageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Pagesession 会话对象 类型 javax.servlet.http.HttpSession 作用域 Sessionapplication 应用程序对象 类型 javax.servlet.ServletContext 作用域 Applicationout 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Pageconfig 配置对象 类型 javax.servlet.ServletConfig 作用域 Pagepage 页面对象 类型 javax.lang.Object 作用域 Pageexception 例外对象 类型 javax.lang.Throwable 作用域 page
同样 来看一个例子:
这里有两个jsp页面,page01和page02。
jsp useBean 标签表示 创建一个由class属性指定的类的实例,然后把它绑定到其名字由id属性给出的变量上。
那这里我创建了4个字符串缓冲类的实例,他们的作用域分别是page, request, session,application。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><jsp:useBean id="pageVar" scope="page" class="java.lang.StringBuffer"/><jsp:useBean id="requestVar" scope="request" class="java.lang.StringBuffer"/><jsp:useBean id="sessionVar" scope="session" class="java.lang.StringBuffer"/><jsp:useBean id="applicationVar" scope="application" class="java.lang.StringBuffer"/><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP内置对象作用域</title></head><body><% pageVar.append("page01"); requestVar.append("page01"); sessionVar.append("page01"); applicationVar.append("page01");%><jsp:forward page="page02.jsp"/></body></html>
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><jsp:useBean id="pageVar" scope="page" class="java.lang.StringBuffer"/><jsp:useBean id="requestVar" scope="request" class="java.lang.StringBuffer"/><jsp:useBean id="sessionVar" scope="session" class="java.lang.StringBuffer"/><jsp:useBean id="applicationVar" scope="application" class="java.lang.StringBuffer"/><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP内置对象作用域</title></head><body>这里是page02,是从page1转来的<br/>name<% pageVar.append("page02"); requestVar.append("page02"); sessionVar.append("page02"); applicationVar.append("page02");%><h2>page</h2> = <%=pageVar.toString()%><br/><h2>request</h2> = <%=requestVar.toString()%><br/><h2>session</h2> = <%=sessionVar.toString()%><br/><h2>application</h2> = <%=applicationVar.toString()%><br/></body></html>
jsp forward 标签表示 当走到这里的时候,页面会跳转到page02.jsp。 这刚好就是一个会话的场景,
request作用域的变量只在当前请求的中有效,当前的请求就是从page01到page02的一次跳转。
所以它的值把page01和page02都显示出来了。
session作用域的变量为当前会话,也就是只要浏览器不关闭,page02能一直叠加到上去。
application 对所有应用有效,也就是只要这个应用启动着,都要叠加。
- 什么是jsp?jsp的内置对象有哪些?
- JSP内置对象有哪些
- jsp有哪些内置对象
- jsp的内置对象有哪些?有什么方法
- jsp的内置对象有哪些?有什么方法
- jsp的内置对象有哪些?有什么方法
- JSP都有哪些内置对象?
- JSP中有哪些内置对象?
- jsp内置对象有哪些?作用是什么
- JSP有哪些内置对象,功能是什么
- Jsp有哪些内置对象以及作用
- jsp中常用的内置对象有哪些?作用是什么?
- JSP的内置对象概述 什么是JSP的内置对象
- JSP的内置对象有哪些,作用是什么,方法有哪些
- Jsp分别有哪些内置对象,分别有什么作用?
- jsp有哪些内置对象?作用分别是什么?
- jsp有哪些内置对象?作用分别是什么?
- jsp有哪些内置对象?作用分别是什么?
- 观察者模式
- 音标学习--元音
- 【js】采用三种方式实现tab切换
- CodeForces
- 如何成为优秀JAVA工程师
- 什么是jsp?jsp的内置对象有哪些?
- OOM异常解析
- 初识AJAX
- Ubuntu命令
- HP-UX 11.23 11.31制作镜像
- 网络流24题-11
- oracle exists and not exists
- mongodb 之 模糊查询
- mysql存储过程查询结果循环遍历 判断 赋值 游标等基本操作