JavaWeb 之 13.JSP模式和案例

javaweb设计模式

目录

javaweb设计模式

MVC模式

Javaweb开发中的三层架构

案例

关于案例架构

注册操作

关于验证码问题

关于校验问题

关于登录时记住用户名操作


jsp模式
model1: jsp + javaBean
优点:简单方便
缺点:难以维护,不适合做比较复杂的开发
* Jsp:数据显示  业务逻辑操作
* javaBean:数据封装

model2:  jsp+servlet+javaBean 
model2模型是一个mvc模式。
优点:方便程序的维护,方便分工,提高组件复用性,适合比较复杂的项目
缺点:对开发人员需求较高
* Jsp:数据显示
* Servlet:业务逻辑操作
* javaBean:数据封装

javaBean

      特点:

  1. 具有无参数public的构造
  2. 属性private,对外提供get/set  方法
  3. 一般可以实现序列化接口。

在java中javaBean广义上分为两种UIBean  还有一种是操作Bean.

在我们javaweb中所说的javaBean指的是操作Bean,而操作bean又可以分为两种,一种是功能bean,一种数据bean.,我们在web开发中所使用的bean是数据bean

Model1模式下使用javaBean

在model1模式下,要将请求参数封装到javaBean中,可以使用jsp提供的bean标签。

注意:使用bean标签来封装请求参数到javaBean,要求标签的name属性值必须与javaBean的bean属性一致。

问题:什么是bean属性?

我们说的bean属性是指get/set方法后面的名称例如 getName它的bean属性就是name。

Model2模式下使用javaBean

在model2模式下我们要想将请求参数封装到javaBean中可以使用apache提供的开源工具beanUtils。

Beanutils工具使用

1.导入jar包

    

     中间的是源代码,可以不导入,logging它是beanutils依赖的jar包。需要导入。

2.在servlet中使用,将请求参数封装到javaBean

populate(Object bean,Map) 参数1就是我们的javaBean,参数2是所有请求参数的Map集合,我们得到所有请求参数的map集合可以使用request.getParameterMap()方法。注意:这种方式也要求表单请求参数的名称必须与javaBean的bean属性一致。

扩展:关于beanutils怎样将请求参数封装到javaBean原理?

       Beanutils工具它的底层实现是通过内省机制。内省机制的底层就是使用反射来实现的。

关于beanutils的类型转换

              在beanutils中提供了一些简单的数据类型转换。例如int类型转换。

              但是对于复杂的数据或自定义的类型,它不能进行类型转换。

              这时,我们可以做自定义类型转换。

              如果表单中有日期类型,这时它封装时会出现问题

 

     关于beanutils中自定义类型转换器步骤:

         1.创建一个类实现org.apache.commons.beanutils.Converter接口

         2.重写convert方法

         

        关于convert方法的参数与返回值说明:

            参数type:它就是要转换的类型

            参数value:就是表单中的请求参数

            返回值:就是给bean属性赋的值

     3.注册自定义类型转换器

    
 

MVC模式

       MVC指的是:

       M:model         模型  用于数据封装     javaBean

       V:view            视图  用于数据的显示        jsp

       C:controller    控制  用于逻辑控制操作     servlet

 

Javaweb开发中的三层架构

所谓的三层架构是由web层,业务层及数据层组成的,它们分别完成各自的工作,如下

  • Web层:包含jsp和Servlet等与web相关的内容;
  • 业务层:也称Service层,业务层中不包含JavaWeb的API,它只关心业务逻辑;
  • 数据层:有时候也称为是持久层,其功能主要是负责数据库的访问,简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。

其中,web层是与web相关的内容,包括jsp和servlet,以及request、response、session、ServletContext等,这些对象只能出现在web层,不能出现在业务层;同样,业务层只关心业务逻辑,例如登录,注册功能,其中注册就是向数据库中插入一条数据,这样在数据层就对应一个方法,因此业务层依赖于数据层,可以这样理解:业务层的一个功能是由数据层的若干个对数据库的操作组成的。而web层将用户输入的数据传递给业务层,业务层处理之后将结果返回给web层,由web层再展示给用户。也就是说web层依赖于业务层。由于业务层和数据层没有出现javaweb的API,因此业务层和数据层是可重用的,甚至可以应用在非web环境中。

案例

关于案例架构

1:创建数据库和表

CREATE DATABASE webdemo;

CREATE TABLE USER

       id INT PRIMARY KEY AUTO_INCREMENT,

       email VARCHAR(50),

       username VARCHAR(20),

       PASSWORD VARCHAR(20),

       sex VARCHAR(20),

       telephone VARCHAR(20),

       introduce VARCHAR(100)

)

2:创建User类(javaBean    域模型)

3:将关于数据库连接操作的 JdbcUtils 工具及jdbc.properties配置。

4:导入相关jar包

   1.mysql驱动

   2.beanutils工具

 

注册操作

基本流程:

  1. register.jsp页面将注册信息提交到RegisterServlet中。
  2. RegisterServlet中使用BeanUtils将数据封装到User对象,调用UserService中的regist方法
  3. 在UserService中调用了UserDao中的addUser方法
  4. 在addUser方法中使用jdbc将数据insert到user表中。

  • 关于注册成功与失败的处理

        在开发中我们可以使用异常来处理无返回值问题.

        在dao中通过抛出一个UserException这个自定义异常来描述添加失败问题。

        在service层中我们捕获UserException,还捕获其它异常,对于其它异常我们进行异常转型,将问题全部反馈到servlet中。

       

关于验证码问题

  1. 在ImageCodeServlet中要将生成的验证码的信息存储到session中。
  2. 在RegisterServlet中要对验证码进行判断

关于校验问题

我们在开发中,一般是做双层校验,一个是在浏览器端使用js校验,另一个是在服务器端使用java校验。

  • 客户端的js校验

在表单上添加  οnsubmit=”return checkForm()”



  • 服务器端校验

 

  1. 在User类中创建一个validate方法,返回值是Map<String,String>


     
  2. 在RegisterServlet中调用了validate方法


     
  3. 如果校验出现了问题,会跳转到register.jsp页面,在页面上显示错误信息

关于登录时记住用户名操作

判断是否勾选了记住用户名,将用户名持久化保存到cookie中

 

  1. 当LoginServlet中完成登录操作(登录成功)
  2. 判断是否勾选了记住用户名,将用户名持久化保存到cookie中


     
  3. 在登录页面上获取cookie中的用户名信息

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值