JSP和MVC,EL表达式,JSTL标签,三层架构

JSP和MVC,EL表达式,JSTL标签,三层架构

1. JSP

1. 指令

​ 1. 格式:<%@ 指令名称 属性名 = 属性值%>

2. 分类:
  	1. page:设置contentType;pageEncoding;language;buffer;import;errorPage;isErrorPage
  	2. include:页面中包含的资源页面,共有组件
  	3. taglib:包含的库文件;<%@ taglib prefix="c" uri="uri" %>

2. 注释

  1. html注释在html源码中会显示
  2. jsp注释<%-- --%>在html源码中不会显示

3. 内置对象

1. pageContext对应PageContext
2. request对应HttpServletRequest
3. session对应HttpSession
4. application对应ServletContext
5. response对应HttpServletResponse
6. page对应Object
7. out对应JspWriter
8. config对应ServletConfig
9. exception对应Throwable

2. MVC

  1. jsp演变历史:

    1. 早期只有Servlet,只能使用response输出标签数据,比较麻烦
    2. 后来有了JSP,简化了Servlet开发方式,但是造成代码复杂,可读性、可维护性差
    3. JavaWeb开发借鉴MVC开发模式让,程序的设计更加合理
  2. 什么是MVC开发模式?

    1. M odel:JavaBean

      完成具体业务操作,例如查询,封装对象

    2. V iew:JSP

      展示数据

    3. C ontroller:Servlet

      1. 获取用户输入
      2. 调用模型
      3. 将数据返回给视图展示
  3. 优缺点

    1. 优点:方便维护,利于分工协作,耦合性低(模块相互联系紧密程度)
    2. 缺点:使得项目架构复杂,不适合小型项目

3. EL表达式

  1. 概念:Expression Language 表达式语言
  2. 作用:替换和简化JSP页面中Java代码的编写
  3. 语法:$
  4. 注意:浏览器默认开启EL功能,关闭需要在头中使用isELIgnored属性,或者直接在元素前加\转义字符
  5. 具体:
    1. 运算
      1. 算术
      2. 比较
      3. 逻辑 and or not
      4. 空 empty 判断对象是否空,长度是否为0
    2. 获取值
      1. 注意事项:只能从域对象中获取值
      2. 语法:
        1. ${field.keyname} 在指定域中获取指定值
          1. pageScope--->pageContext
          2. requestScope--->request
          3. sessionScope--->session
          4. applicationScope--->application / ServletContext
        2. ${keyname} 依次从最小的域中查找,直到找到为止
        3. 如果keyname只是一个Object类型,直接用keyname.value,可以调用其get方法找到值
          1. List:listname[index]
          2. Map:mapname.name or mapname[name]
        4. empty和not empty:判断字符串,集合,数组是否空,长度是否为0
        5. 11个隐式对象
          1. pageContext 可以用来获取JSP其他的内置对象

