JSP 的认识

1.概念

JSP是:java Server Pages(运行在服务器端java的页面),可以理解为是一个即可以写前端代码,也可以编写java代码的页面。

2.原理

jsp extends org.apache.jasper.runtime.HttpJspBase    extends HttpServlet

jsp 通过编译成了 Servlet

jsp是动态网页 html是静态网页

jsp可以通过Java代码对网页进行配置

3.JSP脚本

jsp脚本:指的是jsp中定义了java代码的方式。
    <%代码%> 定义的java代码,出现的位置在service()方法中,不会输出到页面上;
    <%!代码%> 定义的java代码,相当于成员变量。(基本上不这样写)
    <%=代码%> 定义的java代码出现位置在service()方法中,会直接输出到页面上,定义的是java表达式。

4. JSP注释

与html注释不同地方在于html注释jsp页面内容以后依旧可以在f12注释里看到,但jsp注释后,看不到.
html注释: <!-- 代码 -->
jsp注释:  <%-- 代码 --%>

5. JSP指令

5.1 Page指令

  • 属性名为contentType 表示响应到页面上的编码。

  • 属性名为language表示jsp页面支持的语言为java语言;

  • 属性名为pageEncoding表示设置页面编码,如果是eclipes需要设置;

  • 属性名为import 导包;

  • 属性名为errorPage的时候,当页面发生异常会跳转到errorPage;

//index.jsp
errorPage="error.jsp"
<%int i = 10/0;%>
//error.jsp
<body>
服务器繁忙..................
</body>
属性名为isErrorPage,
默认情况为false,改为true的时候,
可以使用内置对象exception来获取具体的异常信息。
(使用位置在errorPage中使用)

5.2 include指令

include指令用于导入页面上的资源文件.
<%--在当前页面出现异常直接出现错误界面--%>
<%@include file="error.jsp"%>

5.3 taglib指令

<%@taglib prefix="" uri="" %>
导入资源,导入jsp中常用的标签库。

6. EL表达式

6.1 写法

${} 用来替代和简化jsp中java代码的编写,规范书写代码格式。

6.2 使用

6.2.1 支持运算符:

算术运算符:+ - * /(div) %(mod)

扫描二维码关注公众号,回复: 16976761 查看本文章

逻辑运算符:&& (and) ||(or)

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

空运算符: empty 用处:用于判断对象、集合、数组、字符串是否为空。

<%= 1+2%>
${1+2}
${1/2}或${1div2}

${empty 对象|集合}     //空
${not empty 对象|集合} //非空
Eg:
<%
   pageContext.setAttribute("name","张阿三");
%>
${empty name}

6.2.2 el表达式取值

只能从域对象中获取值

${域名称.键值}.从域对象中根据键名来取值;
${applicationScope.aaa}相当于application作用域
${sessionScope.aaa}       相当于session作用域
${requestScope.aaa}    相当于request作用域
${pageScope.aaa}       相当于pageContext作用域

注意:如果键名一样的情况下:直接${键名} 会从最小的作用域去找,直到找到为止。

6.2.3 获取对象

${域名称.键名.属性名}
取对象时候的逻辑:  实体类中setXxx();
取的时候将getXxx()去掉get以后,将首字母改为小写。

//jsp
<%
  Person person = new Person();
  person.setName("张三");
  person.setSex("男");
  request.setAttribute("user",person);
%>
${user.name}
${requestScope.user.name}

//Person类
public class Person {
    private String name;
    private String sex;
    public Person() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

6.2.4 获取list

${域名称.键名[索引]}
<%--list--%>
<%--<%--%>
<%--  Person person = new Person();--%>
<%--  person.setName("张三");--%>
<%--  person.setSex("男");--%>

<%--  Person person2 = new Person();--%>
<%--  person2.setName("李四");--%>
<%--  person2.setSex("男");--%>
<%--  List list = new ArrayList();--%>
<%--  list.add(person);--%>
<%--  list.add(person2);--%>

<%--  request.setAttribute("persons",list);--%>
<%--%>--%>
<%--${persons[0].name}--%>
<%--${persons[1].name}<%
  Person person = new Person();
  person.setName("张三");
  person.setSex("男");

  Person person2 = new Person();
  person2.setName("李四");
  person2.setSex("男");
  List list = new ArrayList();
  list.add(person);
  list.add(person2);

  request.setAttribute("persons",list);
%>
${persons[0].name}
${persons[1].name}


${user.name}
${requestScope.user.name}

6.2.5 获取 map

${map["键名"]} // 如果为数字使用该方法,平时两种都可以。
${map.键名}

<%

