JSP回顾

1、JSP调用
实际在调用时,还是调用的Servlet,写好的JSP会翻译成对应的Servlet,路径在Tomcat的work目录下: ApacheSoftwareFoundation\Tomcat6.0\work\Catalina\localhost\azhesh\org\apache\jsp
2、JSP引擎
把Jsp翻译成Servlet的程序叫做Jsp引擎,默认编码ISO8859-1。
3、JSP编码
pageEncoding="characterSet",是通知服务器端(即Servlet引擎)以什么码表解析JSP。
contentType="charset=ISO-8859-1" 设置response编码,控制浏览器以什么方式解析打开。
如果jsp在文本编辑下,需要注意保存文件的编码方式和pageEncoding要一致。但是在eclipse下不需要,因为eclipse会智 能地按照pageEncoding设置的方式保存文件。如果jsp里面没有设置contentType中的编码方式,那么服务器在生成 response时,response默认以这个码表设置的。
4、JSP脚本表达式
用于将程序数据输出到客户端 语法:<%=变量或表达式 %>
JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端。所以往前 台输出有两种方式,另外一种就是手写的out.print("");JSP脚本表达式中的变量或表达式后面不能有分号(;)
5、JSP脚本片段
<%多行Java代码%>JSP脚本片断中只能出现java代码,不能出现其它模板元素,JSP引擎在翻译JSP页面中,会将JSP脚本片 断中的Java代码将被原封不动地放到Servlet的_jspService方法中,片断中的Java代码必须严格遵循Java语法(JSP页面中 的HTML内容称之为JSP模版元素)单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完 整的Java语句
6、JSP声明
JSP页面中编写的所有代码,默认会翻译到servlet的service方法中,而Jsp声明中的java代码被翻译到_jspService方法的 外面。语法:<%!  java代码%>
多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。
JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。 
7、JSP指令
JSP指令是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分
•page      <%@指令属性名="值"%><%@page contentType="text/html;charset=gb2312" import="java.util.Date"%>
•Include   <%@include file="relativeURL"%>,其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代   表当前web应用。静态引入其它JSP页面,JSP引擎将把这两个JSP翻译成一个servlet。
动态包含:运行时包含,生成多个Servlet
Servlet<% request.getRequestDispatcher("/test.jsp").include(request,response) %>
<jsp:include page=""></jsp:include>
<%pageContext.include("a.jsp");%>
•taglib    taglib指令用于在JSP页面中导入标签库
8、JSP案列
关于JSP中页面刷新后一会儿好一会坏:这种情况,必须是第一次加载是好的JSP,此时对应的Servlet也是OK的后来改动了 JSP,有错误,此时无法翻译成Servlet,但是文件中还是存在以前好的Servlet。改动后刷新自然报错,间隔一段时间刷 新,还是报错。但是如果间隔时间很短,Servlet引擎有一个机制:因为相隔时间很短,JSP引擎会认为刚刚翻译过,就直 接从文件中拿,此时拿的自然是好的。但是隔得久就会重新翻译,就会报错。此时就会出现时错时对的情况。
9、九大隐式对象
Request,Response,Session,Application(servletContext),
Config(servletConfig),Page(this),Exception,Out(jspWriter),pageContext
10、JSP调用时间
每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一 个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。由于JSP第一次访问时会翻译成 servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所 以程序的执行效率不会受到影响。
11、JSP常用标签:
<jsp:include page="relativeURL | <%=expression%>">
  <jsp:param name="parameterName" value="parameterValue|<%= expression %>"/>
  </jsp:include>
<jsp:forward page="relativeURL | <%=expression%>">
  <jsp:param name="parameterName" value="parameterValue|<%= expression %>"/>
  </jsp:include>
<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以 使用多个<jsp:param>标签来传递多个参数。 
12、Servlet中配置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>
13、out隐式对象
out隐式对象用于向客户端发送文本数据。
out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的 PrintWriter对象非常相似。JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的 PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
但是只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通 过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
设置page指令的buffer属性关闭了out对象的缓存功能;out对象的缓冲区已满;整个JSP页面结束;
避免同时使用out或是页面上直接输数据和response.getwriter()输出数据。顺序有问题另外JSP页面上直接输入的数据, 翻译成Servlet后,也是out.print();注意。
14、pageContext对象 
pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的 引用(用在自定义标签的开发中),它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常 涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
getException方法返回exception隐式对象
getPage方法返回page隐式对象
getRequest方法返回request隐式对象
getResponse方法返回response隐式对象
getServletConfig方法返回config隐式对象
getServletContext方法返回application隐式对象
getSession方法返回session隐式对象
getOut方法返回out隐式对象
pageContext封装其它8大内置对象的意义
PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法 和include方法。方法接收的资源如果以“/”开头, “/”代表当前web应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值