4. JSTL标签

  1. 下载链接:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

  2. 概念:Java Server Pages Tag JSP标准标签库

  3. 作用:简化和替换JSP页面上的Java代码

  4. 使用方法:

    1. 导入jstl的jar包
    2. 引入标签库:taglib <% @ taglib %>
    3. 使用
  5. 常用的JSTL标签

    1. if

      <c:if test="true">
              <p>我是c:if块</p>
      </c:if>
      

      true为表达式,if没有else配对,如果需要分别两种情况只能再写一个if

    2. choose

       <c:choose>
              <c:when test="${number==1}">星期一</c:when>
              <c:when test="${number==2}">星期二</c:when>
              <c:when test="${number==3}">星期三</c:when>
              <c:when test="${number==4}">星期四</c:when>
              <c:when test="${number==5}">星期五</c:when>
              <c:when test="${number==6}">星期六</c:when>
              <c:when test="${number==7}">星期日</c:when>
              <c:otherwise>错误</c:otherwise>
       </c:choose>
      

      c:choose 可以和c:otherwise联合一起用

    3. foreach

      简单循环

      <c:forEach begin="1" end="10" var="i" step="1">
              ${i}<br>
      </c:forEach>
      

      begin初始值,end结束值,var临时变量,step步长,varStatus.index当前标,varStatus.count循环次数

      遍历容器

      <c:forEach items="${list}" var="str" varStatus="s">
              ${s.index}---${s.count}---${str}
              <br>
      </c:forEach>
      

      items容器对象,var临时变量,varStatus.index,varStatus.count同上

  6. 练习

    1. 需求:在request中存在一个User对象的list集合,使用jstl和el展示到表格中

    2. 代码:

      package com.fmpee.user;
      
      public class User {
          private int uid;
          private String name;
          private String gender;
          private String tel;
      
          public User(int uid, String name, String gender, String tel) {
              this.uid = uid;
              this.name = name;
              this.gender = gender;
              this.tel = tel;
          }
      
          public User() {
          }
      
          public int getUid() {
              return uid;
          }
      
          public void setUid(int uid) {
              this.uid = uid;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getGender() {
              return gender;
          }
      
          public void setGender(String gender) {
              this.gender = gender;
          }
      
          public String getTel() {
              return tel;
          }
      
          public void setTel(String tel) {
              this.tel = tel;
          }
      }
      
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      <%@ page import="java.util.ArrayList" %>
      <%@ page import="java.util.List" %>
      <%@ page import="com.fmpee.user.User" %><%--
        Created by IntelliJ IDEA.
        User: lijie
        Date: 2020/4/29
        Time: 12:31
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>list</title>
      </head>
      <body>
      <%
          List list=new ArrayList();
          list.add(new User(100,"lijie","m","12345678901"));
          list.add(new User(101,"lijie","m","12345678901"));
          list.add(new User(102,"lijie","m","12345678901"));
          list.add(new User(103,"lijie","m","12345678901"));
          list.add(new User(104,"lijie","m","12345678901"));
          request.setAttribute("list",list);
      %>
      <table border="1" width="500" align="center" style="text-align: center">
          <tr>
              <th>编号</th>
              <th>姓名</th>
              <th>性别</th>
              <th>电话</th>
          </tr>
          <c:forEach items="${list}" var="user" varStatus="s">
              <c:if test="${s.count mod 2 ==0}">
                  <tr bgcolor="#f0f8ff">
                      <td>${user.uid}</td>
                      <td>${user.name}</td>
                      <td>${user.gender}</td>
                      <td>${user.tel}</td>
                  </tr>
              </c:if>
              <c:if test="${s.count mod 2 ==1}">
                  <tr>
                      <td>${user.uid}</td>
                      <td>${user.name}</td>
                      <td>${user.gender}</td>
                      <td>${user.tel}</td>
                  </tr>
              </c:if>
      
          </c:forEach>
      </table>
      </body>
      </html>
      

5. 三层架构

  1. 概念:一种软件设计架构

  2. 分层:

    1. 界面层:用户界面 web 框架:SpringMVC
    2. 业务逻辑层:处理业务逻辑 service 框架:Spring(集大成者)
    3. 数据访问层:操作数据存储文件 dao 框架:Mybatis
  3. 案例:用户信息列表查询展示

    1. 需求:用户信息的增删改查

    2. 设计:

      1. 技术选型:Servlet 、JSP、MySQL、JDBCTemplate、Duird、BeanUtils、Tomcat

      2. 数据库设计:

        create database user;
        use user;
        create table user(
        	id int primary key auto_increment,
            name varchar(20) not null,
            gender var(2),
            age int,
            address varchar(32),
            qqnum varchar(20),
            email varchar(30)
        );
        
      3. 开发:

        1. 环境搭建:
          1. 创建功能键数据库环境
          2. 创建项目,导入依赖
        2. 编码
      4. 测试

      5. 部署运维

    3. 代码流程

      1. 首先创建数据库并导入数据
      2. 创建数据实体类,定义get和set方法
      3. 创建dao包,用来处理数据操作,首先定义接口,然后再去impl子路径实现接口方法
      4. 创建service包,处理业务逻辑
      5. 创建servlet包,设置页面数据
posted @ 2020-04-27 00:27  codesucks  阅读(222)  评论(0)    收藏  举报