[TOC]

1. JSP

即,java server page,java服务器端页面。

一个特殊的html页面,里面既可以包含html代码,也可以写java代码。

简化书写:

jsp本质是一个servlet.

1.1 jsp注解

1
2
3
4
5
1.html注释:
<!-- --> 只能注释jsp页面中的html代码

2.jsp注释:
<%-- --%> 可以注释所有的jsp页面内的代码

1.2 jsp脚本语法

1
2
3
4
5
6
7
8
9
java代码直接放到service方法中的
<% 代码 %>

代码会放到类的成员位置上。
<%! 代码 %>

java代码,会输出到页面上,输出语句中能怎么写代码,这个地方就可以怎么写。
<%= 代码 %>

1.3 jsp九大内置对象

jsp页面中的不需要创建,就可以直接使用的对象。

一共有九个!

变量名 类型名 作用
pageContext PageContext ==当前页面内部共享数据==,通过当前对象可以获取其他的8个内置对象。
request HttpServletRequest 一次请求创建一个request对象,==在一次请求中共享数据==
session HttpSession ==一次会话中多个请求共享数据==
application ServletContext 全局共享数据的对象
response HttpServletResponse 响应的对象
exception Throwable 异常对象
config ServletConfig 获取servlet配置信息的
out JspWriter 输出对象,数据输出到页面上
page Object this,指代的就是当前的servlet对象

response.getWriter()和jsp中out的区别:

​ tomcat服务器给客户端做出响应的时候,会先去找response缓存区的数据,然后在去找out缓存区的数据。

1.4 jsp指令

作用:用于配置jsp页面,导入资源文件

<%@指令名称 属性名=属性值 属性名1=属性值1 %>

page指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--
设置响应的mime类型,设置字符集
在高级的开发工具中,文件的存储格式也会自动变成设置的字符集的编码格式
--!>

contentType:“text/html;charset=UTF-8”;
import="";导包

errorPage 错误页面
配置当前的jsp页面出现异常后跳转到哪个页面去。

isErrorPage:true,false
标志当前页面是不是一个错误页。
只有为true的时候,当前页面中才能使用exception内置对象。

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.ArrayList" errorPage="500.jsp" %>

include指令

1
2
include指令
<%@ include file="moudle.jsp" %>

taglib 导入资源指令

taglib 导入资源的指令
        <%@ taglib uri="" prefix="c" %>
        uri="http://java.sun.com/jsp/jstl/core"";

2. MVC演变过程

  1. 早期开发的时候用servlet来做动态页面响应,效率太低。
  2. jsp技术出现了,让动态页面写起来变得简洁了。在过度的过程中,jsp页面中不仅仅只有html的内容,还有大量的java代码,维护特别难,很难分工合作
  3. java的web开发,借鉴了mvc的开发模式,让程序的设计变得更加的合理。
1
2
3
4
5
6
7
graph TD;
mvc-->m
mvc-->v
mvc-->c
m-->model模型:javaBean;
v-->view视图:jsp
c-->controller控制器:servlet

1.获取用户的输入
2.调用模型
3.将数据移交给视图进行展示==???????????????????????????????????????????????????????????????????????????????????/==

2.1 mvc优缺点

优点:

  1. 耦合度低,方便维护,分工协作。
  2. 代码的复用性变高。

缺点:

  1. 结构变得复杂了。

3.EL表达式

概念:JSP内置的Expression language 表达式语言

作用:用来简化jsp页面中的java代码的编写。

语法结构:==${el表达式};==

3.1 EL表达式使用注意点

  1. jsp默认支持el表达式,如果想要当前页面不支持el表达式,

    1. page指令中设置 ==isELIgnored=”true”==忽略当前页面中的所有的el表达式。
    2. ${el}:忽略当前这个el表示。
  2. 运算

    1. 数学运算符:+-
    2. 比较运算符:> < =
    3. 逻辑运算符:&& || ! and or not
    4. 空运算符:empty 判断字符串集合,数组的对象是否为null或者是否他们的长度为
  3. JSP2.0开始,不让再使用Java脚本,而是使用EL表达式和动态标签来代替Java脚本。EL替代的是<%=… %>,也就是说EL只能做输出

3.2 EL表达式中的11个隐式对象

内置对象 作用 等效于
pageScope 获取pageContext域属性 ==pageContext.getAttribute(“xxx”)==
requestScope 获取request域属性 ==request.getAttribute(“xxx”)==
sessionScope 获取session域属性 ==session.getAttribute(“xxx”)==
applicationScope 获取application域属性 ==application.getAttribute(“xxx”)==
param 对应参数,它是一个Map,其中key是参数,value是参数值,适用于单值的参数 ==request.getParameter(“xxx”)==
paramValues 对应参数,他是一个Map,其中key是参数,value是多个参数值,适用于多值的参数 request.getParameterValues(“xxx”)
header 对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值的请求头 request.getHeader(“xxx”)
headerValues 对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值的请求头 request.getHeaders(“xxx”)
initParam 获取web.xml中内的参数,${ initParam.xxx},xxx就是标签内的值,进而得到中的值
cookie 用于获取cookie,Map<String,Cookie>,其中key是cookie的name,value是cookie对象, ${cookie.JSESSIONID.value }就是获取sessionId
pageContext 可以获取JSP九大内置对象,相当于使用该对象调用getxxx()方法。 pageContext.getRequest()可以写为==${pageContext.request)==

4. jstl

java Server tag library jsp的标准标签库

作用:简化和替换jsp页面上的java代码。

JSTL的表达式中,不能随意出现空格,否则会导致整个语句false;

4.1 使用步骤:

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

4.2 常用的jstl标签

if:

相当于java代码的if语句。

  1. 属性:test 必须有的属性,接收boolean类型的表达式。
  2. 一般情况下,test属性值会和el表达式混合使用。

2.注意:
c:if标签中没有else方法,如果想要使用else方法,可以重新在添加一个c:if语句。

chooses:

choose 相当于java中的switch声明。
使用when标签页做判断,相当于是case.

使用otherwise标签做其他情况的声明:相当于 default;

forEach:

相当于java代码中的for语句

foreach语句:

  1. (遍历集合)
        items:容器对象。
           var:容器中遍历的每一个元素
           varStatus:循环状态的对象。
                 index:索引号,集合从0开始
                 count:计数器:从1开始
    
  2. (遍历常量)
        begin:开始值
           end:结束的值
           var:循环遍历到的每一个值
           step:步长,由当前值到下一个值变化的量。
           varStatus:
                 index: var里面的值count:循环次数,计数器,从1开始。