一、概述
- JSP原理:JSP就是Servlet。
- JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
- 为什么JSP技术也是一种动态web资源的开发技术?
- 因为JSP技术允许在页面中嵌套java代码,以产生动态数据,并且web服务器在执行jsp时,web服务器会传递web开发相关的对象给jsp,jsp通过这些对象,可以与浏览器进行交互,所以jsp当然也是一种动态web资源开发技术
- 一个浏览器访问网页,这些网页有可能是一个html页面(即静态web资源),也有可能是一个动态web资源(即servlet或jsp程序输出的)。
二、问题
- 一定要记住JSP中的东东会出现在Servlet的什么地方?
- JSP中的java脚本出现在Tomcat的work目录下,包含一个servlet文件和一个编译好的类文件。
- IE浏览器访问JSP页面时,Web服务器是如何调用并执行一个jsp页面的?
- 通过调用Servlet
- Web服务器在执行jsp页面时,是如何把Jsp页面中的html排版标签发送到客户端的?
- 通过JspWriter一行一行写出去。
- Jsp页面中的java代码服务器是如何执行的?
- Jsp页面中的java代码直接放入对应的servlet中去
- Web服务器在调用jsp时,会给jsp提供一些什么java对象?
- request和response,jsp中的java代码全包含在它对应的servlet中的service方法中。
- 人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。
- 缺点:
- 其原因为,程序的数据通常要美化后再输出:
- 让JSP既用java代码产生动态数据,又做美化会导致页面难以维护。
- 让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
- 结论:
- 因此最好的办法就是根据这两门技术的特点,让它们各自负责各得,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。
- 模板元素:JSP页面中的HTML内容。
- JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。
- JSP脚本表达式
- JSP脚本表达式(expression)用于将程序数据输出到客户端
- 语法:<%= 变量或表达式 %>
- “java表达式”会原封不动的出现在JSP对应的Servlet的service方法中的out.print(java表达式);参数中
- JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端。
- java表达式后面不能有分号。
- JSP脚本片段
- 作用:在JSP中嵌入多行java代码。
- 语法:
- <%
- 多行java代码
- %>
- 多行java代码,会原封不动地出现在对应Serlvet的service方法中。
- JSP声明
- 作用:定义成员。
- 语法:<%! 你的成员%>
- 声明代码会出现在对应的类中。
- JSP中注释
- 语法:<%--这是注释--%>
- 作用:给JSP引擎用的(Tomcat)。不产生任何输出。
- 语法:<%@ 指令名称 指令属性1="值1" ...%>
- page指令
- 属性:
- language:指示使用脚本语言。默认是java,目前只支持java。
- extends:指示JSP对应的Servlet的父类是谁。不要修改。
- *import:导入JSP中的java脚本中用到的类。
- *session:指示当前页面支不支持会话(拿不到HttpSession对象的引用session)。默认值是true。可选值true|false.
- buffer:字符输出流的缓存。默认值是8Kb。可选值none|8Kb|sizeKb
- autoFlush:自动刷新缓存。
- isThreadSafe:指示JSP对应的Servlet是否实现SingleThreadModel这个废物。false是实现,true是不安全的。默认是true。
- *errorPage:(转发技术)指示提示错误的页面的路径。如果以"/"开头表示绝对路径。
- 配置全局错误提示页面:
- web.xml
- <error-page>
- <exception-type>java.lang.Exception</exception-type>
- <location>/error.jsp</location>
- </error-page>
- <error-page>
- <error-code>404</error-code>
- <location>/404.jsp</location>
- </error-page>
- *isErrorPage:指示是否产生exception对象的引用。true|false.默认值是false
- *contentType:response.setContentType("text/html;charset=UTF-8");
- *pageEncoding:指示翻译JSP时查的码表。比 contentType更强大
- include指令:(能用静态不用动态)
- 属性:file,目标资源的路径。如果以"/"开头表示绝对路径。
- 静态包含:include指令就是静态包含。
- 动态包含:<jsp:include page=""/>
- taglib指令
- 作用:引入外部的标签
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
- page指令