JavaWeb基础(7):JSP

(一)JSP定义

  • JSP可以简单的理解为在HTML中插入Java代码
    • 使用JSP可以让服务器给客户端返回动态页面
  • jsp本质上是一个Servlet

(二)JSP生命周期

  • JSP执行过程
    • 浏览器访问jsp页面
    • 服务器将对应的jsp文件转换为java文件
    • jvm进行编译生成.class文件,服务器运行,生成动态内容,返回给浏览器
  • JSP生命周期
    • 编译阶段:解析JSP文件,将其转换成servlet然后再进行servlet的编译
    • 初始化阶段:调用jspInit()方法
    • 执行阶段:调用_jspService()方法
    • 销毁阶段 :调用jspDestroy()方法

(三)JSP基本语法

(1)JSP指令

  • JSP指令的作用是设置和整个JSP页面相关的属性
<%@ 指令配置%>
  • 比如一般新建JSP文件时在开头会有
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

(2)脚本程序

  • 在HTML中插入Java代码时使用
    • 插入Java语句,包括末尾的冒号;
<% Java代码 %>

(3)JSP申明

<%! 申明语句%>

(4)JSP表达式

<%= 表达式%>

(5)JSP注释

  • JSP注释的内容不会发往客户端,客户端是无法感知的(不同于<!-- -->的HTML代码注释,查看源代码的时候能够看到)
<%-- 注释内容 --%>

(6)If-else语句

  • 可以使用Java脚本代码和HTML混合使用的模式,比如:
<body>
<% if(day==1 || day==7) {%>
    <p>今天是周一、周末</p>
<% } else {%>
<p>今天不是周一、周末</p>
<% } %>

</body>
  • 发现JSP文本都是一行一行处理的

(7)for循环

<%! int fontSize; %>
<body>
<h3>For循环实例</h3>
<%for (fontSize=1; fontSize < 25; fontSize++) {%>
    <font color="red" size="<%= fontSize%>">
        尝试font
    </font>
<%}%>
</body>

(四)JSP指令

(1)include

  • include指令
    • 将其他页面或者Servlet包含在当前页面(最后会一起编译运行,只生成一个.java文件)
    • 比如在JSP页面中插入<%@include file="/jsp/include/page1.jsp"%>(格式:<%@include file=“相对路径或者内部路径”%>)
  • 相当于把jsp页面当做一个模块来使用,减少重复编码

(2)taglib

  • taglib指令
    • 作用:导入标签库

(3)ErrorPage

  • errorPage
    • 当jsp页面中出现异常(比如除零异常)时跳转到指定页面
  • isErrorPage
    • 值为true时,可以在jsp页面中使用exception内置对象,输出错误信息

(五)JSP内置对象

(1)内置对象

  • JSP九个内置对象:不用声明,可以直接在JSP页面内使用的对象
    • out:JspWriter类
    • request:HttpServletRequest类
    • response:HttpServletResponse类
    • session:HttpSession类
    • exception :Throwable类(只有声明isErrorPage时才能使用的对象)
    • page:Servlet类
    • config:ServletConfig类
    • application:ServletContext类
    • pageContext

(2)域对象

  • JSP的域对象(Field Object):
    • application
    • session
    • request
    • pageContext
  • 域对象
    • setAttribute()方法
    • getAttribute() 方法

(六)动作标签

(1)页面跳转

  • <jsp:forward>:请求转发(相当于Java中的request.getRequestDispatcher(…).forward(…))
    • 实现从一个jsp页到另一个jsp页面的跳转

(2)动态包含

  • <jsp:include page="文件名"/>:在一个jsp页面中引入其他的jsp页面
    • <%@ include file="page2.jsp" %>这种用法不同的jsp:include是会生成多个.java文件,后者jsp编译之后只会产生一个.java文件

(七)el表达式

  • el(Expression Language)
    • jsp的内置表达式,为了简化JSP的语法
  • 作用
    • 获取域中数据
    • 执行运算
  • 使用:${el表达式}

(1)获取域中的数据

  • XXXScope.get()方法
	//设置
    request.setAttribute("requestKey","requestValue");
	//获取
    JSP表达式:<%=request.getAttribute("requestKey")%>
    EL表达式:${requestScope.get("requestKey")}	 
  • 简化代码
	${requestKey}
  • 和<%=%>不同的是
    • el表达式查找不到时返回不是null而是空字符串

(2)获取域中的集合数据

  • 对于存放在域对象中的list、map、array
    • 可以使用${变量名.变量方法()}直接获取对应的值
    <%
        Map map = new HashMap<String,Integer>();
        map.put("mio",20);
        request.setAttribute("map",map);
    %>
    获取request域中的map:
    JSP表达式:<%=((Map)request.getAttribute("map")).get("mio")%>
    EL表达式:${map.get("mio")}	

(3)四则运算

  • 比如+运算符的使用:
    <%
        request.setAttribute("a",1);
        request.setAttribute("b","2");
	%>
	
	${a+b}<br/> //结果为3
  • empty运算符:判断对象是否为空或者容器的长度是否为零
    • ${empty list}//如果List list = null 则返回true

(4)el内置对象

  • param
    • 通过param对象.参数名可以直接获取链接的参数
	//链接:jsp/el/demo5.jsp?username=mio&password=123
    username:${param.username} <br/>
    password:${param.password} <br/>
    param:${param}
  • ${cookie.Cookie名.value}获取特定Cookie的值
  • ${pageContext.request.getContextPath}:获取项目名

(八)JSTL

  • JSTL(JavaServer Pages Standard Tag Library):JSP标准标签库,封装了JSP的核心功能
  • 存在的意义:替代java脚本
  • 使用方式
      1. 导入jar包(jstl.jar和standard.jar)
      1. <@taglib prefix="" uri="">

(1)Core

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

(1)if

  • <c:if>标签:代替Java中的if
    <c:if test="${3 < 4}">
        3 < 4
    </c:if>

(2)forEach

  • forEach用于在JSP中循环
    • begin 起始位置
    • end 结束位置
    • step 步长
    • var 变量
    <c:forEach begin="1" end="20" step="2" var="i">
        ${i}
    </c:forEach>
    <%
        List list = new ArrayList<>();
        list.add(11);
        list.add(22);
        list.add(33);
        request.setAttribute("list",list);
    %>

    <c:forEach items="${list}" var="i">
        ${i}
    </c:forEach>

(2)函数库

  • <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
	${fn:toUpperCase("hello")}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值