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内置对象无需创建,可以直接拉来使用

变量名真实类型作用
pageContentPageContent当前页面共享数据,还可以获取其他对象
requestHttpServletRequest一次请求访问多个资源(转发)
sessionHttpSession一次会话的多次请求间
applicationServletContext所有用户间共享数据
responseHttpServletResponse响应对象
pageObject当前页面(Servlet)对象,有点像this
outJspWriter输出对象,将数据输出到页面
configServletConfigServlet的配置对象
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语句,一般用于在表单中显示东西。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值