JavaEE 中的 JSP

JavaEE 中的 JSP

JSP 页面是动态页面,html 页面是静态页面。
因为 servlet不方便展示信息,所以后来就有了 jsp,即:在html中添加java代码。其本质就是servlet。

JSP 书写规范

声明标签 <%!变量或者⽅法声明%>

<%! %> 会定义到 server() 方法之外,其中定义的方法通常要被<% %>调用

程序代码标签 <%java代码%>

<% %>中的代码会被嵌入到 JSP 的 server() 方法中,会在page渲染时候执行

表达式标签 <%= 表达式%>

JSP 中的注释

Jsp 文件中的注释有两种: 第一种是html注释:<!-- 注释信息 -->;第二种是jsp界面的注释:<%-- 注释信息 --%>

JSP的内置对象

jsp的内置对象有9个:request, response, session, application, pageContext, out, config, page, exception

jsp的内置对象注释
pageJSP界面本身,约等于this
request一次请求
response对于请求的响应
pageContext同一个页面
session多次对话
(比如:换个浏览器就超出范围了)
application与服务器同寿(可以说是全局变量了)
out输出
<% out.print("<script>alert('success');</script>") %>
config获取初始化参数
<% config.getInitParameter("x") %>
exception异常
exception=<%=exception.getMessage() %>

正常情况下,JSP无法识别 exception。 需要在设置 page 的位置添加一条属性 isErrorPage="true"

<%@ page pageEncoding="UTF-8" language="java" 
	isErrorPage="true" 
	import="java.util.*" %>

jsp的作⽤域:
pageContext -> request -> session -> application

JSP的指令

  1. page
    定义JSP网页的依赖属性,如脚本语言、缓存需求、error界面等
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
  1. include
    包含其他文件
<%@ include file="/hello.jsp" %>
  1. taglib
    引入标签库定义
// 常用的
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>
<%@ taglib prefix="ec" uri="http://www.extremecomponents.org" %>

// 自定义
<%@ taglib uri="/WEB-INF/myTags.tld" prefix="myTag" %>

如果是自定义的 taglib,使用时还需要另外在 web.xml 中定义一下映射为路径否则uri中的路径标红,找不到路径。完整添加方法如下:

自定义 tag 方法:

package tags;

public class TagHandler extends TagSupport {
    @Override
    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
            out.println(Calendar.getInstance().getTime());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SKIP_BODY;
    }
}

在 web 下的 WEB-INF 文件中添加 myTag.tld 文件, 下面一段代码加在</taglib>之前

	  <tag>
        <name>currentDate</name>
        <tag-class>tools.TagHandler</tag-class>
        <body-content>scriptless</body-content>
    </tag>

此时,在intellij 编写,我直接在JSP中直接去添加 tag 标签,uri中填写的路径找不到的。查了一些资料后我发现还需要再 web.xml中加一条配置语句

	<jsp-config>
        <taglib>
            <taglib-uri>tags.TagHandler</taglib-uri>
            <taglib-location>/WEB-INF/myTags.tld</taglib-location>
        </taglib>
    </jsp-config>

这时候在jsp中就可以使用了

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="myTag" uri="/WEB-INF/myTags.tld"%>
<html>
<head>
    <title>tagPage</title>
</head>
<body>
        JSP page.jsp
        <br>
        <myTag:currentDate/>
</body>
</html>

现在运行 tomcat 就能看到结果了。
在这里插入图片描述

EL表达式

EL 全称为 Expression Language

${}

注意:
如果 想要在 ${} 中获取变量值,那么这个变量需要设置在作用域中

<%
	pageContext.setAttribute("test", "value in pageContext");
	request.setAttribute("test", "value in request");
	session.setAttribute("test", "value in session");
	application.setAttribute("test", "value in application");
%>

如果存在同名变量在不同作用域下都有定义,那么作用域小的会有限被选择。
此时不妨结合tag一起使用

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="myTag" uri="/WEB-INF/myTags.tld"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>JSPPage</title>
</head>
<body>
    JSP page.jsp
    <br>
    <myTag:currentDate/>

    <br>
    <% pageContext.setAttribute("currentDate", new Date()); %>
    <fmt:formatDate value="${currentDate}" pattern="dd-MMM-yyyy" var="today"/>
    ${today}

    <br>
    <%
        List<String> list = new ArrayList<>();
        list.add("abc");
        list.add("123");
        list.add("haha");
        pageContext.setAttribute("list", list);
    %>
    <br>
    <c:forEach items="${list}" var="element" varStatus="sta">
		<%-- <c:out value="${element}"></c:out><br>--%>
       line number: ${sta.count} / index: ${sta.index} -> ${element} <br>
    </c:forEach>
    <br>
    <c:choose>
        <c:when test='${"abc1" == list.get(0)}'>
            list.get(0) = abc
        </c:when>
        <c:otherwise>
            list.get(0) != abc1
        </c:otherwise>
    </c:choose>
</body>
</html>

输出结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值