JSP详解----

JSP详解

概念

jsp(java server pages):

java服务器端页面,可以理解为一个特殊的页面,其中既可以定义html,也可以定义java代码

用于简化书写!!!

原理

jsp本质上就是servlet

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nGsgCwp6-1631205417783)(C:\Users\Sir. Alexander\Downloads\未命名文件 (1)].jpg)

JSP指令

  1. jsp指令:用于配置JSP页面,导入资源文件

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

  3. 分类:

    • page:配置 JSP页面

      content-type: 等同于response.setContentType()

      1.设置响应体的mime类型及字符集 。

      2.设置当前JSP页面的编码(只有高级的IDE才能生效,如果使用低级工具,则需要使用pageEncoding属性来设置当前页面的字符集编码)。

      language: 页面的语言(只写"java")。

      buffer: 设置缓冲区大小。

      import:用来导包,将来会写到jsp文件生成的servlet类当中去。

      errorPage:当前页面发生异常时,会自动跳转到指定的异常页面。

      isErrorPage:标识当前页面是否时异常页面。为true的话,可以使用内置对象exception。默认情况下为false。

    • include:导入页面的资源文件可以用来导入其他 JSP文件

      例如<%@ include file=“head.jsp” %>

    • taglib:导入资源

      例如<%@ taglib prefix=“c” uri=“XXXXXX” %>

JSP注释

1.html注释: ,只能用于注释html标签

2.jsp注释:<%-- --%>,可以注释所有内容(推荐使用)

JSP脚本

jsp脚本:jsp定义定义Java代码的方式

  1. <% 代码 %>:定义的代码在service方法中。service方法中可以定义什么,该脚本就可以定义什么。

  2. <%! 代码 %>:定义的代码,在JSP转换为servlet的代码后,位于成员变量位置。

  3. <%= 代码 %>:定义的代码,会输出到页面,输出语句可以定义什么,该脚本就可以定义什么。

JSP内置对象

  1. jsp内置对象:在jsp页面中,不需要获取和创建,可以直接使用的对象。

  2. jsp一共有9个内置对象:前四个为域对象

    变量名真实类型作用
    pageContext(域对象)PageContext当前页面共享数据,还可以获取其他八个内置对象
    request(域对象)HttpServletRequest一次请求访问的多个资源之间共享数据(请求转发)
    session(域对象)HttpSession一次会话的多个请求间共享数据
    application(域对象)ServletContext所有用户间共享数据
    responseHttpServletResponse响应对象
    pageObject当前页面(servlet)的对象,可以理解为this
    outJspWriter输出对象,将数据输出到页面
    configServletConfigservlet的配置对象
    exceptionThrowable异常对象,只有在声明了isErrorPage=true的页面可以使用
  • request

  • response

  • out:字符输出流对象,可以将数据输出到页面上。和response.getWriter()类似

    ​ response.getWriter().write()和out.write()的区别:

    ​ 在tomcat真正给浏览器做出响应之前,会先找response.getWriter()输出流的缓冲区,再找out输出流的缓冲区,所以 response.getWriter().write输出的数据永远在out.write()输出的数据之前

  • pageContext

  • session

  • application

  • page

  • config

  • exception

MVC开发模式

jsp演变历史

  1. 早期只有servlet,只能使用response输出标签数据,非常麻烦、
  2. 后来有了JSP,简化了servlet的开发,但过度使用jsp,在jsp中既写Java代码,又写html标签,难于维护
  3. 再后来,Java的web开发借鉴了MVC开发模式,使得程序的设计更加具有合理性

MVC开发模式

M:model(模型)用JavaBean实现,完成具体的业务操作如:查询数据库,封装对象

V: view(视图) 用JSP实现,用于展示数据

C:controller(控制器)用Servlet实现,用于:1.获取用户的输入 2.调用模型 3.将数据交给view来展示

MVC的优缺点

优点:1.耦合性低,方便维护,便于分工合作 2.重用性高

缺点:1.使得项目的架构变得复杂,对开发人员要求变高

​ 2.不适合中小型项目

EL表达式

概念:

Expression Languuage 表达式语言

作用:

替换和简化jsp页面中Java代码的编写

语法:

