jsp文件执行过程
jsp文件会首先被Servlet翻译成一个**.java文件,然后被编译成一个.class**文件
jsp中的java代码片段
包括:
- java代码块
- 声明语句块
- 表达式块
jsp中的java语句块<% %>
jsp中的所有的语句块最终都会jsp翻译引擎被翻译到一个serivers方法中
在一个java的方法中,声明的变量前不能加权限控制符,不能有另一个方法在里边嵌套,不能有静态语句块,这些都是类中才能出现的东西
所以在jsp的语句块中,也不能出现这三者
jsp中的声明语句块<%! %>
jsp中的声明语句块最终会被翻译到Servlet类中,作为类中的成员变量、成员方法和静态代码块,service方法也是该类的方法,所以可以访问到声明中的变量,声明中的变量也可以加权限控制符
但是,由于Servlet是单例多线程的,所以在类里边声明可修改的成员变量会造成线程安全问题
jsp中的表达式块<%= %>
作用是将表达式中的内容显示到客户端,是一个表达式而不是语句,所以不能加“ ; ”
jsp中的四大域对象
page
session
request
application
jsp中的九大内置对象
不用定义就可以使用
pageContext对象
可以通过此对象的方法来获取其他八大内置对象
out对象
标准输出流,可以将信息输出到客户端界面上,输出格式为:out.writer(内容);
application对象
page对象
exception对象
其他内置对象
jsp中的指令
使用方法:
<%@ 指令名称 属性名=属性值 属性名=属性值 ·········% >
page指令
pageEncoding属性
指定字符编码集,默认相应文本为html,用法:
<%@ page pageEnconding=“utf-8”%>
contextType属性
指定字符编码集,指定相应文本,用法:
<%@ page contextType="text/html ; charset=utf-8 "%>
import属性
导入需要的包,多个包可以写多个page指令,也可以多个包用逗号隔开写在一个page中
errorPage属性
当页面发生错误时,跳转到指定页面,但是不糊显示错误信息
isErrorPage属性
在当前页面指定isErrorPage=“true”(默认为false),表示当前页面是一个错误处理页面,在语句块里用<%=exception.getMassage()%>可以输出错误信息
include指令
实现静态联编,生成一个.java文件
在使用include指令的部分,将该指令所包含的文件复制到使用该指令的位置,特别注意文件所在的位置与指令所在的位置相同。由此可知,两个文件可以共享变量,如果两个文件定义同名变量会报错
用途:对于一个包含许多页面或站点的网站,分为头部、底部、左侧边栏、右侧边栏等部分,可以使用include指令将各部分用到的的相同的文件包含进去,减少了工作量,使修改和维护变得容易
动作指令
<jsp:动作名称 属性名=属性值,属性名=属性值······></jsp:动作名称>
或
<jsp:动作名称 属性名=属性值,属性名=属性值······/>
forward
在标准输出流开启之前,forward页面的发起者不能开启标准输出流,本页面不能向标准输出流中输入数据
include
在标准输出流开启之后,include页面的发起者能开启标准输出流,本页面能向标准输出流中输入数据,
实现动态联编,生成两个.java文件
静态联编和动态联编的使用
在静态联编和动态联编均可以使用时,一般使用静态联编,因为在运行时只存在一个Servlet,对资源消耗较少,且不存在调用问题,执行效率较高
- 若在两个文件需要共享同一变量,此时只能使用静态联编
- 若在两个文件存在同名变量,且不能混淆,此时只能使用动态联编
路径问题
前台路径
出现在HTML页面、jsp页面的静态部分,路径前不加“/”
后台路径
出现在jsp页面动态部分、java代码、xml配置文件中,路径前加“/”