06-JSP


JSP

1、JSP简介

1.1、概念

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

1.2、作用

  • 简化开发,避免了Servlet中直接输出HTML标签

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)将其编译,最终对外提供服务,该服务的提供者其实就是这个字节码文件
    • 06-JSP
  • 查看JSP生成的java源码
    • 06-JSP

4、JSP脚本

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

5、JSP缺点

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

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、标签类型

  • 06-JSP

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的好处
    • 职责单一,互不影响
    • 有利于分工协作
    • 有利于组件重用
  • 06-JSP

8.2、三层架构

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

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

  • 06-JSP

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

  • 完成品牌数据的增删改查操作
    • 项目结构
      • 06-JSP
    • 查询所有
      • 06-JSP
    • 添加品牌信息
      • 06-JSP
    • 修改品牌信息
      • 回显数据
        • 06-JSP
      • 修改数据
        • 06-JSP
    • 删除品牌信息
      • 前端发送具体要删除的id的请求,web层接收id,调用service中的delete方法,然后delete方法请求Dao层的Mapper接口,执行删除SQL语句,最后完成删除

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/278728.html

(0)
上一篇 2022年8月3日
下一篇 2022年8月3日

相关推荐

发表回复

登录后才能评论