java web之七


Java Bean

JSP页面怎么了?
单纯的JSP既要完成业务逻辑的处理,又要负责页面内容的动态显示
HTML中混杂了大量的Java代码
不利于美工和Java程序员的分工协作
不利于程序的修改和维护

怎么来改进?
JSP页面中尽量少出现Java代码
单独写Java类处理业务逻辑

JavaBean组件
本质:一个普通的Java类

标准JavaBean特性:
是一个公共(public)的类
1. 有一个默认无参的构造方法
2. 为属性提供settergetter方法
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-model-1

  • 优点
    与单纯的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-model-2

优点
将页面显示、业务逻辑和流程控制分离开来
JSP负责页面的动态显示
JavaBean负责承载数据和业务处理
Servlet负责流程的控制
有利于前台页面处理人员和程序开发人员的分工

缺点
加大了程序开发的复杂度


☆ 3 EL表达式

EL

Expression Language 表达式语言
最初定义于JSTL1.0部分
JSP2.0中,ELJSTL中剥离出来,放置在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 /> 

猜你喜欢

转载自blog.csdn.net/oneqinglong/article/details/72730275