Java jsp

一,JSP

1.1 概念

jsp:java server pages,java 服务器页面

jsp是一种可以在html页面中嵌入java代码的的页面,以.jsp结尾

作用:简化java代码的书写

jsp的本质是一个Servlet,jsp页面在编写代码后第一次被访问时编译执行

一个jsp页面被编译的过程:test.jsp->test_jsp.java->test_jsp.class

test.jsp的文件被翻译成了test_jsp.java,这个继承了HttpJspBase,HttpJspBase继承了HttpServlet

1.2 jsp的语法

jsp中编写java代码的格式:

  1. <%= java代码 %>
    java代码在service()方法的out.print()方法的参数中
  2. <% java代码 %>
    java代码在service()方法中
  3. <%! java 代码%>
    java代码在jsp转换成servlet的成员位置

jsp的注释:

  1. <%-- --%>

java的注释:

  1. //

  2. /* */

  3. /** */

html的注释:

  1. <!-- -->

css的注释:

  1. /* */

js的注释:

  1. //

  2. /* */

1.3 jsp的内置对象

在jsp中由tomcat服务器创建,不需要手动创建,可以直接使用的对象(9个)

内置对象所属的类作用
**requestHttpServletRequest获取提交的参数、共享数据、请求转发
**responseHttpServletResponse重定向,设置Cookie
**sessionHttpSession共享数据
**applicationServletContext共享数据、获取绝对路径
pageObject就是当前Servlet的对象
*pageContextPageContext获取其它八个内置对象,域对象
outJspWriter向页面输出内容
configServletConfig
*exceptionThrowable处理异常

注:

  1. response向页面输出的优先级高于out的输出,原因是response和out输出的内容都先输出到缓冲区中,而response的缓冲区优先被访问,所以使用response输出一定在out输出之前

  2. exception这个内置对象的使用前提,是当前jsp的配置指令中配置了isErrorPage="true"

1.4 jsp的指令

jsp指令的格式:

<%@ 指令名称 属性名=属性值 属性名=属性值 ... %>

1.4.1 page指令

用于配置当前jsp页面

格式:

<%@ page 属性名=属性值 属性名=属性值 ... %>

常用属性:

  1. language

  2. contentType:配置当前jsp页面响应给客户端时指定的编码格式

  3. import:导包

  4. session:配置当前页面是否可以使用session内置对象,默认值是true

  5. errorPage:用于配置如果当前页面发生了异常,跳转到哪个指定页面

  6. isErrorPage:当页面发生异常后跳转到的指定页面可以配置isErrorPage来明确当前页面是否可以使用内置对象exception,默认值是false,只有值是true时,才能使用exception内置对象

  7. isELIgnored:每一个jsp页面都默认具有解析el表达式的能力,true表示忽略当前页面中所有el表达式,false不忽略

1.4.2 include指令

在当前页面中嵌入其他页面

格式:

<%@ include file="页面资源的路径" %>

1.4.3 taglib指令

用于引入标签库

jstl:jsp standard tag library,jsp标准标签库

二,EL

2.1 概念和基本语法

EL:Expression Language,表达式语言

作用:简化jsp中的java代码,用于获取数据

语法格式:

${ 表达式 }

注:

  1. jsp默认支持EL

  2. EL表达式的结果如果是null对象,则显示空字符串

  3. 忽略EL表达式

    1. 忽略整个页面的EL表达式,在jsp的page指令中配置isELIgnored="true"

    2. 忽略指定的一条EL语句

      \${name}

2.2 EL的运算符

.:访问属性和方法

[]:访问数组、集合

+、-、*、/(div)、%(mod)

==(eq)、!=(ne)、>(gt)、<(lt)、>=(ge)、<=(le)

&&(and)、||(or)、!(not)

empty:判断容器对象是否为空或者内容是否为空

2.3 EL的隐式对象

  1. pageScope

  2. requestScope

  3. sessionScope

  4. applicationScope

  5. param

  6. paramValues

  7. header

  8. headerValues

  9. initParam

  10. cookie

  11. pageContext

2.3.1 获取域对象中的数据

  1. pageScope

  2. requestScope

  3. sessionScope

  4. applicationScope

语法格式:

${ 域对象的名称.键 }

注:在获取域对象中值的时候,可以简化成${键},会根据从小到大的范围查找,一旦找到了就返回结果不再继续查找,pageScope < requestScope < sessionScope < applicationScope

