JavaWeb之JSP

JSP


 

JSP是一个特殊的页面,其中既可以定义html标签,又可以定义java代码,其本质上是servlet。

 

JSP中书写代码,有以下3种标签:

  1. <% 代码 %>:在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
  2. <%= 代码 %>:代码会直接输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
  3. <%! 代码 %>:在该标签内定义的java代码的变量是jsp转换为servlet类的成员变量。

 

需要说明的是,<% %> 内定义的变量可看作是servlet类中service方法定义的局部变量,而<%! %>内定义的变量可看作servlet的成员变量。

 
 

JSP中的内置对象
 
内置对象即可以直接获得的对象,

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

 
 

JSP指令

JSP指令用于设置JSP页面的信息,其格式如下:

<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
  1. <%@ page %>
    1. contentType="text/html; charset=gbk":等同于response.setContentType(),设置响应体的mime类型以及字符集,另外设置jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
    2. import:导入java包
    3. errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
    4. isErrorPage:标识当前也是是否是错误页面。为true的话能用内置对象exception,为false的话则不能
  2. <%@ include %>: 页面包含的。导入页面的资源文件<%@include file="top.jsp"%>
  3. <%@ taglib %> : 导入资源<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>,prefix:前缀,自定义的

另外,JSP的注释为<%-- --%>

 
 

EL


在EL表达式中,有如下运算符

  1. 算数运算符:+ - * /(div) %(mod)

  2. 比较运算符:> < >= <= == !=

  3. 逻辑运算符:&&(and) ||(or) !(not)

  4. 空运算符: empty

    功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0。

 
以下是一段示例:

${3 > 4}<br>
${3 + 4}<br>
${3 / 4}<br>
${3 div 4}<br>
${3 mod 4} <br>
${3 == 4}<br>
${3 > 4 && 3 < 4}<br>
${3 > 4 and 3 < 4}<br>

<%--为null或者长度为0--%>
${not empty str}<br>
${empty list}<br>

 
 

EL表达式获取值
 

EL表示的值只能从域对象中获取

  1. 通过${域名称.键名}获取: 获取对象属性是通过get方法的名称来获取

  2. 通过${键名}获取:依次从最小的域中查找是否有该键对应的值,直到找到为止

另外list可通过${域名称.键名[索引]}获取其中集合中的成员,map可通过${域名称.键名["key名称"]}${域名称.键名.key名称}获取

示例代码:

${sessionScope.name} 
${requestScope.age}
${name}>

<h3>el表达式获取对象属性</h3>
<%--
    el表达式获取对象属性是通过get方法的名称来获取
--%>
${requestScope.u.name}<br>
${requestScope.u.age}<br>
${requestScope.u.birthday}<br>
${requestScope.u.birthday.year}<br>
${requestScope.u.formatDate}<br>

<h3>获取list</h3>

${list}<br>
${list[0]}<br>
${list[1]}<br>
${list[10]}<br>
${list[2]}<br>
${list[2].name}<br>

<h3>获取map</h3>
${map["uname"]}<br>
${map.uname}<br>
${map.user.name}<br>

 
 

JSTL


JSTL全称JavaServer Pages Tag Library,是JSP标准标签库,其作用是简化和替换jsp页面上的java代码
 

由于我使用的是tomcat10,所以导入maven坐标有所不同

<dependency>
  <groupId>org.glassfish.web</groupId>
  <artifactId>jakarta.servlet.jsp.jstl</artifactId>
  <version>2.0.0</version>
</dependency>

<dependency>
  <groupId>org.apache.taglibs</groupId>
  <artifactId>taglibs-standard-spec</artifactId>
  <version>1.2.5</version>
</dependency>

 
另外需要引入标签库

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

 
常用JSTL标签如下:

  1. if:相当于java的if语句,但是没有else

    <c:if test="${num % 2 == 0}">
        ${num}是偶数
    </c:if>
    
  2. choose相当于switch

        <c:choose>
            <c:when test="${num == 1}">星期1</c:when>
            <c:when test="${num == 2}">星期2</c:when>
            <c:when test="${num == 3}">星期3</c:when>
            <c:when test="${num == 4}">星期4</c:when>
            <c:when test="${num == 5}">星期5</c:when>
            <c:when test="${num == 6}">星期6</c:when>
            <c:when test="${num == 7}">星期7</c:when>
            <c:otherwise>输入有误</c:otherwise>
        </c:choose>
    </body>
    
  3. foreach:相当于for循环

    <c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
        ${i} ${s.index} ${s.count}<br>
    </c:forEach>
    
    <!-------------->
    
    <c:forEach items="${list}" var="str" varStatus="s">
        ${s.index} ${s.count} ${str} <br>
    </c:forEach>
    

    var:循环变量, step:步长,items:要遍历的集合 ,varStatus:记录了循环的状态,可通过index获取循环的元素的下标,count获取遍历的次数等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值