微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

06-JSP

JSP

1、JSP简介

1.1、概念

  • Java Server Pages,Java服务端页面
  • 一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容
  • JSP = HTML + Java

1.2、作用

2、JSP导入

2.1、导入JSP坐标

  • <dependency>    <groupId>javax.servlet.jsp</groupId>    <artifactId>jsp-api</artifactId>    <version>2.2</version>    <scope>provided</scope>
    </dependency>
    

2.2、创建JSP文件

  • IDEA ---> New ----> JSP....

2.3、编写HTML标签和Java代码

  • <body>
        <h1>
          我是JSP
        </h1>
        <%
        	System.out.println("我是Java代码");
        %>
    </body>
    
  • PS

    • 这里的Java代码输出语句有可能会因为JDK版本太高导致JSP报错说无法编译此类
    • 解决办法是换JDK成低版本的(如1.8)

3、JSP原理

  • JSP本质上就是一个Servlet
  • JSP在被访问的时候,由JSP容器(Tomcat)将其转换为Java文件(Servlet),再由JSP容器(Tomcat)将其编译,最终对外提供服务,该服务的提供者其实就是这个字节码文件
  • 查看JSP生成的java源码

4、JSP脚本

  • JSP脚本用于在JSP页面内定义Java代码
  • JSP脚本分类
    • 1. <%...%>
    • 2.<%=...%>
      • 内容会放到out.print()中,作为out.print()的参数
    • 3.<%!...%
      • 内容会放到_jspService()方法之外,被类直接包含
  • 源码示例

5、JSP缺点

  • 由于JSP页面内,既可以定义HTML标签,又可以定义Java代码,造成了以下问题:
    • 书写麻烦,特别是复杂的页面
    • 阅读麻烦
    • 复杂度高,运行需要依赖于各种环境,JRE,JSP容器,JavaEE.....
    • 占内存和磁盘,JSP会自动生成.java和.class文件占用磁盘,运行的是.class文件占用内存
    • 调试困难,出错后,需要找到自动生成的.java文件进行调试
    • 不利于团队协作,前端人员不会Java,后端人员不精HTML
    • ....
  • JSP现在在企业中已经被淘汰
    • 发展历程

6、EL表达式

6.1、EL的概念

  • Expression Language:表达式语言,用于简化JSP页面内的Java代码

6.2、主要功能

6.3、语法

  • ${expression}
  • ${brands}:获取域中存储的key为brands的数据

6.4、JavaWeb中的四大域对象

  • page
  • request
    • 当前请求有效
  • session
    • 当前会话有效
  • application
    • 当前应用有效

6.5、EL表达式获取数据的顺序

  • 会依次从这4个域中寻找,直到找到为止

6.6、示例

  • Servlet

    • @WebServlet("/demo02")
      public class ServletDemo02 extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
              doGet(request, response);
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
              // 1.准备数据
              List<Brand> brands = new ArrayList<>();
              brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0));
              brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1));
              brands.add(new Brand(5,"华为","华为科技有限公司",1000,"为发烧而生",1));
              brands.add(new Brand(6,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1));
      
              // 2.存储数据到request域中
              request.setAttribute("brands", brands);
              request.setAttribute("username", "zhangsan2");
              request.setAttribute("age", 162);
      
              // 3.转发到jsp
                     request.getRequestdispatcher("04el.jsp").forward(request, response);
      
  • JSP

    • <body>
        username: ${username}<br/>
        brands: ${brands}
      </body>
      

7、JSTL标签

7.1、概念

  • JSP标准标签库(Jsp Standarded Library),使用标签取代JSP页面上的Java代码

  • eg

    • <c:if test="${flag == 1}">
        男
      </c:if>
      <c:if test="${flag == 2}">
        女
      </c:if>
      

7.2、标签类型

7.3、JSTL的使用

  • 1.导入坐标

    • <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
      </dependency>
      
  • 2.在JSP页面上引入JSTL标签

    • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
      
  • 3.使用

    • <c:if test="...">...</c:if>,test用于定义条件表达式

      • <c:if test="${flag == 1}">
        	男
        </c:if>
        <c:if test="${flag == 2}">
        	女
        </c:if>
        
    • <c:forEach>:相当于for循环(跟Java中的for循环类似,有增强for循环和普通for循环)

      • 增强for循环

        • items:被遍历的容器

        • var:遍历产生的临时变量

        • varStatus:遍历状态对象

        • <c:forEach items="${brands}" var="brand">
            <tr align="center">
              <td>${brand.id}</td>
              <td>${brand.brandName}</td>
              <td>${brand.companyName}</td>
              <td>${brand.description}</td>
            </tr>
          </c:forEach>
          
          <%--相当于Java代码中的增强for循环
          for (Brand brand : brands) {
          Integer id = brand.getId();
          String imgurl = brand.getimgurl();
          String brandName = brand.getBrandName();
          String companyName = brand.getCompanyName();
          }
          --%>
          
      • 普通for循环

        • begin:开始数

        • end:结束数

        • step:步长

        • <c:forEach var="i" begin="0" end="10" step="1">
            ${i}
          </c:forEach>
          
          <%--相当于Java代码中的普通for循环
          for (int i = 0; i <= 10; i++) {
          System.out.println(i);
          }
          --%>
          

8、MVC模式和三层架构

8.1、MVC模式

  • MVC是一种分层开发的模式
    • M:Model,业务模型,处理业务
    • V:View,视图,界面展示
    • C:Controller,控制器,处理请求,调用模型和视图
  • MVC的好处
    • 职责单一,互不影响
    • 有利于分工协作
    • 有利于组件重用

8.2、三层架构

  • 表现层,业务逻辑层,数据访问层
    • 表现层
      • 接收请求,封装数据,调用业务逻辑层,响应数据
    • 业务逻辑层
      • 对业务逻辑进行封装,组合数据访问层中的基本功能,形成复杂的业务逻辑功能
    • 数据访问层

8.3、MVC模式和三层架构之间的关系

9、基于JSP的品牌信息管理案例

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