【JavaWeb】JSP详解

18 篇文章 0 订阅

【JavaWeb】JSP详解

1、什么是JSP


  • JSP(全称JavaServer Pages)是由Sun公司主导创建的一种 动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术 以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

  • Servlet = server+applet(可以嵌套在网页里面的java程序)

  • 如果直接使用writer.print(“数据”)的话;如果页面数据过于庞大,而且需要动态变化的时候,会给开发人员造成很大的工作量

  • 所以能否将writer.print(“数据”)-----> 新的网页格式就会减少麻烦----->jsp就诞生了

嵌套java代码的jsp:

使用<%= %>来嵌套java代码

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%=
 int i = 0;
%>
<!DOCTYPE html>
<html>
<head>
 <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<%=
 for (int j = 0; j < length; j++) {
     
 }
%>
<br/>
<a href="hello-servlet">Hello Servlet</a>
</body>
</html>

2、JSP指令

JSP中内置的指令可以直接在JSP页面中进行使用。

导入包:

通过该条指令,可以在jsp中导入java的包,其实也是相当于导入到了javaServlet中

<%@ page import="包的地址" %>

定制错误页面:

通过该条指令,可以让该JSP在出现错误的时候,跳转到指定的错误页面

<%@ page errorPage="错误页面" %>	

声明错误页面:

通过该条指令,可以声明该页面是否为错误处理页面,如果true,则表示是,当该页面声明为错误处理页面后,就可以调用exception对象来显示异常。

<%@ page isErrorPage="true" %>
<%=exception.getMessage()%>

合成页面指令:

可以将指定的页面引入,但是要注意的是,这里会合并俩个页面

<%@ include file="页面地址" %>

包含页面指令:

和上面一样,但是这里不会将俩个页面合并,只是引入。

<jsp:include page="页面地址"/>

3、EL表达式


EL表达式,就是在jsp页面内置了一些对象,帮助我们获取绑定的数据

格式:

  • ${对象名.属性名} = ${对象名.get属性()} = ${对象名["属性名"]
  • ${对象名.属性名.属性的属性名}
  • ${对象名.集合名[index]}

页面如何识别:

  • 内置对象: ServletContext application, request,reponse,page…

    ServletContext application上下文对象
    HttpServletRequest request请求对象
    HttpServletResponse reponse响应对象
  • 页面会如何寻找绑定数据:

    a、首先requet(请求) ----> requestScope------->去找是否绑定属性user

    b、再去session

    c、再去application(上下文)

    如果找到,直接映射对应java代码,要求:一定 针对pojo对象书写对应get/set方法

EL表达式的使用:

  • servlet:

    @WebServlet("/login")
    public class LoginServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 实例对象
            UserInfo user = new UserInfo(1, "张三", "123456");
            List<Integer> list = new ArrayList();
            list.add(1);
            list.add(2);
            user.setList(list);
            // 绑定数据
            req.setAttribute("user", user);
            // 转发对象到index.jsp
            req.getRequestDispatcher("index.jsp").forward(req, resp);
        }
    }
    
  • jsp:

    <%@ page import="com.moon.pojo.UserInfo" %>
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <!DOCTYPE html>
    <html>
    <head>
        <title>JSP - Hello World</title>
    </head>
    <body>
    <div>
        <h2>1.获得属性:</h2>
                        <%--EL表达式--%>
                        用户名:${user.username}
                        <%--java写法--%>
                        <%=
                        ((UserInfo) request.getAttribute("user")).getUsername()
                        %>
      
        <h2>2.集合</h2>
                        集合:${user.list}
                        集合属性:${user.list[1]}
      
        <h2>3.基础的运算</h2>
                        ${1+2}
                        <%--可能会出现字符串拼接--%>
                        ${"3"+"4"}
      
        <h2>4.关系运算</h2>
                        ${2>3}
                        <%--等于--%>
                        ${2 eq 3}
                        <%--大于--%>
                        ${2 gt 3}
                        <%--小于--%>
                        ${2 lt 3}
    </div>
    </body>
    </html>
    

