文章目录

  • JSP (Java Server Pages)
    • JSP原理
    • JSP脚本
    • JSP内置对象
      • response.getWriter() 和 out 的区别
    • JSP指令
      • JSP指令格式
      • JSP指令分类
        • include:导入页面的资源文件
          • 属性
        • page:配置JSP页面
          • 属性
        • taglib:导入资源
    • JSP注释
      • HTML注释
      • JSP注释
    • MVC开发模式
    • EL表达式
      • EL表达式语法
      • EL运算符
        • 算数运算符
        • 比较运算符
        • 逻辑运算符
        • 空运算符
      • EL获取域中的值
        • EL取值语法
        • EL获取对象值
        • EL获取List中的值
        • EL获取Map中的值
    • JSTL
      • 步骤
      • 常用的JSTL标签
        • ① if
          • 属性
        • ② choose
          • 相关标签
        • ③ foreach
          • 属性
          • 作用
    • 三层架构
      • 界面层(表示层 / web层)
      • 业务逻辑层(service层)
      • 数据访问层(操作层 / DAO层)

JSP (Java Server Pages)

JSP全称Java Server Pages(Java服务器页面),是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束

JSP可以理解为一个特殊的页面,其中可以定义HTML标签和Java代码,用于简化书写

JSP原理

  1. 服务器解析请求消息,寻找是否存在index.jsp资源
  2. 如果寻找到index.jsp,会将index.jsp转换为.java文件
  3. 编译.java文件并生成.class字节码文件
  4. 最后由字节码文件提供访问

JSP本质上是一个Servlet

JSP脚本

JSP用来定义Java代码的方式

① <% Java代码 %>:定义的Java代码在service方法中,service方法中可以定义的内容均可以在这里定义

② <%! Java代码 %>:定义的Java代码在JSP装换的Java类中的成员位置,可以定义成员变量,成员方法等

③ <%= Java代码 %>:定义的Java代码会输出到页面上,可以定义输出语句内的内容

JSP内置对象

在JSP页面中不需要创建获取,可以直接使用的对象

变量名 真实类型 作用
request HttpServletRequest 请求对象
response HttpServletResponse 响应对象
out JspWriter 输出流对象,与response.getWriter()相似
pageContext pageContext 当前页面共享数据,还可以获取其他8个内置对象
session HttpSession 一次会话的多个请求件共享数据
application ServletContext 所有用户之间共享数据
page Object 当前页面对象
config ServletConfig Servlet的配置对象
exception Throwable 异常对象

response.getWriter() 和 out 的区别

<body><%response.getWriter().write("this is response");%><%out.print("this is out");%>
</body>

以上代码定义了两个JSP脚本用来输出内容到页面,正常情况下,程序应当按照顺序执行,即先执行response输出再执行out输出,输出结果也证明了这一点

如果我们将两个脚本换一下位置

<body><%out.print("this is out");%><%response.getWriter().write("this is response1");%>
</body>

这时按照正常思路,应当先执行out输出,再执行response输出,然而输出结果却依然是先执行了response输出

这是因为在tomcat服务器给客户端做出响应之前,会先从response缓冲区中寻找数据,再去out缓冲区中寻找数据,所以response.getWriter()的输出永远在out之前

JSP指令

用于配置JSP页面,导入资源文件

JSP指令格式

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

多个属性之间用空格隔开

JSP指令分类

include:导入页面的资源文件
属性

· file:要导入的页面资源文件

page:配置JSP页面
属性

① contentType:等同于response.setContentType(),可以设置响应体的MIME类型以及字符集,和当前JSP页面的编码(仅限高级IDE)

② pageEncoding:设置当前JSP页面的编码

③ buffer:设置缓冲区大小

④ import:导入包

⑤ errorPage:当前页面发生异常后会自动跳转到指定的错误页面

⑥ isErrorPage:标识当前页面是否为错误页面,默认为false若标注当前页面为错误页面,则可以使用内置对象exception

taglib:导入资源

