java jspl是啥_13 JSP、MVC开发模式、EL表达式和JSPL标签+软件设计架构---学习笔记...

1.JSP

(1)JSP概念:Java Server Pages 即java服务器端页面

可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码

用于简化书写!!!

(2)原理

JSP本质上就是一个Servlet

(3)JSP的脚本:JSP定义Java代码的方式

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

2. :定义的java代码,在jsp转换后的java类的成员位置,可以定义成员变量或成员方法。注意:用的较少

3. :定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

(4)JSP指令

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

格式:

例如:

分类:

1. page指令  : 配置JSP页面的

contentType:等同于response.setContentType()

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

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

import:导包

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

isErrorPage:标识当前也是是否是错误页面。

true:是,可以使用内置对象exception

false:否。默认值。不可以使用内置对象exception

2. include指令 : 页面包含的。导入页面的资源文件

*

3. taglib指令: 导入资源

*

* prefix:前缀,自定义的

(5)注释:

1. html注释:

:只能注释html代码片段

2. jsp注释:推荐使用

:可以注释所有

(6) JSP的内置对象:

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

jsp一共有9个内置对象。

* request

* response

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

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

* 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。

* response.getWriter()数据输出永远在out.write()之前

变量名              真实类型              作用

* pageContext       PageContext      当前页面共享数据,还可以获取其他八个内置对象

* request            HttpServletRequest     一次请求访问的多个资源(转发)

* session            HttpSession            一次会话的多个请求间,共享数据

* application         ServletContext        所有用户间共享数据

* response         HttpServletResponse        响应对象

* page             Object          当前页面(Servlet)的对象 this

* out          JspWriter        输出对象,数据输出到页面上

* config            ServletConfig          Servlet的配置对象

* exception         Throwable                异常对象

(7)jsp动作元素

动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素如下:

da4da9ecb93db8af24f05f08d49a7b3b.png

2.MVC:开发模式

(1) jsp演变历史

1. 早期只有servlet,只能使用response输出标签数据,非常麻烦

2. 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作

3. 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性

(2) MVC:

1. M:Model,模型。JavaBean

* 完成具体的业务操作,如:查询数据库,封装对象

2. V:View,视图。JSP

* 展示数据

3. C:Controller,控制器。Servlet

* 获取用户的输入

* 调用模型

* 将数据交给视图进行展示

0f6afe9ece2efe4cf30b7ca138b20bd0.png

优缺点:

1. 优点:

1. 耦合性低,方便维护,可以利于分工协作

2. 重用性高

2. 缺点:

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

3.EL表达式

(1) 概念:Expression Language 表达式语言

(2)作用:替换和简化jsp页面中java代码的编写

(3)语法:${表达式}

(4)注意:

jsp默认支持el表达式的。如果要忽略el表达式

方法1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式

方法2. \${表达式} :忽略当前这个el表达式

(5) 使用:

1. 运算:

* 运算符:

1. 算数运算符: +   -   *   /(div)   %(mod)

2. 比较运算符: > < >= <= == !=

3. 逻辑运算符: &&(and)   ||(or)   !(not)

el_test01

算数运算符

${3+4}
${3/4}
${3 div 4}
${3%4}
${3 mod 4}

比较运算符

${3 == 4}

逻辑运算符

${3>4 && 3<4}

4. 空运算符: empty

* 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0

* ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0

* ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0

2. 获取值

1. el表达式只能从域对象中获取值

2. 语法:

1. ${域名称.键名}:从指定域中获取指定键的值

* 域名称:

1. pageScope--> pageContext域

2. requestScope --> request域

3. sessionScope --> session域

4. applicationScope --> application(ServletContext)域

* 举例:在request域中存储了name=张三

* 获取:${requestScope.name}

Title

session.setAttribute("age","25");%>

el获取值

${requestScope.name}

${sessionScope.age}

2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

3. 获取对象、List集合、Map集合的值

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

* 本质上会去调用对象的getter方法

案例:

User.java

packageel;importjava.text.SimpleDateFormat;importjava.util.Date;public classUser {privateString name;private intage;privateDate birthday;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}publicDate getBirthday() {returnbirthday;

}public voidsetBirthday(Date birthday) {this.birthday =birthday;

}publicString getBirthdayStr(){if(birthday!=null){//1.格式化日期对象

SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd HH:mm:ss");

String birthday_format=sdf.format(birthday);returnbirthday_format;

}else{return "";

}

}

}

el_test03.jsp

获取数据

user.setName("lucky");

user.setAge(25);

user.setBirthday(new Date());

request.setAttribute("user",user);%>

获取对象中的值

${user.name}

${user.age}

${user.birthday}

${user.birthdayStr}

2. List集合:${域名称.键名[索引]}

3. Map集合:

* ${域名称.键名.key名称}

* ${域名称.键名["key名称"]}

获取list集合中的值

list.add("aaa");

list.add("bbb");

request.setAttribute("list",list);

Map map=newHashMap();

map.put("name","linda");

map.put("age","28");

request.setAttribute("map",map);%>

获取list集合

${list[0]}

获取map集合

${requestScope.map.name}

3. 隐式对象:

* el表达式中有11个隐式对象

* pageContext:

* 获取jsp其他八个内置对象

* ${pageContext.request.contextPath}:动态获取虚拟目录

4.JSTL标签

(1)JSTL概念:JavaServer Pages Tag Library JSP标准标签库

是由Apache组织提供的开源的免费的jsp标签

(2)JSTL作用:用于简化和替换jsp页面上的java代码

(3) 使用步骤:

1. 导入jstl相关jar包(javax.servlet.jsp.jstl.jar和jstl-impl.jar这两个jar包)

2. 引入标签库:taglib指令:

3. 使用标签

(4) 常用的JSTL标签

1. if标签:相当于java代码的if语句

1. 属性:

* test 必须属性,接受boolean表达式

* 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容

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

2. 注意:

c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签

小案例:判断数字是奇数还是偶数

jstl标签

我是真

list.add("aaaa");

list.add("bbbb");

request.setAttribute("list",list);

request.setAttribute("number",3);%>

遍历集合


${number}是奇数

页面显示:

7fa7f35a9e9284fa1f51293b3771c2c4.png

2. choose标签:相当于java代码的switch语句

1. 使用choose标签声明 相当于switch声明

2. 使用when标签做判断 相当于case

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

小案例:星期几选择

choose标签使用

星期一

星期二

星期三

星期四

星期五

星期六

星期日

输入的数据有误

页面显示:

7c3fe6ffea64e6f7f6fef3aec5d1474d.png

3. foreach标签:相当于java代码的for语句

1. 完成重复的操作

for(int i = 0; i < 10; i ++){

}

* 属性:

begin:开始值

end:结束值

var:临时变量

step:步长

varStatus:循环状态对象

index:容器中元素的索引,从0开始

count:循环次数,从1开始

2. 遍历容器

List list;

for(User user : list){

}

* 属性:

items:容器对象

var:容器中元素的临时变量

varStatus:循环状态对象

index:容器中元素的索引,从0开始

count:循环次数,从1开始

小案例:

Title

${i}

list.add("111");

list.add("222");

list.add("333");

request.setAttribute("list",list);%>

${s.index} ${s.count} ${str}

页面显示:

03822b65e5af325e375f3b371f0b4983.png

5. 练习:

* 需求:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中

5.三层架构:软件设计架构

(1)界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互

(2)业务逻辑层:处理业务逻辑的。

(3)数据访问层:操作数据存储文件。

bbfca9c647f4de09faa2b9da99376e6c.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值