Java Bean
JSP页面怎么了?
单纯的JSP既要完成业务逻辑的处理,又要负责页面内容的动态显示
HTML中混杂了大量的Java代码
不利于美工和Java程序员的分工协作
不利于程序的修改和维护
怎么来改进?
JSP页面中尽量少出现Java代码
单独写Java类处理业务逻辑
JavaBean组件
本质:一个普通的Java类
标准JavaBean特性:
是一个公共(public)
的类
1. 有一个默认无参的构造方法
2. 为属性提供setter
和getter
方法
3. 它实现了java.io.Serializable
接口,以支持序列化
用于实例化JavaBean
,
或者是从指定的范围中访问一个已存在的JavaBean实例
语法<jsp:useBean id="" class=""|type="" scope="">
1. id
定义JavaBean
的实例名
2. class
指定JavaBean
的完整限定名(完整类名)
3. type
指定脚本变量的类型,可以是该JavaBean
本身、父类或者该JavaBean
实现的接口
4. scope
指定一个范围,在这个范围中JavaBean
实例是可用的,取值可以为:page/request/session/application
,默认值为page
用来访问一个JavaBean
的属性,并把属性值转化为一个String
,然后发送到输出流中
语法: <jsp:getProperty name="" property="" />
用来访问一个JavaBean的属性,并把属性值转化为一个String,然后发送到输出流中
<jsp:getProperty name=“” property=“”/>
总结
在JSP中使用JavaBean
MVC模式
JSP开发的两种模型
JSP开发web应用程序,有两种模式可供选择
模型1(Model 1)
使用JSP+JavaBean
技术
将页面显示和业务逻辑处理分开
- 优点
与单纯的JSP程序相比,已经部分实现了页面的显示和逻辑代码的分离 - 缺点
仍有大量的业务逻辑代码处于JSP中
不利于项目的维护和升级
不利于页面美工和程序开发人员的分工 - 适合环境
不能满足大型应用,但是模型简单,从而可以使用于小型应用
模型2(Model 2)
使用JSP+Servlet+JavaBean
技术
有助于将程序分割成若干逻辑部件,使程序实际更容易
将程序分成视图-控制器-模型三个层次
在模型1中,JSP页面嵌入大量的流程控制语句以及部分的业务逻辑代码
可以将这部分代码提取,放置到一个单独的组件中,这个组件叫控制器,而引入了控制器的web程序架构就是Model 2
Model 2符合MVC架构模式
M-Model
V-View
C-Controller
MVC模式
MVC有助于将应用程序分割成若干逻辑部件
MVC架构模式提供了一种按照功能进行分割的方法
在MVC中,一个应用程序被分割成了三个部分
模型(Model)
模型层代表应用程序的数据以及用于访问和修改这些数据的业务规则。
视图(View)
视图层用来组织模型层提供的数据,按照特定方式将这些数据显示出来,同时也提供将用户的请求提交给控制器的功能
控制器(Controller)
控制器负责对视图层的用户请求映射为应用程序的行为,而这些行为由模型负责。
Model 2 中MVC的角色分别是:
1. Servlet
作为控制器层组件
负责接收请求
实例化JavaBean
且对业务逻辑进行处理
为JSP
准备承载了数据的JavaBean
将请求转发给适合的JSP页面
2. JSP
作为视图层组件
负责提交用户请求至控制器
负责页面数据的动态显示
3. JavaBean
作为模型层组件
JavaBean主要有两类
一类用于封装业务逻辑
一类用于承载数据
优点
将页面显示、业务逻辑和流程控制分离开来
JSP负责页面的动态显示
JavaBean负责承载数据和业务处理
Servlet负责流程的控制
有利于前台页面处理人员和程序开发人员的分工
缺点
加大了程序开发的复杂度
☆ 3 EL表达式
EL
Expression Language
表达式语言
最初定义于JSTL1.0
部分
在JSP2.0
中,EL
从JSTL
中剥离出来,放置在JSP
规范中,
称为JSP2.0
规范的一部分
在JSP
中使用EL
表达式,
可以简化对象和变量的访问
如:在jsp
中我们可以通过以下办法获取user
对象的userName
属性:
<%=user.getUserName()%>
<jsp:getProperty name=“user” property=“userName”/>
但是使用EL
表达式我们可以这样获取
${user.userName}
EL表达式优点
语法简单,所有的EL都是以”${”
开始以”}”
结束
使用方便,功能强大
EL表达式使用范围
可以在模板数据中使用
<div>${user.userName}</div>
<input type=“text” name=“userName” value=“${user.userName}”>
可以在JavaScript
和自定义标签中使用
但是不能在脚本元素中使用
EL基本语法
语法格式:${userName}
注意:
当表达式没有指定变量或者对象的范围时,那么容器会依次从page—>request—>session—>application
中查找该变量或对象
当然在访问对象或者变量时,可以指定对象或者变量的范围如
${pageScope.userName}
${requestScope.userName}
操作符
◇
EL使用”[]”
和”.”
操作符来访问数据
${user.userName}
${user[“userName”]}
“[]”
和”.”
操作符的区别
“[]”左边的变量可以是Map
,JavaBean
,List
或者数组
“.”左边的变量只能是Map
或者是一个JavaBean
◇
Empty
操作符
Empty
操作符是一个前缀操作符
用于判断一个值是否为null或者为empty
如String str = “”;${empty str}
返回值为true;
◇
条件操作符
EL表达式中的条件操作符为”?:”
如:${x>y?大于:小于等于”}
即x>y成立,取值为“大于”,不成立取值为“小于等于”
圆括号用于改变执行的优先级
◇
操作符优先级
EL中操作符的优先级如下
[] .
()
- ! Empty
* / % mod
+ -
<> <= >=
== != eq ne
&&
||
? :
运算符
保留字
隐含对象
EL中常用的隐含对象
1. pageContext对象
利用pageContext
可以访问JSP
内置对象如:
${pageContext.servletContext.serverInfo}
${pageContext.request.requestURL}
等
2. pageScope对象
,用于获取页面范围的属性值
3. requestScope对象
,用于获取请求范围的属性值
4. sessionScope对象
,用于获取会话范围的属性值
5. applicationScope对象
,用于获取程序范围的属性值
6. param对象
,用于获取请求中的参数值
7. paramValues对象
,用于获取请求中的参数数组
EL应用
<%
String str="aaaaaaaaaa";
request.setAttribute("hello",str);
%>
hello(jsp脚本):<%=request.getAttribute("hello") %><br />
hell0(el表达式):${hello}<br />