① prefix:自定义前缀

② uri:导入资源的位置

JSP注释

HTML注释

<!-- -->

HTML注释只能注释HTML代码片段

JSP注释

<%-- --%>

可以注释所有内容

MVC开发模式

M:Model,即模型,用来完成具体的业务操作 ——JavaBean

V:View,即视图,用来展示数据——JSP

C:Controller,即控制器,用来获取请求参数,调用模型,将数据交给视图来展示——Servlet

EL表达式

Expression Language 表达式语言,可以替换和简化JSP中Java代码的书写

EL表达式语法

${ 表达式 }

JSP中是默认支持EL表达式的,如果不希望JSP解析EL表达式,可以使用两种方法

  1. 设置page指令中的isElIgnoredtrue,设置之后JSP中的所有EL表达式都会被忽略
  2. 在EL表达式之前添加\ ——\${}可以忽略单个EL表达式

EL运算符

算数运算符
运算符 描述
+ 加法
- 减法
* 乘法
/ (div) 除法
% (mod) 取余
<body>
<h4>算数运算符</h4>
${1 + 1}<br>
${2 - 1}<br>
${4 / 2}<span>等同于</span>${4 div 2}<br>
${5 % 3}<span>等同于</span>${5 mod 3}<br>
</body>

显示结果为

算数运算符
2
1
2.0等同于2.0
2等同于2
比较运算符
运算符 描述
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
<body>
<h4>比较运算符</h4>
${1 > 2}<br>
${3 < 5}<br>
${3 == 3}<br>
${3 != 3}<br>
</body>

显示结果为

比较运算符
false
true
true
false
逻辑运算符
运算符 描述
&& (and) 与运算
|| (or) 或运算
! (not)
<body>
<h4>逻辑运算符</h4>
${true && false}<span>等同于</span>${true and false}<br>
${true || false}<span>等同于</span>${true or false}<br>
${!true}<span>等同于</span>${not true}<br>
</body>

显示结果为

逻辑运算符
false等同于false
true等同于true
false等同于false
空运算符
运算符 描述
empty 判断字符串,集合,数组的对象是否为null、长度是否为0
<body><%List list = new ArrayList();String str = "123";request.setAttribute("List",list);request.setAttribute("String",str);%>${empty List}${empty String}
</body>

显示结果为

true false

EL获取域中的值

EL表达式只能从域对象中获取值

EL取值语法
  1. ${域名称.键名} 从指定的域中获取指定键的值
域名称 获取值的对象
pageScope pageContext
requestScope request
sessionScope session
applicationScope application(ServletContext)
<body><%// 存储数据request.setAttribute("request","msgR");session.setAttribute("session","msgS");pageContext.setAttribute("page","msgP");application.setAttribute("application","msgA");%><p>获取值</p>${requestScope.request}${sessionScope.session}${pageScope.page}${applicationScope.application}
</body>

显示结果

获取值
msgR msgS msgP msgA
  1. ${键名}

在这中写法下,会从最小域开始依次寻找指定键名的对应值,直到寻找到为止

<body><%// 存储数据request.setAttribute("request","msgR");session.setAttribute("msg","msgS");pageContext.setAttribute("msg","msgP");application.setAttribute("application","msgA");%><p>获取值</p>${msg}
</body>

显示结果

获取值
msgP

由于pageContext域对象的范围要小于session,所以当找到ageContext中的对应值后即会输出,若希望使用session中的对应值,则需要添加域名称

EL获取对象值

${域名称.键名.属性名}

本质上会调用对象对应属性的getter方法

示例代码

<body><%Person p = new Person();p.setName("Person");p.setAge(20);p.setSex("M");request.setAttribute("Person",p);%><p>获取对象值</p>${requestScope.Person}
</body>

若直接获取对象,则会将对象的地址值输出出来

获取对象值domain.Person@13adae1

若希望获取对象的详细值,则需要通过对象的属性来获取

对象的属性指的是,在gettersetter中,去掉getset,然后将剩下的内容首字母变小写,得到的内容则为对象的属性

