1. <jsp:forward>标签的常用用法
用MVC模式编写的程序,客户端传过来的请求要先交给处理器servlet处理,但是一个web应用的首页不能是servlet,因为在配置文件中,欢迎页不能设置成servlet,这时就需要用到jsp了,用jsp的<jsp:forward>的标签跳转到相应的servlet处理。
2.JSP运行原理和九大隐式对象
l 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。
l 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。
l JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。
l 这9个对象分别是哪些,以及作用也是笔试经常考察的知识点。
简记为:rrppasoce
分别是: Request、Response、Session、Application、Config、Page、Exception、Out、pageContext
3. out隐式对象
l out隐式对象用于向客户端发送文本数据。
l out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
l JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
l 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
ü 设置page指令的buffer属性关闭了out对象的缓存功能
ü out对象的缓冲区已满
ü 整个JSP页面结束
l 同时使用out和response.getwriter()输出数据。
4. pageContext对象
l pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
l 通过pageContext获得其他对象
l getException方法返回exception隐式对象
l getPage方法返回page隐式对象
l getRequest方法返回request隐式对象
l getResponse方法返回response隐式对象
l getServletConfig方法返回config隐式对象
l getServletContext方法返回application隐式对象
l getSession方法返回session隐式对象
l getOut方法返回out隐式对象
5. pageContext作为域对象
l pageContext对象的方法
ü public voidsetAttribute
(java.lang.String name,java.lang.Object value)
ü public java.lang.Object getAttribute
(java.lang.String name)
ü public void removeAttribute
(java.lang.String name)
l pageContext对象中还封装了访问其它域的方法
ü publicjava.lang.Object getAttribute
(java.lang.String name,int scope)
ü publicvoid setAttribute(java.lang.String name,
java.lang.Object value,int scope)
ü publicvoid removeAttribute(
java.lang.String name,int scope)
l 代表各个域的常量
ü PageContext.APPLICATION_SCOPE
ü PageContext.SESSION_SCOPE
ü PageContext.REQUEST_SCOPE
ü PageContext.PAGE_SCOPE
l findAttribute方法 (*重点,查找各个域中的属性)
l 引入和跳转到其他资源
PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法.方法接收的资源如果以“/”开头, “/”代表当前web应用。
6.JSP标签
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
JSP常用标签
l <jsp:include>标签 插入功能
l <jsp:forward>标签 跳转
l <jsp:param>标签 设置获取属性
7. <jsp:include>标签
<jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。语法:
<jsp:includepage="url | <%=expression%>" flush="true|false" />
ü page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。
ü flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。
<jsp:include>与include指令、include()方法的比较
l <jsp:include>标签和include()方法是动态引入, <jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。
l 而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。
l 不管是<jsp:include>标签,还是include指令,它们都会把两个JSP页面内容合并输出,所以这两个页面不要出现重复的HTML全局架构标签,否则输出给客户端的内容将会是一个格式混乱的HTML文档。
8. <jsp:forward>标签
l <jsp:forward>标签用于把请求转发给另外一个资源。语法:
<jsp:forwardpage="relativeURL | <%=expression%>" />
page属性用于指定请求转发到的资源的相对路径(可以是绝对路径),它也可以通过执行一个表达式来获得。
<jsp:param>标签
l 当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。
l 语法1:
<jsp:includepage="relativeURL | <%=expression%>">
<jsp:paramname="parameterName" value="parameterValue|<%= expression%>" />
</jsp:include>
l 语法2:
<jsp:forwardpage="relativeURL | <%=expression%>">
<jsp:paramname="parameterName" value="parameterValue|<%= expression%>" />
</jsp:include>
l <jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。<jsp:param>标签不能单独使用,必须跟上面两种标签的一种一起用。
映射JSP
<servlet>
<servlet-name>SimpleJspServlet</servlet-name>
<jsp-file>/jsp/simple.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
……
<servlet-mapping>
<servlet-name>SimpleJspServlet</servlet-name>
<url-pattern>/xxx/yyy.html</url-pattern>
</servlet-mapping>
9. 如何查找JSP页面中的错误
l JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。
l JSP页面中的JSP语法格式没有问题,但被翻译成的Servlet源文件中出现了Java语法问题,导致JSP页面翻译成的Servlet源文件不能通过编译,JSP引擎也将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。
l JSP页面翻译成的Servlet程序在运行时出现异常,这与普通Java程序的运行时错误完全一样,Java虚拟机将提示错误发生在Servlet源文件中的位置(行和列)以及相关信息。
l 到此为止,web开发接触到了4个域对象,这4个域对象是学习web的重点,也是笔试经常考察的知识点
l pageContext(称之为page域)
l request(称之为request域)
l session(称之为session域)
l servletContext(称之为application域)