Web开发模式的变迁
了解了Servlet和JSP,知道利用Servlet就可以开发一个Web应用程序,但是Servlet的缺陷使Web应用程序开发变得非常繁琐且不利于分工协作。使用JSP(表达式、声明、scriplet)来开发Web应用程序Java Web开发变得轻松,但是这样使得页面严重缺乏可读性,并且没有将页面表现和业务逻辑实现分开,维护难度增加。
在JSP中使用JavaBean
JavaBean本质上就是一个普通的Java类,不过这个类需要遵循一定的编码规范。标准的JavaBean组件具有以下几个特征
JavaBean 类必须是一个公共类,并将其访问属性设置为public。
JavaBean 类必须有一个空的构造函数
一个JavaBean类不应有公共实例变量,类变量都为private。要访问这些类变量,应该通过一组存取方法(getXxx和 setXxx)来访问,不能以大写字母开始命名成员变量
JavaBean应该是可序列化(serializable)的,即实现java.io.Serializable接口
注意:在web开发中,存储数据的Javabean要实现序列化。这是因为作为存储数据的模型在一些情况下需要被存放在文件系统或数据库中。例如,保存在会话中的 javabean。特别要注意的是,要存储在session作用域或跨JVM传输的Javabean必须实现Serializable。
为了在JSP页面中使用标准动作与Javabean,SUN在JSP规范中提供了三种标准动作(jsp:usebean、jsp:getPorperty和jsp:setPorperty)
1、<jsp:usebean>动作
语法发格式如下:
<jsp:useBean id=“beanName” 变量名scope=“page|request|session|application”//作用范围 class=“className” 类全路径/>
该标准有五个属性:
1.id:代表bean的引用名。
2.Class:指定JavaBean的报名及类名。
3.Scope:指定JavaBean生存的作用域,有四个可选值,默认值是page。
a) Page:在当前页面中可用。
b) Request:共用的一个request作用域的多个JSP或者Servlet可以共享这个 bean实例
c) Session:用户在整个会话周期内可用。
d) Application:对当前应用的所有用户来说都可以使用这个JavaBean对象
4.type:ID的引用类型,在默认情况下,它与class的类型相同。
5.BeanName:必须与class属性同时使用。
例子:
<jsp:useBean id="myBean" scope="request" class="com.lovobook.CustomerBean" />
它实际上等同于如下的Servlet代码:
CustomerBean myBean = (CustomerBean) request.getAttribute("myBean");
if ( myBean == null ) {
myBean = new CustomerBean();
pageContext.setAttribute("myBean", myBean);
}
2、<jsp: getPorperty>动作
该动作允许Jsp页面查询JavaBean的给定属性,可以把JavaBean某一个属性取出来,并且在页面上显示出来。
语法格式:
<jsp:getProperty name="beanname" property="propertyname"/>
例子:
<jsp:useBean id="myBean" class="com.lovobook.CustomerBean" scope="page" />
<p>Name: <jsp:getProperty name="myBean" property="name" />
等价于
<jsp:useBean id="myBean" class="com.lovobook.customerBean" scope="page" />
<%=myBean.getName()%>
3.<jsp: setPorperty>动作
用来设置JavaBean的属性值。
<jsp:setProperty name="BeanName" property="属性名" param="参数名"/>
<jsp:setProperty name="BeanName" property="属性名" value="属性值" />
<jsp:setProperty name="BeanName" property="*"/>
name代表bean的名称,property指定JavaBean相对应的属性,value设置属性的值,param将property指定的属性名的值设置为一个请求参数的值。property="*"用来设置所有与所得到的参数同名的属性值
JSP开发模式1
JSP模式1主要采用JSP和JavaBean技术
将页面显示与业务逻辑处理分开
JSP负责页面的显示,而业务逻辑则由JavaBean处理
页面显示与业务逻辑分离,但还是要负责处理请求和控制业务流程
缺点:
只用在系统规模小、业务流程简单的应用系统中;
采用脚本的JSP页面严重缺乏可读性,而且没有将页面表现和业务逻辑实现分开,开发和维护难度增加。
JSP开发模式2
采用JSP+Servlet+JavaBean的技术实现Java Web的开发
JSP模式2开发实现
1) 使用JSP开发模式2的开发步骤为:
2) 定义一系列Bean来表示数据
3) 使用一个Servlet来处理请求
4) 在Servlet中填充Bean
5) 在Servlet中,将Bean存储到请求、会话或者Servlet上下文中
6) 将请求转发到JSP页面
7) 在JSP页面中,从Bean中提取数据
在MVC中使用过滤器
1) 在JSP模式2中显示结果是由Servlet代码来判断请求要转发到哪个JSP页面
2) 使用过滤器直接向转发页面提供数据
无需特殊参数判断,方便新视图的添加
Servlet需要一个特殊的参数,servlet不得不把JSP页面的名称硬编码到代码中
采用过滤器作为控制器,提供了一个清晰的方法来增加一个新视图