在示例代码中,Person类存在一个setName()方法,以此为例

方法名 去掉get或set 属性名
setName Name name

即Person类存在一个属性为name,可以通过这个属性来获取Person的name值

${requestScope.Person.name}

输出结果为

获取对象值Person
EL获取List中的值

${域名称.键名[索引]}

<body><%List list = new ArrayList();list.add("a");list.add("b");list.add("c");request.setAttribute("List",list);%><p>获取List值</p>${requestScope.List}
</body>

若直接获取List,则会输出List的所有内容

获取List值[a, b, c]

通过添加索引可以获取List中指定的内容

${requestScope.List[0]}
获取List值a

如果出现下标越界的情况,EL表达式会直接输出空字符串而不会报错

若List中存储了一个对象,通过索引和属性也可以输出对象的具体属性值

<body><%Person p = new Person();p.setName("P");List list = new ArrayList();list.add("a");list.add("b");list.add("c");list.add(p);request.setAttribute("List",list);%><p>获取List值</p>${requestScope.List[3].name}
</body>

输出结果为

获取List值P
EL获取Map中的值

${域名称.键名.key}

${域名称.键名[“key”]}

<body><%Map map = new HashMap();map.put("name","name");map.put("age",20);request.setAttribute("Map",map);%><p>获取Map值</p>${requestScope.Map.name}${requestScope.Map["age"]}
</body>

输出结果为

获取Map值name 20

同样的,如果Map中也存放了对象,同样可以使用key和属性名来获取对象的属性值

JSTL

JavaServer Page Tag Library JSP标准标签库

由Apache提供的开源JSP标签,用于简化和替换JSP中的Java代码

步骤

  1. 导入JSTL jar包
  2. 使用taglib指令引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  1. 使用标签

常用的JSTL标签

① if

相当于Java中的if语句

属性

test:必须属性,接受boolean表达式,如果表达式为true则显示内容,为false则不显示内容

<body><c:if test="true">显示内容</c:if><c:if test="false">不显示内容</c:if>
</body>

一般情况下,test的属性值会结合EL表达式一起使用

② choose

相当于Java中的switch语句

相关标签

① when :相当于case

② otherwise:相当于default

<body><%request.setAttribute("num",5);%><c:choose><c:when test="${num == 3}">3</c:when><c:otherwise>other</c:otherwise></c:choose>
</body>

输出结果为 other

③ foreach

相当于Java中的 for语句

属性

begin:起始值

end:结束值

var:临时变量

step:步长

varStatus:循环状态对象,存在属性index—索引,count—循环次数

iteam:容器对象

作用
  1. 完成重复操作,如
for(int i = 1; i <= 5; i++){System.out.print("1");
}

JSTL实现

<body><c:forEach begin="1" end="5" var="i" step="1">1</c:forEach>
</body>
  1. 遍历,如
for(int i : array){System.out.print(i);
}

JSTL实现

<body><%int[] array = {1,2,3,4,5};request.setAttribute("array",array);%><c:forEach items="${array}" var="i">${i}</c:forEach>
</body>

三层架构

三层架构是一种软件设计架构,为了符合“高内聚,低耦合”思想

界面层(表示层 / web层)

用户看到的界面,用户可以通过界面上的组件和服务器进行交互,接受用户参数,封装数据,调用业务逻辑层

业务逻辑层(service层)

用来处理业务逻辑,组合DAO层中的简单方法,形成复杂功能(业务逻辑操作)

数据访问层(操作层 / DAO层)

用来操作数据,存储文件,只定义了对于数据库最基本的CRUD操作