4、Jstl标签库

我们在jsp中插入java代码,会很不方便,sun公司提供了一套标准标签库,就是Jstl标准标签库,通过jstl可以大幅度 优化我们在jsp插入的java代码

jstl标签是 一个java项目,用来帮助我们更加方便获取属性,修改属性,根据逻辑处理属性

Maven驱动包地址:

  • Jstl:

    <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>jstl</artifactId>
     <version>1.2</version>
    </dependency>
    
  • El:解析el

    <dependency>
     <groupId>javax.el</groupId>
     <artifactId>javax.el-api</artifactId>
     <version>3.0.0</version>
    </dependency>
    

if标签:

  • 标签:<c:if test=" "> </c:if>

  • test属性: 用来进行逻辑判断

    <c:if test="${u.username=='李四'}">
         李四
    </c:if>
    

when标签:

  • 标签:c:choose > c:when

  • 相当于java中的 else if,也比较像 switch

    <h6>2.when标签:if elseif elseif else</h6>
     <c:choose>
         <c:when test="${user.password='123456'}">1</c:when>
         <c:when test="${user.password='1234567'}">2</c:when>
         <c:when test="${user.password='123456789'}">3</c:when>
         <c:otherwise>都不满足</c:otherwise>
     </c:choose>
    

forEach标签:

  • 标签:<c:forEach items="" var="">

  • item:表示要遍历的目标

  • begin:从什么时候开始

  • end:什么是结束

  • varStatus:获得循环的第几次,循环的一些其他的特殊属性

    <h6>3.forEach </h6>
       <table border="1">
           <tr>
               <td>v.index</td>
               <td>i</td>
               <td>奇数显示</td>
           </tr>
       <c:forEach items="${user.list}" var="i" varStatus="v">
    
           <%--<c:if test="${v.index%2==0}">
           </c:if>--%>
           <tr class="my_${v.index%2}">
               <td>${v.index}</td>
               <td>${i}</td>
               <td>${v.index*2+1}</td>
           </tr>
       </c:forEach>
    

5、Jstl标签库使用案例


  • 导入Jstl库

    <%--使用jstl 引入标签库--%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
  • jsp

    <%@ page import="com.moon.pojo.UserInfo" %>
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%--使用jstl 引入标签库--%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE html>
    <html>
    <head>
        <title>JSP - Hello World</title>
        <style>
            <style>
            * {
                font-size: 14px;
            }
            .my_0{
                background: green;
            }
            .my_1{
                background: #1b6d85;
            }
        </style>
    </head>
    <body>
    <div>
        <h6>1.if标签
            test属性:用来进行逻辑判断
        </h6>
        <c:if test="${u.username=='李四'}">
            李四
        </c:if>
        <h6>2.when标签:if elseif elseif else</h6>
        <c:choose>
            <c:when test="${user.password='123456'}">1</c:when>
            <c:when test="${user.password='1234567'}">2</c:when>
            <c:when test="${user.password='123456789'}">3</c:when>
            <c:otherwise>都不满足</c:otherwise>
        </c:choose>
        <h6>3.forEach
            item:表示要遍历的目标
            begin:从什么时候开始
            end:什么是结束
            varStatus:获得循环的第几次,循环的一些其他的特殊属性
        </h6>
        <table border="1">
            <tr>
                <td>v.index</td>
                <td>i</td>
                <td>奇数显示</td>
            </tr>
            <c:forEach items="${user.list}" var="i" varStatus="v">
    
                <%--<c:if test="${v.index%2==0}">
                </c:if>--%>
                <tr class="my_${v.index%2}">
                    <td>${v.index}</td>
                    <td>${i}</td>
                    <td>${v.index*2+1}</td>
                </tr>
            </c:forEach>
        </table>
    </div>
    </body>
    </html>
    
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值