JSP学习小结

零、什么是JSP

JSP全称为Java Server Pages,即Java服务器页面。它是一个特殊的页面,其中既可以指定定义html标签,又可以定义Java代码(它有一个极大的好处就是简化书写)。本质上它是一个Servlet。

一、JSP执行过程

  1. 将xxx.jsp转译为xxx_jsp.java
  2. xxx_jsp.java位于tomcat中的Catalina的文件下
  3. xxx_jsp.java是一个servlet
  4. 把xxx_jsp.java编译为xxx_jsp.class,由字节码提供访问
  5. 执行xxx_jsp,生成html
  6. 通过http协议把html响应返回给浏览器

二、JSP的组成

1、静态内容:HTML、CSS、JavaScript等。
2、指令(用于配置JSP页面,导入资源文件):格式为<%@ 指令名 属性名1=属性值1 属性名2=属性值2 …%>

指令:
1、page:用与配置JSP页面。
contentType属性:等同于respons.setContentType(String type) 它可用来设置响应体的mime类型以及字符集
import属性:用来导包
errorPage属性:当前页面发生异常后会自动跳转到指定的错误页面
isErrorPage属性:标识当前页面是否是错误页面,如果标识为true,就可以使用内置对象exception
2、include:页面包含的,导入页面的资源文件
3、taglib:导入资源(自定义输入一个前缀,然后给前缀加一个冒号就可以引入一些标签)

3、表达式:<%=…%>用于输出一段html。
4、Scriptlet:在<%…%>之间,可以写任何Java代码。
5、声明:在<%!..%>可以声明字段或者方法,但是一般不建议这么做。
6、动作:例如<jsp:include page=“filename”> 在jsp页面中包含另一个页面。
7、注释:<%-- --%>注释所有代码。而html的注释只能注释html部分。

三、JSP内置对象

JSP内置对象无需创建,可以直接拉来使用

变量名 真实类型 作用
pageContent PageContent 当前页面共享数据,还可以获取其他对象
request HttpServletRequest 一次请求访问多个资源(转发)
session HttpSession 一次会话的多次请求间
application ServletContext 所有用户间共享数据
response HttpServletResponse 响应对象
page Object 当前页面(Servlet)对象,有点像this
out JspWriter 输出对象,将数据输出到页面
config ServletConfig Servlet的配置对象
exception(isError为true才有) Throwable 异常对象

四、上面提到的在一个JSP页面中包含另一个,怎么实现呢?

在一个jsp页面中包含另一个页面有两种方式,一是指令include,二是动作include。
两者都能实现包含,但实际上区别还是很大:如果我们采用指令include的方法,beibaohan.jsp的内容会被插到baohan.jsp转移成的baohan_jsp.java文件中,最后只会生成一个baohan_jsp.java;而我们使用动作的话,beibaohan.jsp不会被插入到baohan.jsp转译成的baohan_jsp.java文件中,而是会生成一个独立的beibaohan_jsp.java,baohan_jsp.java会在服务端访问beibaohan_jsp.java,然后把返回的结果嵌入到响应中。
正是因为这种特性,指令include会导致两个jsp合并成同一个java文件,所以不存在传参的问题,在baohan.jsp中定义的变量可以直接在beibaohan.jsp中访问;而动作则是对beibaohan.jsp进行了一次独立的访问,那么就有传参的需要:如果在baohan.jsp中定义了变量,在filename.jsp中则需要用request.getPatameter(“name”)来取出参数

五、EL表达式

EL表达式就是一种表达式语言,用于替换和简化jsp页面中Java代码的编写。它的语法为:${表达式} 。其中,jsp默认是支持el表达式的,如果要忽略,我们可以在配置中写一个isELIgnored="true,或者在EL表达式前面加一个\
EL表达式的作用:
1、进行运算,它支持算术运算符、比较运算符、逻辑运算符、空运算符(empty:功能比较强大,它可以判断字符串、集合、数组对象是否为null且是否为0;not empty str:用于判断字符串、集合、数组对象是否不为null或者长度不为0)
2、 获取值:
${域名称.键名}:从指定域中获取指定键的值,例如我们如果在request域中存储了一个name=huanghe,那么我们应该${requestScope.name},如果这个.后面的键名没有对应的值,那么界面上什么也不显示。
${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。ps:顺序从小到大应该为(pageScope,requestScope,sessionScope,applicationScope)
③获取对象${域名称.键名.属性名}、List集合${域名称.键名[索引]}、Map集合${域对象.键名.key名称} 或 ${域名称.键名["key名称"]}
3、使用隐式对象:
九个隐式对象以及作用域:

  • request:提供了获取包括表单数据,Cookie,HTTP方法等HTTP头信息的方法。在当前请求中有效。
  • response:定义了处理创建新HTTP头的接口。通过此对象,JSP程序员可以添加新的Cookie或日期戳,HTTP状态代码等。在当前页面有效。
  • out:用于在响应中发送内容。在当前页面有效。
  • session:用于跟踪客户端请求之间的客户端会话。在当前会话有效
  • pageContext:用于表示整个JSP页面。在当前页面有效。
  • application:添加属性值,可以确保组成Web应用程序的所有JSP文件都可以访问它。在所有应用程序中有效。
  • config:是生成的servlet的ServletConfig对象周围的直接包装。在当前页面有效。
  • page:对该页面实例的实际引用,可以认为它是表示整个JSP页面的对象,类似与this。在当前页面有效。
  • exception:是一个包含上一页抛出的异常的包装器。它通常用于生成对错误条件的适当响应。在当前页面有效。

六、JSTL标签

JSTL的全称是JavaServer Page Tag Library,即JSP标准标签库,是由Apache组织提供的开源的免费的JSP标签。它与EL表达式一样,是用来替换和简化JSP页面上的Java代码的。
我们在使用前,应该遵循以下步骤:

  1. 导入JSTL相关的jar包
  2. 引入标签库:taglib指令:<$@ taglib="c" ...%>
  3. 使用标签即可

我们一般开发最常用的就是if、choose和foreach:

  1. if:相当于Java代码的if语句,里面有个test为必须属性(true和false),接受boolean表达式,如果表达式为true,则显示if标签体内容,如果为false则不显示,一般情况下test属性值会结合el表达式一起使用。
  2. choose:相当于Java代码的switch语句,声明的时候就相当于switch,使用when标签做判断相当于case,使用otherwise标签做判断相当于case。
  3. foreach:相当于Java里的加强for语句,一般用于在表单中显示东西。

猜你喜欢

转载自blog.csdn.net/laobanhuanghe/article/details/102882366