JSP基础

464 阅读2分钟

JSP原理

JSP 本质上就是一个 Servlet

image.png

JSP 脚本分类 JSP 脚本有如下三个分类:

  • <%...%>:内容会直接放到_jspService()方法之中
  • <%=...%>:内容会放到out.print()中,作为out.print()的参数
  • <%!...%>:内容会放到_jspService()方法之外,被类直接包含

image.png

EL 表达式

EL(全称Expression Language )表达式语言,用于简化 JSP 页面内的 Java 代码。 
EL 表达式的主要作用是 获取数据。其实就是从域对象中获取数据,然后将数据展示在页面上。 
而 EL 表达式的语法也比较简单,${expression} 
例如:${brands} 就是获取域中存储的 key 为 brands 的数据。

image.png

域对象取值的优先级

image.png

jstl表达式的使用步骤

  • 导入坐标
        <!--jstl 1.2版本后自带standard.jar,重复添加会报错-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
 

<!--        <dependency>-->
<!--            <groupId>taglibs</groupId>-->
<!--            <artifactId>standard</artifactId>-->
<!--            <version>1.1.2</version>-->
<!--        </dependency>-->
  • 在JSP页面上引入JSTL标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • Demo演示 image.png

  • forEach标签 image.png c:forEach的varStatus属性

current: 当前这次迭代的(集合中的)项
index  : 当前这次迭代从 0 开始的迭代索引
count  : 当前这次迭代从 1 开始的迭代计数
first  : 用来表明当前这轮迭代是否为第一次迭代的标志
last   : 用来表明当前这轮迭代是否为最后一次迭代的标志
begin  : 返回begin属性值
end    : 返回end属性值
step   : 返回step属性值

jsp常用语法

  • <%@ page contentType="text/html; charset=UTF-8" %>
  • <%! 声明成员变量、方法 %>
  • <% 声明局部变量,操作成员变量、局部变量、方法 %>
  • <%= 表达式 %>
  • <jsp:include page="文件的url"/>
//形式2:
<jsp:include page="文件的url">
    <jsp:param name="属性名字" value=“属性的值”>
</jsp:include>

注意:
1,当include动作标记不需要param子标记时,必须使用第一种形式
2,使用tomcat服务器提供的request内置对象获取param子标记中name属性的值

//t2.jsp
<jsp:include page="t3.jsp">
   <jsp:param name="age" value="39"/>
</jsp:include>
//t3.jsp
<%
    String str = request.getParameter("age");
    int age = Integer.parseInt(str);
%>
<p>我的年龄为:<%= age %></p>
  • <jsp:forward page="要转向的页面">
//形式2:
<jsp:forward page="要转向的页面">
    <jsp:param name="属性名字" value=“属性的值”>
</jsp:forward>

关键字

  • synchronized
可以在方法前面添加synchronized,保证所有用户同步调用该方法,一个用户使用时,其他用户都等待调用

注意事项

  • java程序片中,语句结尾必须要有分号
  • p标签之间最好不要有回车,页面解析的时候会报错

isELIgnored的作用

如果设置为true,那么JSP中的表达式被当成字符串处理。
如果设置为false, 那么JSP中的表达式会生效

Web容器默认isELIgnored="false",
如果jsp页面表达式显示为字符串,可以在顶部page标签试一下
<%@ page isELIgnored="false"%>

中文乱码&成员变量&方法&java程序片

<!-- 下面这句注释必须用jsp注释方式,不然jsp解析时报错 -->
<%-- “<%@”是一个完整符号,中间不要有空格 charset=UTF-8" 可以解决浏览器中文显示乱码的问题--%>
<%@ page contentType="text/html; charset=UTF-8" %>
<HTML>
    <BODY>
        <%!
            int a = 10,b=20;
            <!-- 可以在方法前面添加synchronized,保证所有用户同步调用该方法,一个用户使用时,其他用户都等待调用 -->
            synchronized int sumValue(int a, int b){
                return a+b;
            }
        %>

        <p>
            a+b计算结果:
            <!-- html注释 -->
            <%-- jsp注释 --%>
            <!-- “《%=”是一个完整的符号,中间不要有空格,下面就是java程序片 -->
            <%=
            sumValue(a,b)
            %>
        </p>
        <p>123和456是好朋友789</p>
        <font size=19 color=red>hehe</font>
    </BODY>
</HTML>