JavaWeb学习笔记——JSP相关推荐

  1. javaWeb学习笔记 --- JSP

    JSP jsp概述 由SUN公司提供的动态web资源的开发技术,看起来非常像html,但是可以在JSP页面中写java代码,所以JSP是一种动态web资源开发技术 JSP技术的由来 JSP的出现是为了 ...

  2. JavaWeb学习笔记——jsp内置对象

  3. Javaweb学习笔记(JSP标准标签库)

    Javaweb学习笔记(JSP标准标签库) JSTL入门 安装和测试JSTL JSTL中的Core标签库 < c:out>标签 标签 标签 < c:catch>标签 标签 标签 ...

  4. JavaWeb学习笔记(十)--HttpServletRequest

    1. HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中 2. Ht ...

  5. JavaWeb学习笔记2 —— Web服务器简介

    JavaWeb学习笔记2 -- Web服务器简介 参考教程B站狂神https://www.bilibili.com/video/BV12J411M7Sj 相关技术 ASP: 微软:国内最早流行的就是A ...

  6. B站狂神说JavaWeb学习笔记

    JavaWeb学习笔记(根据b站狂神说java编写) 1.基本概念 1.1 前言 静态Web: 提供给所有人看数据不会发生变化! HTML,CSS 动态Web: 有数据交互,登录账号密码,网站访问人数 ...

  7. JavaWeb学习笔记(5)-B站尚硅谷

    文章目录 十四.书城项目第三阶段--优化 (1)页面jsp动态化 (2)抽取页面中相同的内容 A.登录成功的菜单 B.base.css.jQuery标签 C.每个页面的页脚 D.manager模块的菜 ...

  8. JavaWeb学习笔记(软件系统体系结构、Tomcat、Web应用、HTTP协议)

    JavaWeb学习笔记 JavaWeb学习笔记 软件系统体系结构 常见软件系统体系结构C/S.B/S Web资源 Web服务器 Tomcat Tomcat概述 安装.启动.配置Tomcat Web应用 ...

  9. JavaWeb学习笔记-目录(待完成)

    JavaWeb学习笔记-目录(待完成) 01-基础加强(注解+反射) 02-mysql基础 03-mysql约束 04-mysql多表事务 05-jdbc 06-jdbc连接池JDBCTemplate ...

最新文章

  1. docker 笔记 (6)搭建本地registry
  2. python爬取站长素材网页图片保存到ppt中
  3. 数据库路由中间件MyCat - 源代码篇(7)
  4. LLLYYY的数字思维
  5. 2018/Province_Java_A/2/星期一
  6. service mysqld start,Failed to start mysqld.service: Access denied
  7. java oracle 连接字符串函数_通过shell来比较oracle和java中的字符串使用
  8. ffmpeg中文开发手册_快速调用复杂命令,支持中文注释,命令行备忘工具navi两天就火了...
  9. 选择在何处重构(下)
  10. .NET根本权限管理框架源代码
  11. azw3 netty权威指南_小程序,巧应用(pdf+epub+mobi+txt+azw3)
  12. Cortex-M3 (NXP LPC1788)之WDT窗口看门狗定时器
  13. ASO优化教程:产品预热与应用提交aso主要优化,ASO优化
  14. 群晖docker创建运行spring cloud微服务
  15. 「JavaSE」-流程控制和方法
  16. Android BLE4.+ 蓝牙开发国产手机兼容性解决方案
  17. html布局间距,CSS Grid布局:列和间距
  18. html画布直线代码,图文详解如何用html5 canvas画一条直线
  19. system.exe,alien32.exe,ftsKetNt.7ps,SysKetNt.Sys, iexpe.exe等1
  20. 电池巡检微信云监控系统——在线监测、故障诊断、预警

热门文章

  1. The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes
  2. tedu斌-MySql笔记2112-1
  3. 十大算法之克鲁斯卡尔算法
  4. java s1 s2 s3 s4_电源选项中S1,S2,S3,S4,S5
  5. 什么是UGC社区?#社区产品笔记
  6. 用一个空置U盘(大白菜)PE重装系统
  7. 书论80 阮元《南北书派论》
  8. 移动WEB开发之-REM(rem)布局
  9. Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 (大数据技术丛书) - 电子书下载(高清版PDF格式+EPUB格式)...
  10. Vue.js学习-搭建一个简单的demo