${表达式}

  1. 注意:jsp默认是支持el表达式的,如果不想el被解析,(1)则需要在jsp的指令配置中将isELIgnored=“true”(不解析所有的el), (2)或者在el表达式前加上,例如 \${3>4}

  2. 使用:

    • 运算

      运算符符号
      算术运算符+ - * /
      比较运算符> < >= <= == !=
      逻辑运算符&&(and) ||(or) !(not)
      空运算符empty(用于判断字符串,集合,数组对象是否为null或者长度为0)
    • 获取值:

      el表达式只能从域对象中获取值,如果el没有找到对应的键名,el会返回空字符串,而不是null或其他,这样不会影响页面布局

      语法:

      • ${域名.键名}:从指定域中获取指定键的值
      域名对应的域对象
      pageScopepageContext
      requestScoperequest
      sessionScopesession
      applicationScopeapplication

      举例:在request域中存储了name=张三 ,获取:${requestScope.name}

      • ${键值}:只写了键名并且多个域对象设置了相同的键名时,按域对象范围从小到大,找指定的值
      <%@ page contentType="text/html;charset=GBK" language="java" %>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <%
      request.setAttribute("张三",1914111111);
      session.setAttribute("李四","你是一个笨蛋");
      pageContext.setAttribute("王五","teacher1");
      application.setAttribute("name","hhaahhaa");
      application.setAttribute("王五","teacher2");
      %>
      
      
      ${ 张三 }   
      ${李四}
      ${王五}
      ${applicationScope.王五}
      ${name}
      </body>
      </html>
      
      • 获取 对象、list集合、map集合 的值

        1. 获取对象的属性: ${域名称.键名.属性名}

          el表达式获取对象属性的原理:

        ​ 例如:el要获取Student 类里面 的name 属性,它会找Student类里面的 getName()方法,并将其返回值作为输出,出,如果没有对应的getter方法,则会报错。

        1. 获取list集合内的元素: ${ 域名称.键名[索引] } ps:角标越界会输出空字符串而不是null

        2. 获取map集合内的元素: ${ 域名称.键名.key名} 或者 ${ 域名称.键名[“key名”]} ps:找不到key名会输出空字符串而不是null

隐式对象:

  1. el表达式中有11个隐式对象(可以在el表达式中直接使用)

  2. pageContext:

    功能:获取jsp其他8个内置对象

    例如: ${pageContext.request.contextPath} (动态获取虚拟目录)

JSTL标签

概念:

javaserver pages tag library (jsp标准标签库),是由apache组织提供的开源免费的jsp标签

作用:

用于简化和替换jsp页面上的Java代码

使用步骤:

  1. 导入jstl相关的jar包
  2. 引入标签库:taglib指令<%@ taglib %>
  3. 使用标签

常用的jstl标签:

  1. if标签:相当于if语句

    属性:test为必要属性,接受Boolean类型的值,一般情况test属性值会结合el表达式一起使用,如果表达式为true,显示标签体内的内容;如果为false,则不显示

    注意:if标签没有else,如果想用,在添加一个if标签即可

  2. choose标签:相当于switch语句

    使用:1. 使用choose标签声明 (相当于switch)2.使用when标签选择(相当于case)3.使用otherwise标签做其他情况声明(相当于default)

  3. foreach标签:相当于for语

    功能:1. 执行重复操作 2.遍历容器

    执行重复操作属性: begin(起始值) end(结束值) var(临时变量) step(步长) varStatus(循环状态对象,有两个属性值,index:循环的索引,从0开始;count:循环的次数,从1开始)

    遍历容器属性:items(容器对象) var(临时变量) varStatus(循环状态对象,有两个属性值,index:循环的索引,从0开始;count:循环的次数,从1开始)

<%@ page import="cn.zgq.javaweb.Student" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
        <%

        Student student = new Student("董",20,new Date());
            HashMap hashMap = new HashMap();
            hashMap.put("name","佳节");
            hashMap.put("details",student);
            session.setAttribute("hashMap",hashMap);
            session.setAttribute("num", 3);

        %>
        <h1>if标签的用法</h1>
        ${num}
<c:if test="true">
    大家好,我是渣渣辉
</c:if>
<c:if test="${num mod 2==0}">
    <h2>我是偶数</h2>
</c:if>
<c:if test="${num mod 2==1}">
    <h2>我是奇数</h2>
</c:if>

<h1>choose 标签的用法</h1>
<c:choose>
    <c:when test="${num==1}"><h2>星期一</h2></c:when>
    <c:when test="${num==2}"><h2>星期二</h2></c:when>
    <c:when test="${num==3}"><h2>星期三</h2></c:when>
    <c:when test="${num==4}"><h2>星期四</h2></c:when>
    <c:when test="${num==5}"><h2>星期五</h2></c:when>
    <c:when test="${num==6}"><h2>星期六</h2></c:when>
    <c:when test="${num==7}"><h2>星期天</h2></c:when>
    <c:otherwise ><h2>num值错误</h2></c:otherwise>
</c:choose>
<h1>for标签的用法</h1>
<c:forEach begin="1" end="10" step="2" var="i">
 <h2>${i}</h2>
</c:forEach>
<c:forEach items="${hashMap}" var="h" varStatus="s">
    <h2>${h} "第"+${s.count}+"个"  </h2>
    <h2>${h} "索引为"+${s.index}+"个"</h2>

</c:forEach>
</body>
</html>

三层架构

  1. 概念:软件设计架构

  2. 详情

    • 界面层:用户看得见的界面。用户可以通过界面上的组件和服务器进行器件。

    • 业务逻辑层:处理业务逻辑。

    • 数据访问层:操作数据存储文件。
      r=“i”>

${i}

${h} "第"+${s.count}+"个"

${h} "索引为"+${s.index}+"个"

</c:forEach>




# 三层架构

1. 概念:软件设计架构

2. 详情

   - 界面层:用户看得见的界面。用户可以通过界面上的组件和服务器进行器件。

   - 业务逻辑层:处理业务逻辑。
   - 数据访问层:操作数据存储文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值