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)

<jsp:usebean>动作

  语法发格式如下:

<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);
}

  该标准有五个属性:

  id:代表bean的引用名。

  Class:指定JavaBean的报名及类名。

  Scope:指定JavaBean生存的作用域,有四个可选值,默认值是page。

  Page:在当前页面中可用。

Request:共用的一个request作用域的多个JSP或者Servlet可以共享这个bean实例

Session:用户在整个会话周期内可用。

Application:对当前应用的所有用户来说都可以使用这个JavaBean对象

type:ID的引用类型,在默认情况下,它与class的类型相同。

  BeanName:必须与class属性同时使用。

<jsp: getPorperty>动作

  该动作允许Jsp页面查询JavaBean的给定属性,可以把JavaBean某一个属性取出来,并且在页面上显示出来。

  语法格式:

<jsp:getProperty name="beanname" property="propertyname"/>
<!--name是指在<jsp:useBean>动作中指定的id名,propertyname指的是返回JavaBean中的相对应的属性名
在JavaBean中的属性必须要有公开的getXXX()方法,才能在JSP中使用<jsp:getProperty>标准动作取出其属性,其使用效果与直接调用getXXX()结果相同-->

<jsp: setPorperty>动作

  语法格式:

<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处理

模式1结构图

实现JSP模式1

  缺点:

只用在系统规模小、业务流程简单的应用系统中;

虽然实现了某种程度的页面显示与业务逻辑分离 ,但JSP除了要负责页面显示外,还是要负责处理请求和控制业务流程,根据不同的请求信息调用不同的程序代码,没有做到完全的显示和控制分离。

JSP开发模式2

MVC示意图(借鉴MVC架构模式)

  实现了良好的松散耦合,只要它们相互连接的接口保持不变,对其中一个的修改不会影响到另外一个。因此采用MVC模式构架的应用系统具有极高的可维护性、可扩展性、可移植性和组件重用性。

MVC架构模式的Java Web实现 

  采用JSP+Servlet+JavaBean的技术实现Java Web的开发

JSP开发模式2结构图

  由于模型位于服务器端,而最终的试图位于客户端浏览器,只有浏览器发出请求后,服务器才会做出响应,没有请求就没有响应。

JSP模式2开发实现

使用JSP开发模式2的开发步骤为:

1)定义一系列bean来表示数据。

由于在MVC中,都是由Servlet或者其他Java程序中(不是由JSP页面)创建Bean,所以我们开发的JavaBean也就不再需要空构造方法。因为类只是一个简单Java对象(POJO),它们只需要保护实例变量私有,且遵循get/set命名约定的访问器方法

2)使用一个Servlet来处理请求

定义Bean类后,接下来的任务是编写Servlet来读取请求信息

3)填充bean

读取表单参数后,可以根据它们来确定请求结果

4)在Servlet中,将Bean存储到请求、会话或者Servlet上下文中

Servlet可以在HttpServletRequest、HttpSession和ServletContext中存储JSP页面所需的数据。这些存储位置分别对应JSP页面中jsp:userBean的scope属性的request、session和application属性值

5)将请求转发到JSP页面

转发请求由RequestDispatcher对象的forward()方法实现。RequestDispatcher对象的获取需要调用ServletRequest对象的getRequestDispatcher()方法,并提供相对地址

6)在JSP页面中,从Bean中提取数据

请求到达JSP页面后,JSP页面使用jsp:userBean和jsp:gerProperty提取数据,需要注意的是:

JSP页面不创建对象,创建对象的工作由Servlet完成。

JSP页面不应该修改对象

<jsp:userBean>的Scope应该与Servlet中使用的存储位置一致

在MVC中使用过滤器 

  在JSP模式2中显示结果是由Servlet代码来判断请求要转发到哪个JSP页面,Servlet需要一个特殊的参数,servlet不得不把JSP页面的名称硬编码到代码中

  使用过滤器直接向转发页面提供数据,无需特殊参数判断,方便新视图的添加

  采用过滤器作为控制器,提供了一个清晰的方法来增加一个新视图

JavaWeb总结(十三)的更多相关文章

  1. JavaWeb 后端 <十三> 之 监听器 JSTL国际化

    1. 监听器 1.1   概述 监听器: 主要是用来监听特定对象的创建或销毁.属性的变化的! 是一个实现特定接口的普通java类! 对象: 自己创建自己用 (不用监听) 别人创建自己用 (需要监听) ...

  2. javaweb(三十三)——使用JDBC对数据库进行CRUD

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

  3. javaweb(二十三)——jsp自定义标签开发入门

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  4. JavaWeb学习 (十三)————JSP

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

  5. 面试之JavaWeb篇(十三)

    148,AJAX有哪些有点和缺点? 优点: 1.最大的一点是页面无刷新,用户的体验非常好. 2.使用异步方式与服务器通信,具有更加迅速的响应能力. 3.可以把以前一些服务器负担的工作转嫁到客户端,利用 ...

  6. 巩固javaweb第十三天

    巩固内容: HTML 表格 表格由 <table> 标签来定义.每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> 标签定义).字母 ...

  7. 学习JAVAWEB第十三天

    会话技术 1. 会话:一次会话中包含多次请求和响应. * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 2. 功能:在一次会话的范围内的多次请求间,共享数据 3. 方式: ...

  8. (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交

    如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...

  9. javaweb学习总结(二十三)——jsp自定义标签开发入门

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  10. javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

随机推荐

  1. Maven环境变量配置和在Eclipse中的配置

    1.Maven环境变量配置 M2_HOME :变量值为maven的安装目录 在path后添加%M2_HOME%\bin; 检查JDK,maven配置的cmd命令 echo %JAVA_HOME% ja ...

  2. 在asp.net一般应用程序中使用session

    通常我们经常,通过session判定用户是否登录.还有一些临时的.重要的数据也尝尝存放在Session中. 在页面我们很容易的得到Session的值,但在类中就会遇到一些问题.也知道通过下面的方法得到 ...

  3. Error loading XML document: dwz.frag.xml 处理方式

    问题:直接用IE打开index.html弹出一个对话框:Error loading XML document: dwz.frag.xml 方案一(已经验证): 转自:http://blog.csdn. ...

  4. 优化REST Framework 的 路由 APIView 和ViewSetMixin

    APIview: 我们经常写的是view  这个APIview继承了我们的view,并且对请求进来的信息进行设置, 在APIView这个例子中,调用了drf本身的serializer以及Respons ...

  5. Ubuntu 12.04常用快捷键

    ===== 桌面 ===== ALT + F1: 聚焦到桌面左侧任务导航栏,可按上下键导航. ALT + F2: 运行命令 ALT + F4: 关闭窗口 ALT + TAB: 切换程序窗口 ALT + ...

  6. BZOJ2435:[NOI2011]道路修建 (差分)

    Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...

  7. 【洛谷】【st表+模拟】P1311 选择客栈

    [题目描述:] 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖 ...

  8. NPOI保存到服务器和导出到客户端

    保存到服务器 <a class="easyui-linkbutton" href="javascript:void(0);" onclick=" ...

  9. Zookeeper学习之路 (二)集群搭建

    ZooKeeper 软件安装须知 鉴于 ZooKeeper 本身的特点,服务器集群的节点数推荐设置为奇数台.我这里我规划为三台, 为别为 hadoop1,hadoop2,hadoop3 ZooKeep ...

  10. Python学习之路 (一)开发环境搭建

    前言 python3应该是Python的趋势所在,当然目前争议也比较大,这篇随笔的主要目的是记录在centos6.7下搭建python3环境的过程 以及碰到的问题和解决过程. 另外,如果本机安装了py ...