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. Enum,Int,String的互相转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基类 ...

  2. SQLServer 查询使用键查找时锁申请及释放顺序

    最近看了高兄的一篇文章,Sql Server 高频,高并发访问中的键查找死锁解析,很有收获,里面讲到了键查找引起的死锁问题. 当然看的过程中,其实自己有个疑问: 对于键查找这类查询,会申请哪些锁,锁申 ...

  3. 需要警惕的linux命令

    Linux shell/terminal命令非常强大,即使一个简单的命令就可能导致文件夹.文件或者路径文件夹等被删除.为了避免这样的事情发生,我们应该时刻注意PHP代码&命令,今天为大家带来9 ...

  4. mysql root更改远程登录

    mysql> select user,host from mysql.user; +---------------+-------------+ | user | host | +------- ...

  5. C语言const与#define

    const 定义的是变量不是常量,只是这个变量的值不允许改变是常变量!带有类型.编译运行的时候起作用存在类型检查. define 定义的是不带类型的常数,只进行简单的字符替换.在预编译的时候起作用,不 ...

  6. 关于springMVC的一些常用注解

    ①:@RequestMapping("/helloworld").@RequestMapping(value="/emp", method=RequestMet ...

  7. Mysql5.7 的错误日志中最常见的note级别日志解释

          在使用mysql5.7的时候,发现了不少在mysql5.6上不曾见过的日志,级别为note, 最常见的note日志以下三种,下面我们来逐个解释. 第一种,Aborted connectio ...

  8. asp.net mvc文件下载

    一.zip打包下载 1.依赖引用:ICSharpCode.SharpZipLib 2.设定网站有单独文件服务器,网站目录下有虚拟路径FileFolder,通过虚拟路径将文件映射到文件服务器. 设定根据 ...

  9. Element对象 常用属性与常用方法

    常用属性 .children 子元素列表 .childElementCount 子元素数量 .firstElementChild 第一个子元素 .lastElementChild 最后一个子元素 .c ...

  10. October 05th 2017 Week 40th Thursday

    Happiness is to find someone who can give you warm and share your life together. 幸福,就是找一个温暖的人过一辈子. Y ...