  Person person = new Person();
  person.setName("张三");
  person.setSex("男");

  Person person2 = new Person();
  person2.setName("李四");
  person2.setSex("男");
  Map map = new HashMap();
  map.put("1",person);
  map.put("aaa",person2);
  request.setAttribute("map",map);
%>
<%--数字--%>
${map["1"].name}  
<%--字符串--%>
${map["aaa"]}
${map.aaa.name}
<%
    Person person = new Person();
    person.setName("张三");
    person.setSex("男");

    Person person2 = new Person();
    person2.setName("李四");
    person2.setSex("男");
    List list = new ArrayList();
    list.add(person);
    list.add(person2);
    request.setAttribute("list",list);
%>
<table>
    <tr>
        <td>
            数量
        </td>
        <td>
            姓名
        </td>
        <td>
            性别
        </td>
    </tr>
    <%--遍历--%>
    <c:forEach items="${list}" var="person" varStatus="s">
        <tr>
            <td>${s.count}</td>
            <td>${person.name}</td>
            <td>${person.sex}</td>
            <td><a href="">修改</a> |
                <a href="">删除</a>
            </td>
        </tr>
    </c:forEach>
</table>

7. JSTL表达式

7.1 写法

Java Server tag library (jsp的标准标签库) 用于简化 jsp页面开发

7.2 使用

  1. 先导包

需要导包:导入 jstl-版本号、standard-版本号
导入到lib目录下;
需要
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  1. 常用标签

c:if

<%--当sex=男默认选择男 否则 默认选择女--%>
<%request.setAttribute("sex","男");%>
<%--c:if 相当于java代码中的if 条件写在test 返回Boolean值   注意:没有 else,如果需要另一种情况则继续加c:if--%>
<c:if test="${sex=='男'}">
    <input type="radio" name="radio" value="男" checked>男
    <input type="radio" name="radio" value="女" >女
</c:if>
<c:if test="${sex=='女'}">
    <input type="radio" name="radio" value="男" >男
    <input type="radio" name="radio" value="女" checked>女
</c:if>

c:choose

<%--
    c:choose相当于我们Java代码中
    switch...case
    c:otherwise相当于default 不需要加条件。
--%>
<%
    request.setAttribute("i",1);
%>
<c:choose>
    <c:when test="${i==1}">
        111111
    </c:when>
    <c:when test="${i==3}">
        333333
    </c:when>
    <c:otherwise>222222</c:otherwise>
</c:choose>

c:foreach

<%--
    c:foreach相当于java代码中的for循环

    begin相当于初始值  如:int i=0;
    end相当于结束值  如:i<=5;
    step相当于递进   如:i++
    var 相当于声明变量名 如 : i
--%>
<c:forEach begin="0" end="5" step="1" var="i">
${i}  <%--0 1 2 3 4 5 --%>
</c:forEach>
<%--
    items相当于集合;
    var 相当于循环的变量i
    varStatus属性相当于循环对象的状态也就是次数:通常情况下
        写成varStatus="s" 用来获取数量 s.count可以取到数量。
--%>
<%
    Person person = new Person();
    person.setName("张三");
    person.setSex("男");

    Person person2 = new Person();
    person2.setName("李四");
    person2.setSex("男");
    List list = new ArrayList();
    list.add(person);
    list.add(person2);
    request.setAttribute("list",list);
    Map map = new HashMap();
    map.put("p1",person);
    map.put("p2",person2);
    request.setAttribute("map",map);
%>
<table>
    <tr>
        <td>数量</td>
        <td>姓名</td>
        <td>性别</td>
        <td>操作</td>
    </tr>
    <%--遍历--%>
    <c:forEach items="${list}" var="person" varStatus="s">
        <tr>
            <td>${s.count}</td>
            <td>${person.name}</td>
            <td>${person.sex}</td>
            <td><a href="">修改</a> |
                <a href="">删除</a>
            </td>
        </tr>
    </c:forEach>
</table>
<table>
    <tr>
        <td>数量</td>
        <td>姓名</td>
        <td>性别</td>
        <td>操作</td>
        <c:forEach items="${map}" var="p" varStatus="s">
            <tr>
                <td>${s.count}</td>
                <td>${p.value.name}</td>
                <td>${p.value.sex}</td>
                <td><a href="">修改</a> |
                     <a href="">删除</a>
                </td>
            </tr>
        </c:forEach>
    </tr>
</table>

猜你喜欢

转载自blog.csdn.net/xy58451921/article/details/129479195
jsp