JSP概原

1. 概念

  1. - **概念:**
  2. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581841278273-26edf4ee-42df-4884-a1bd-1ee92e913eed.png#align=left&display=inline&height=98&name=image.png&originHeight=98&originWidth=1046&size=137787&status=done&style=none&width=1046)
  3. - **原理:**
  4. - JSP本质上就是一个Servlet
  5. - **JSP的脚本**:JSP定义JAVA代码的方式
  6. - <% 代码 %>:定义的java代码,service中定义啥,这里就可以定义啥
  7. - <%! 代码 %>:在jsp转换后的java类的成员位置.
  8. - <%= 代码 %>:会全员输出到页面上,相当于println();<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582949717243-4cf3743d-c241-4945-949b-99d68a621773.png#align=left&display=inline&height=155&name=image.png&originHeight=309&originWidth=800&size=29665&status=done&style=none&width=400)
  9. - **JSP内置对象(9个)**:
  10. - JSP页面中不需要获取和创建,可以直接使用的对象
  11. - **其中的三个:(注意response输出的最早即可,最好只用out)**![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581843325546-9486c996-95f2-4059-8bcb-52a91bdfa46a.png#align=left&display=inline&height=186&name=image.png&originHeight=186&originWidth=1231&size=293184&status=done&style=none&width=1231)
  12. - 注:在jsp中可以任意截断代码(使用<% %> 来添加html标签),而且不用声明编码

2. 指令(第一行)

  1. - 作用:用于配置JSP页面,导入资源文件
  2. - 格式:(一般放在JSP文件的第一行)
  3. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581934940165-30625347-e07f-4050-9ee1-f100af759bc6.png#align=left&display=inline&height=35&name=image.png&originHeight=35&originWidth=823&size=59495&status=done&style=none&width=823)
  4. - 分类:
  5. - **page**:配置JSP页面的<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581935067201-6e9ec102-a777-418f-b36f-0bf3bfd3268f.png#align=left&display=inline&height=254&name=image.png&originHeight=254&originWidth=1074&size=398837&status=done&style=none&width=1074)
  6. - **include**:页面包含的,导入页面的资源文件(可以直接展示另一个页面,也就是把代码的一部分放到了另一个文件中了)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581935160812-0178f127-bafc-4f33-b914-07475b02e679.png#align=left&display=inline&height=35&name=image.png&originHeight=35&originWidth=421&size=32554&status=done&style=none&width=421)
  7. - **taglib:**导入资源(如果不导入,只能使用jsp自带的标签和html的标签)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581940264371-e70b4601-bf77-46bd-b8f8-6819869ece20.png#align=left&display=inline&height=67&name=image.png&originHeight=67&originWidth=953&size=92176&status=done&style=none&width=953)

3. 注释

  1. - **html注释**(注释完之后还可以在网页的response响应中获取源码)<br /><!-- -->:只能注释html代码
  2. - **jsp注释**:推荐使用(注释完网页无法获取代码信息)<br /><%-- --%>:可以注释所有

4. 内置对象

  1. - 概念:在jsp页面中不需要创建,直接使用的对象(笔试经典,写名字)
  2. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581941735993-ff932243-4aff-4d24-afe1-9978d553daaa.png#align=left&display=inline&height=328&name=image.png&originHeight=328&originWidth=1356&size=485824&status=done&style=none&width=1356)

5. MVC开发模式

  1. - jsp演变历史
  2. - 早期的servlet,只能使用response输出标签,非常麻烦
  3. - 后来的jsp,简化了servlet的开发,如果过度的使用jsp,在jsp中写大量的其他代码,会难以维护与分工
  4. - 再后来,javaweb开发借鉴了mv开发模式,使得程序的设计更加的合理
  5. - MVC
  6. - 逻辑原理<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581955728054-cc56204f-6ec2-4a92-92ba-216b6bc6abad.png#align=left&display=inline&height=542&name=image.png&originHeight=542&originWidth=871&size=188004&status=done&style=none&width=871)
  7. - 解释![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581955670024-9a489dff-b95f-4f4f-9b64-493534b13bc8.png#align=left&display=inline&height=253&name=image.png&originHeight=253&originWidth=706&size=187848&status=done&style=none&width=706)
  8. - 优缺点
  9. - 优点<br />1. 耦合性低,方便维护,可以利于分工协作<br />2. 重用性高
  10. - 缺点<br />1. 使得项目架构变得复杂,对开发人员要求高

EL表达式

1. 概述

  1. - 概念:Expression Language 表达式语言
  2. - 作用:替换和简化jsp页面中java代码的编写
  3. - 语法:${ 表达式 }
  4. - 注意:
  5. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581959959359-26457da5-e9ed-4eea-9e85-a4b717d62df2.png#align=left&display=inline&height=101&name=image.png&originHeight=101&originWidth=1054&size=159008&status=done&style=none&width=1054)
  6. - 使用:
  7. - 运算<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581960420701-d90956da-ebc2-4932-9e41-c15c77edbd21.png#align=left&display=inline&height=217&name=image.png&originHeight=217&originWidth=943&size=206596&status=done&style=none&width=943)

2. 获取值

  1. - el表达式只能从域对象中获取值
  2. - 语法
  3. - ${ 域名称 . 键名 }:从指定域中获取指定键的值<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1581962136746-88b307d7-e935-488b-abd3-1a3c71b2639d.png#align=left&display=inline&height=216&name=image.png&originHeight=216&originWidth=786&size=206137&status=done&style=none&width=786)
  4. - ${ 键名 }:依次从最小的域中查找是否有该键对应的值,直到找到为止
  5. - 如果这个值是个对象,那么可以直接使用getxxx的方法获取值,将get去掉,其余小写,加在建名后边,用点隔开
  6. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582007083498-e63dcadb-1dc9-4fb7-a921-7f26f4a3d6d4.png#align=left&display=inline&height=646&name=image.png&originHeight=646&originWidth=536&size=283335&status=done&style=none&width=536)
  7. - 直接获取值(这样比较准确,去掉requestScope也可以)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582007207851-795ab29a-da2f-4412-8c58-f2fcd91d9d52.png#align=left&display=inline&height=36&name=image.png&originHeight=36&originWidth=546&size=27722&status=done&style=none&width=546)
  8. - 日期格式中的getMonth也可以直接.month
  9. - 可以自定义方法,返回一个字符串,可以展示在页面<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582008944550-9afdfeb4-2827-4250-97f4-46e2028f7843.png#align=left&display=inline&height=126&name=image.png&originHeight=126&originWidth=732&size=10747&status=done&style=none&width=732)
  10. - 获取对象,List集合,Map集合的值
  11. - 对象:${ 域名称 . 键名 . 属性 }<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582009649279-1ff02f60-2e28-4f7e-aea7-f20f8eda30d0.png#align=left&display=inline&height=34&name=image.png&originHeight=34&originWidth=433&size=35904&status=done&style=none&width=433)
  12. - List集合:${ 域名称 . 键名 [ 索引 ] }
  13. - Map集合:<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582009709881-096c9380-4338-4a76-aa59-c9225e2aa84a.png#align=left&display=inline&height=69&name=image.png&originHeight=69&originWidth=380&size=60397&status=done&style=none&width=380)

3. 隐式对象

  1. - el表达式中有11个隐式对象
  2. - pageContext:(用来获取jsp其他八个内置对象,最重要的用法如下)
  3. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582010357892-a35ea753-f742-4f29-8894-93b35082c219.png#align=left&display=inline&height=40&name=image.png&originHeight=40&originWidth=796&size=58995&status=done&style=none&width=796)
  4. - 这个东西可以直接添加到目录中,返回的本质就是字符串

JSTL相关

1. 概念

  1. - 概念:
  2. - JavaServer Pages Tag Library JSP标准标签库)
  3. - Apache组织提供的开源的免费的jsp标签 <标签>
  4. - 作用:
  5. - 用于简化和替换jsp页面上的java代码
  6. - 使用步骤
  7. - 导入jstl相关的jar
  8. - 引入标签库:taglib指令:<%@ taglib %>
  9. - 使用标签

2. 标签的添加

  1. - 先创建两个package,命名一定<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582015456970-cfede8fe-afdc-440a-92aa-6d2d6008f9c7.png#align=left&display=inline&height=61&name=image.png&originHeight=61&originWidth=235&size=2437&status=done&style=none&width=235)
  2. - 再将官网下载的html文件导入lib中(这奇怪的绿色不知道哪里来的。。。)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582015536085-05d08d59-fbab-49f4-ae43-343e6aa8f88f.png#align=left&display=inline&height=80&name=image.png&originHeight=80&originWidth=208&size=3063&status=done&style=none&width=208)
  3. - 右键lib文件添加为library<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582015620200-907ca41e-356c-4f1f-be77-1333c02ff0e8.png#align=left&display=inline&height=619&name=image.png&originHeight=619&originWidth=587&size=56062&status=done&style=none&width=587)
  4. - 选择这个(然后文件就安排了)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582015656597-76cc2b56-ffd5-47fd-85c0-a2fdf8dc64ff.png#align=left&display=inline&height=224&name=image.png&originHeight=224&originWidth=510&size=13246&status=done&style=none&width=510)
  5. - 配置问题(没错,就是这个最新的版本的,虽然下载的版本有点老)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582015752417-58bf0deb-6529-4698-b2e9-eb4ad03caf45.png#align=left&display=inline&height=372&name=image.png&originHeight=372&originWidth=965&size=47715&status=done&style=none&width=965)
  6. - 然后就可以用了<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582015810002-07c909d5-1a9c-442a-8144-4c65c7500938.png#align=left&display=inline&height=341&name=image.png&originHeight=341&originWidth=663&size=33322&status=done&style=none&width=663)

3. 标签的使用

  1. - if标签:相当于java中的if
  2. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582020482085-f1f7d513-f8fd-4782-8de3-5aff1c6f444d.png#align=left&display=inline&height=255&name=image.png&originHeight=255&originWidth=1041&size=290853&status=done&style=none&width=1041)
  3. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582020351571-25dcc00c-c2fd-4ede-9719-c13136a4329f.png#align=left&display=inline&height=369&name=image.png&originHeight=369&originWidth=513&size=20218&status=done&style=none&width=513)
  4. - choose标签:相当于switch
  5. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582023269094-78f72017-40cf-4d1d-aa52-fccd1dbc6d53.png#align=left&display=inline&height=102&name=image.png&originHeight=102&originWidth=805&size=129499&status=done&style=none&width=805)
  6. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582023253477-e2287fb1-0df9-4744-a094-1601c0a9f366.png#align=left&display=inline&height=357&name=image.png&originHeight=357&originWidth=482&size=28904&status=done&style=none&width=482)
  7. - foreach:相当于java中的for
  8. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582027504508-e8b45caf-73a9-415f-8516-0c34b106aa20.png#align=left&display=inline&height=650&name=image.png&originHeight=650&originWidth=985&size=245798&status=done&style=none&width=985)
  9. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582027776842-d20d138a-206d-4618-847f-dc6fef17d876.png#align=left&display=inline&height=435&name=image.png&originHeight=435&originWidth=1042&size=235939&status=done&style=none&width=1042)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1582027799698-1f681bc5-33b0-4185-9a0f-b6bc8017d0d2.png#align=left&display=inline&height=98&name=image.png&originHeight=98&originWidth=493&size=21423&status=done&style=none&width=493)

三层架构image.png