获取域对象中对象的属性值:

语法格式:

${ 域对象的名称.键.属性名 }

注:获取属性值本质上是在调用对象的getXxx()方法,getXxx()方法必须有返回值。当我们调用属性名时,系统会判断当前对象的类中是否有getXxx()方法将get去掉,剩下的首字母变小写与这个属性名是一致的,如果有就调用该对象的getXxx()方法并获取返回值

获取域对象中List集合中对象的属性:

${ 域对象的名称.键[索引] }:获取集合中指定索引的对象
${ 域对象的名称.键[索引].属性名 }:获取集合中指定索引的对象的指定属性值

获取域对象中Map集合中对象的属性:

  1. 获取集合中的值

    ${ 域对象的名称.键["Map中的键"] }
    ${ 域对象的名称.键.Map中的键 }
  2. 获取集合中值的属性

    ${ 域对象的名称.键["Map中的键"].属性名 }
    ${ 域对象的名称.键.Map中的键.属性名 }

2.3.2 获取请求参数

  1. param

    ${ param.键 }
  2. paramValues

    ${ paramValues.键 }:获取数组,需要${ paramValues.键[索引] }来获取数组中的某个元素

2.3.3 获取请求头中的参数

  1. header

    ${ header.键 }
    ${ header["键"]}
  2. headerValues

    ${ headerValues.键 }
    ${ headerValues["键"]}

2.3.4 获取cookie中的参数

  1. cookie

    ${ cookie.键}
    例如:${ cookie.age}:获取键为age的Cookie对象
    ${ cookie.键.value}:获取指定Cookie对象的value值

2.3.5 获取全局初始化参数

  1. initParam

    ${ initParam.键 }

2.3.6 pageContext

  1. 获取其他8个内置对象

${ pageContext.request}
${ pageContext.out}
${ pageContext.session }
...
  1. 常用于获取虚拟路径

    ${ pageContext.request.contextPath}

三,JSTL

3.1 概念

jstl:jsp standard tag library,jsp标准标签库

它由Apache组织提供的开源免费的jsp标签库

作用:简化jsp中的java代码,提供了对el结果的流程控制

注:jstl的使用要结合el

准备工作:

  1. 必须先引入jstl的依赖

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
  1. 配置jsp页面中的taglib

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3.2 if 标签

<c:if test=""></c:if>

if标签有一个必需的属性test

test属性用于接收条件表达式,表达式的结果为true,执行标签体内的代码,false,则不执行

注:c:if标签没有对应的else标签,如果需要定义与if对立的else情况,需要重新定义一个c:if

<c:if test="${u == null}">
 <a href="/login.jsp">登录</a>
 <a href="">注册</a>
</c:if>
<c:if test="${ u!=null}">
 欢迎,<a href="/home.jsp">${u.username}</a>
 <a href="/exit">退出</a>
</c:if>

3.3 choose 标签

<c:choose>
    <c:when test=""></c:when>
    <c:when test=""></c:when>
    <c:when test=""></c:when>
    <c:when test=""></c:when>
    <c:otherwise></c:otherwise>
</c:choose>

when标签用于根据test这个必需的属性来判断是否执行when标签体内的内容,test为true执行,反之,不执行;

如果多个when中的test的结果为true,则执行第一个test结果为true的;

如果没有一个when中的test的结果为true,则执行otherwise标签体内的内容;

3.4 forEach 标签

  1. 普通for循环

    需要的属性:

    1. begin:起始值

    2. end:结束值

    3. step:步长

    4. var:临时遍历

    5. varStatus

      1. index属性:临时变量的值

      2. count属性:循环的次数

<c:forEach begin="1" end="10" step="1" var="a">
    <button>按钮${ a }</button>
    <br>
</c:forEach>
  1. 增强for循环

    需要的属性:

    1. items:域对象中的集合

    2. var:当前遍历到的集合中的对象

    3. varStatus

      1. index属性:集合中元素的下标

      2. count属性:循环的次数

<table border="1px">
    <tr>
        <td>用户名</td>
        <td>密码</td>
    </tr>
    <c:forEach items="${ users }" var="t">
        <tr>
            <td>${t.username}</td>
            <td>${t.password}</td>
        </tr>
    </c:forEach>
</table>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值