JSP文件最终会被容器编译为一个servlet类
JSP文件内的html代码会被编译成out.write()输出
<% java代码%>
<%=java表达式%>
<%! 声明属性或方法 %>
指令:
<%@ page import="包名,包名"%> 导包
<%@ page ContentType="text/html;charset=utf-8"%> 设置JSP源文件和响应正文的字符集编码及mime类型。
<%@ page pageEncoding="UTF-8"%> 设置JSP源文件本身和响应正文中的字符集编码。
<%@ page errorPage="***.jsp" %>用来指定一个异常处理页面,当页面发生异常则容器会调用该异常处理页面。
<%@ page isErrorPage="true" %>默认不写值为false,如果值为true,则可以使用exception隐含对象
<%@ page session="false" %>默认不写值为true,如果值为false,则servlet不再添加获得session对象的代码了,也就不能够使用session隐含对象了
<%@ include file="url" %> 插入JSP或HTML代码片段
<%@ taglib uri="必须与描述文件内uri值相同" prefix="c"> prefix:别名
隐含对象:
对象 |
描述 |
---|---|
request |
HttpServletRequest类的实例 |
response |
HttpServletResponse类的实例 |
out |
PrintWriter类的实例,用于把结果输出至网页上 |
session |
HttpSession类的实例 |
application |
ServletContext类的实例,与应用上下文有关 |
config |
ServletConfig类的实例 |
pageContext |
PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 |
page |
类似于Java类中的this关键字 |
Exception |
Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |
web.xml配置
<servlet>
<servlet-name>myjsp</servlet-name>
<jsp-file>/myjsp.jsp</jsp-file>
<!--此参数只能通过此配置访问才能或得到-->
<init-param>
<param-name>name</param-name>
<param-value>tom</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>myjsp</servlet-name>
<url-pattern>/myjsp</url-pattern>
</servlet-mapping>
pageContext:
容器会为每一个jsp实例创建唯一的一个符合pageContext接口要求的实例对象,该对象一般称之为页面上下文。
页面上下文有两个特点:
唯一性:一个jsp实例对应一个pageContext
持久性:只要jsp实例还在pageContext就一直存在
excepiton:
对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。
使用exception对象需要在产生异常的页面添加<%@ page errorPage="***.jsp" %>指令来指定一个处理异常的页面,
该处理异常页面需要添加<%@ page isErrorPage="true" %>指令才能使用exception隐含对象
注释:
<!-- 注释内容 --> 被注释的内容如果是java代码,java代码会执行。
<%-- 注释内容 --%>被注释的内容如果是java代码,java代码不会执行。
el表达式:
el表达式是一套简单的运算规则,用于给jsp标签的属性来赋值,也可以脱离jsp标签,直接使用。
使用el表达式读取Javabean的属性
方法一:${user.username}
方法二:${user['username']} 等价于${user.username},另外,[]里面可以出现绑订名,比如${user[s1]}。[]里面还可以出现从0开始的下标,用于访问数组中的指定下标的某个元素。
执行过程:默认情况下容器会依次从pageContext-->request-->session-->application中查找绑订名为"user"的对象,找到之后,调用该对象的"getUsername"方法。可以通过pageScope、requestScope、sessionScope、applicationScope来指定查找的范围。比如:${pageScope.user.username}
优点:会将null转换成""空字符串输出。如果依据绑订名找不到对应的对象,不会报空指针异常(会输出"")。
算术运算符:+ - * / % 这里 “+” 只能求和 若是字符串相加 servlet会将其先转换成数值再进行相加,若不能被转换则抛出异常
关系运算符 逻辑运算符与Java相同
empty运算符 用于判断集合内容是否为空,或者一个字符串是否内容为空。
读取请求参数值:
${param.username} 等价于 request.getParameter("username");
${paramValues.city} 等价于 request.getParameterValues("city");
标签:
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
jstl的使用
1.导入jstl相关的jar包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2.使用taglib指令引入使用的标签:
uri:jstl的jar包内META-INF文件夹下c.tld文件内<uri>的值;prefix:别名
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3.使用:<c:if test="true">test属性为true则执行标签体内的内容,test属性值可以用el表达式<c:if>
自定义标签:
1.写一个java类继承SimpleTagSupport,标签有哪些属性,标签类也要有相应的属性,属性名要相同,并且提供set方法
2.重写doTag方法,添加响应的处理逻辑,通过继承自SimpleTagSupport类提供的方法来获得PageContext,PageContext提供获得其它所有隐含对象的方法。
3.添加描述标签,在标签描述文件(即.tld文件)中,描述该标签。
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.1</tlib-version>
<short-name>c1</short-name>
<uri>http://tedu.cn/tag</uri>
<tag>
<name>hello</name>
<tag-class>tag.HelloTag</tag-class>
<!--
body-content用来告诉容器,标签有无标签体,如果有标签体,内容是什么
empty:该标签没有标签体
scriptless:该标签有标签体,但是,标签体的内容不能够出现java代码
JSP:该标签有标签体,并且标签体里面可以出现java代码。只有复杂标签技术才支持该值,简单标签技术只支持empty和scriptless。
-->
<body-content>empty</body-content>
<attribute>
<name>info</name>
<!--
如果值为true,表示该属性必选,如果值为false,表示该属性可选。
-->
<required>true</required>
<!--
如果值为true,表示该属性可以动态赋值(比如可以使用el表达式来赋值)
-->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>qty</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>