您的位置:首页 > Web前端 > JavaScript

JSP回顾

2015-12-25 22:43 323 查看
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应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: