JSP(Java Server Pages):jsp技术允许在页面中编写java代码,并且允许开发人员在页面中获取request、response等web开发常用对象,实现与浏览器的交互,所以,jsp也是一种动态web资源的开发技术。
JSP最佳实践:
Servlet作为web应用的控制组件来使用,而把JSP技术作为数据显示模版来使用;
让JSP既用java代码产生动态数据,又做美化会导致页面难以维护;
让Servlet既产生数据,又在里面嵌套html代码美化数据,会导致程序可读性差,难以维护;
因而让Servlet只负责响应请求产生数据,并把数据通过转发技术带给JSP,JSP负责数据的显示。
JSP指令是为JSP引擎而设计的,并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分,在JSP2.0规范中共定义了三个指令:page指令、Include指令、taglib指令。
JSP指令的基本语法格式:<%@指令属性名=“值”%>
举例: <%@ page contentType=”text/html;charset=gb2312”%>
Include指令:用于引入其他JSP页面,如果使用include指令引入了其他JSP页面,那么JSP引擎将把这两个JSP翻译成一个Servlet,所以,include指令引入通常也称之为静态引入。
语法:<%@ include file=”relativeURL”%>
Taglib指令:用于在JSP页面中导入标签库。
JSP的运行原理和九大隐式对象:
每个JSP页面在第一次被访问时,web容器都会把请求交给JSP引擎去处理,JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet),然后按照Servlet的调用方式进行调用。
九大隐式对象:Request、Response、Session、Application、Config、Page、Out、Exception、pageContext
pageContext对象:是JSP技术中最重要的一个对象,它代表JSP页面的运行环境
这个对象不仅封装了对其它8大隐式对象的引用,自身还是一个域对象,并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
重要方法:findAttribute();
JSP标签:也称之为Jsp Action(JSP动作)元素,它用在Jsp页面中提供业务逻辑功能,避免在Jsp页面中直接编写java代码,造成jsp页面难以维护。
常用标签:<jsp:include>、<jsp:forward>、<jsp:param>
动态包含:<jsp:include page=”/1.jsp”></jsp:include>------%@pageContext.include( )%
带数据:<jsp:param name=”username” value=”XXXX”/>
当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其他资源时,可以使用<jsp:param>标签向这个资源传递参数。
<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值,在<jsp:include>和<jsp:forward>标签中可以使用多个<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>
如何查找JSP页面中的错误:
1、 JSP页面中的JSP语法格式有问题,导致其不能被编译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息;
2、 JSP页面中的JSP语法格式没有问题,但被翻译成的Servlet源文件中出现了java语法问题,导致JSP页面翻译成的Servlet源文件不能通过编译,JSP引擎也将提示这类错误在JSP页面中的位置(行和列)以及相关信息;
3、 JSP页面中翻译成的Servlet程序在运行时出现异常,这与普通java程序的运行时错误完全一样,java虚拟机将提示错误发生在Servlet源文件中的位置(行和列)以及相关信息。
Web开发的4个域对象:pageContext(称之为page域)、request(称之为request域)
session(称之为session域)、servletContext(称之为application域)