ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

06-JSP

2022-08-03 17:31:40  阅读:177  来源: 互联网

标签:06 标签 request JSP brands Java 页面


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

4、JSP脚本

  • JSP脚本用于在JSP页面内定义Java代码
  • JSP脚本分类
    • 1. <%...%>
      • 内容会直接放到_jspService()方法中
    • 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、三层架构

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

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

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

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

标签:06,标签,request,JSP,brands,Java,页面
来源: https://www.cnblogs.com/OnlyOnYourself-lzw/p/16547951.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有