一.概述
1.1 jsp
JSP页面由HTML和嵌入其中的Java代码构成的。当客户端通过页面发
送请求时,服务器端就会对页面中嵌入的Java代码进行编译处理,然后生成HTML页面重新返回给客户端进行显示。
可以把执行JSP页面的执行分成两个阶段,一个是转译阶段,一个是请求阶段。
转译阶段:JSP页面转换成Servlet类。
请求阶段:Servlet类执行,将响应结果发送至客户端。
1.2 jsp的声明语句
JSP声明语句以<%!开始,以%>结束,其语法格式为:<%! 声明语句 %>:使用声明语句声明的变量为全局变量,也就是说,当有多个用户在执行此JSP页面时,将共享该变量。
JSP表达式以<%=开始,以%>结束,其语法格式为:<%= Java代码 %>。JSP表达式中的代码会首先执行,然后转换成字符串并显示到网页上。
JSP注释使用<%- -作为开始,以--%>作为结束,中间包含的代码即为注释部分。
1.3 jsp的指令
<%@ page contentType="text/html;charset=ISO-8859-1"%>:contentType属性用来指定该JSP文件的MIME格式,以及网页编码格式。
<%@ page pageEncoding=” ISO-8859-1”%>:pageEncoding属性用来指定网页的编码格式。
include指令用于在JSP文件中插入一个包含文本或代码的文件,在转换成Servlet时将指定的文件和当前的文件进行合并。
<jsp:include flush="true" page="hello.jsp"></jsp:include> |
—熟练使用<jsp:include>动作元素来包含文件。
—熟练使用<jsp:forward>动作元素来实现页面跳转。
—熟练使用<jsp:param>动作元素来传递参数。
—了解使用<jsp: plugin >动作元素来执行Applet。
taglib指令用来声明此JSP文件使用了自定义标签。
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
1.4 jsp的9大内置对象
1.page范围,就是指设置的属性只在当前页面有效。通过使用pageContext的setAttribute()方法来设置属性,并通过pageContext的getAttribute()方法来取得属性
2.request范围
所谓request范围,就是指属性在一次请求范围内有效。如果跳转是指客户端跳转,页面从一个页面跳转到另一个页面,那么该属性就失效了。比如客户单击超链接跳转到其他页面,或者通过浏览器地址栏浏览其他网页。如果使用服务器端跳转<jsp:forward>,则该属性仍然有效。通过使用request的setAttribute()方法来设置属性,并通过request的getAttribute()方法来取得属性。
3.response对象用来给客户端传送输出信息。
4.out对象用来向网页输出信息。
5.session对象用来表示用户的会话状况,一般用于保存用户的各种信息,直到生命周期超时或者被认为释放掉为止。
6.application对象用来取得和设置Servlet的相关信息。application对象的生命周期是从服务器启动产生直到服务器关闭为止,在此期间所有的用户会共享这一个Application对象。该对象只可以由服务器来创建和清除,而用户不可以对其进行创建和清除操作。
7.pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。
8.config 对象是javax.servlet.ServletConfig类的实例对象。主要作用是取得服务器的配置信息。
9.exception 对象的作用是显示异常信息,只有在包含 isERRORPage=”true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。
1.5 客户端跳转和服务端跳转
在Servlet中实现页面的跳转有两种方式:请求转发和重定向
1.5.1 请求转发
1.由服务器端进行的页面跳转,叫请求转发
转发的特点:地址栏不发生变化,显示的是上一个页面的地址
请求次数:只有1次请求
根目录: http://localhost:8080/项目地址/,包含了项目的访问地址,请求域中数据不会丢失
使用的方法:request.getRequestDispatcher("/地址").forward(request, response);
1.5.2 重定向
由浏览器端进行的页面跳转:称之为重定向
重定向的特点
地址栏:显示新的地址
请求次数:2次
根目录:http://localhost:8080/ 没有项目的名字
请求域中的数据会丢失,因为是2次请求