Java基础 javaweb设计模式
2017-12-15 08:09
369 查看
Javaweb设计模式
Jsp模式
Sun公司在推出jsp后,也为我们提供了两种jsp开发模式
Model1 jsp+javaBean
Model1模式中jsp与javaBean功能
![](http://note.youdao.com/yws/res/3588/289EB4BF790643B3B0EC59B1EBDA203D)
Model1模式中,jsp主要负责业务操作及数据的显示。javaBean用于数据封装。
Model1
优点:
使用简单快捷,对开发人员要求不高。
缺点:
它不适合完成比较复杂的项目,并且所有操作都在jsp页面上,为我们的程序开发与维护带来不便 :
Model2 jsp+servlet+JavaBean
![](http://note.youdao.com/yws/res/3584/2F22FC3F77D<br/>4000<br/>641268C29667B9BF75010)
Model2模式它在model1模式基础上,将原来由jsp完成的功能,现在由servlet与jsp一起完成。
Servlet主要负责业务逻辑处理
Jsp主要负责数据显示
javaBean负责数据的封装。
Model2模式
优点:维护方便,开发人员各司其职,有利于我们进行分工操作,它比较适合开发一些比较复杂项目,因为它的很多组件可以重用。
缺点:
开发难度增大,对开发人员要求比较高。
javaBean介绍
javaBean是一种java语言写成的可重用的组件,为了写成javaBean,它要必须具有公共的无参数的构造,javaBean通过提供符合一致性设计模式的公共方法将内部的域暴露成员属性。简单说,一个javaBean它应该是具有无参数构造,并且属性private,对外提供get/set方法让其访问,一般javaBean是可序列化,也就是说,它要实现序列化接口。
在javaweb开发中,javaBean的主要功能是什么?
javaBean可以分为两种,一种是用户界面的UI
的javaBean,javaweb中使用的不是这一种。
另外一种它没有用户界面,主要负责处理,jsp中通常使用的是这一种,我们在实际开发中,所使用的javaBean主要是用于将数据进行封装操作。
javaBean在model1模式下如何使用
在model1模式下,我们将数据封装到javaBean,一般会使用jsp的bean标签来操作。
Jsp:userBean
Jsp:setProperty
Jsp:getProperty
![](http://note.youdao.com/yws/res/3585/7145C5BEAC1341388B0C160DC7593BC5)
注意:bean属性,它指的不是类属性,我们所说的bean属性指的是get/set方法后的名称。
如果我们使用bean标签操作,那么表单中请求参数名称一定要与bean属性一致。
如果一致,那么我们在使用setProperty标签时,也可以使用通配符*来操作
javaBean在model2模式下如何使用
在model2模式下,我们要将请求参数封装到javaBean中,可以手动封装
![](http://note.youdao.com/yws/res/3582/76B2304236024BBDBE18DA99372D0729)
我们可以使用beanutils工具来完成请求参数封装。
Beanutils它是apache开发的一套用于操作javaBean的api,通过这套api,可以简化我们操作javaBean代码的编写。
简单介绍beanutils如何使用?
1.
导入jar包
![](http://note.youdao.com/yws/res/3589/B95FCE489CE84E138485B4A303B5681B)
![](http://note.youdao.com/yws/res/3592/C8F2BA08CBF8480EA2FD3D89D9A3E4C2)
2.
编写代码
![](http://note.youdao.com/yws/res/3581/ABFC2325023F44EAB6125863D945F167)
Populate方法参数1就是我们的javaBean对象,参数2是我们的所有的请求参数的map集合,可以通过request.getParameterMap方法获取。
Beanutils工具实现原理
Beanutils工具它的底层是使用java内省机制,而内省它的实现是依赖于java反射。
1.
使用反射方式来完成请求参数封装
//使用反射来完成封装
@Test
public void fun1() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
//1.创建一个Map集合,模仿request.getParameterMap()获取的结果
Map<String,String[]> map=new HashMap<String, String[]>();
map.put("username", new String[]{"tom"});
map.put("password", new String[]{"123"});
//2.创建一个User对象
User user=new User();
//3.将map集合中key的名称与user中bean属性一致的使用key对应的value封装到bean属性上。
//3.1得到map中所有的key的set信
Set<String> keys=map.keySet();
//3.2得到User类中所有的方法
Method[] ms=user.getClass().getDeclaredMethods();
//3.3.判断所有方法名称是否与"set"+key的值相等(不区分大小写)
for(String key:keys){
String setMethodName="set"+key;
//3.4遍历所有的ms,并得到方法名称
for(Method m:ms){
String methodName=m.getName();
if(setMethodName.equalsIgnoreCase(methodName)){
//3.5.使用method对象调用invoke方法将key对应的value值进行赋值
m.invoke(user, map.get(key)[0]); // user.setXxx(map.get(xxx))
}
}
}
//4.输出
System.out.println(user);
}
2.
使用内省操作
1.
使用Introspector来获取BeanInfo对象
![](http://note.youdao.com/yws/res/3587/7A5D340F20A54B43BB045F4945A31975)
2.
通过BeanInfo对象获取所有的属性描述器 PropertyDescription
![](http://note.youdao.com/yws/res/3591/54C2F203854E42119E4D43FC2F1300E3)
3.通过属性描述器,得到读写方法
PropertyDescriptor.getWriteMethod()
PropertyDescriptor.getReadMethod()
可以通过属性描述器得到bean属性名称
PropertyDescriptor.getName()
// 1.创建一个Map集合,模仿request.getParameterMap()获取的结果
Map<String, String[]> map = new HashMap<String, String[]>();
map.put("username", new String[] { "tom" });
map.put("password", new String[] { "123" });
// 2.创建一个User对象
User user = new User();
// 3.得到一个BeanInfo对象
BeanInfo bif = Introspector.getBeanInfo(User.class);
// 4.得到所有属性描述器
PropertyDescriptor[] pds = bif.getPropertyDescriptors();
// 5.通过属性描述器得到读写方法
for (PropertyDescriptor pd : pds) {
Method writeMethod = pd.getWriteMethod();
// 6.得到方法名称
if (writeMethod != null) {
//System.out.println(pd.getName()); //得到bean属性名称
//System.out.println(writeMethod.getName()); //得到所有的set方法名称
String name=pd.getName();
writeMethod.invoke(user, map.get(name)[0]);
}
}
System.out.println(user);
Beanutils中类型转换
Beanutils工具中本身是提供一些类型转换的,可以直接将请求参数封装到javaBean对应的属性上,属性的类型不是String,也可以,例如int
age.
我们在使用Beanutils工具时,可以做自定义的类型转换,将请求参数封装到javaBean中。
我们可以参考beanutils本身提供的类型转换器。
完成自定义类型转换器步骤:
1.
创建一个类来实现org.apache.commons.beanutils.Converter
2.
重写方法完成类型转换
![](http://note.youdao.com/yws/res/3586/EA11389A90BE44A6817A6F645C32F017)
参数type就要要转换的类型
参数value就是浏览器端发送的请求参数数据
这个方法的返回值就是给bean属性要赋的值。
3.
注册自定义类型转换器、
![](http://note.youdao.com/yws/res/3590/FA2A660314B741CBB20D1B4323E605C9)
MVC设计模式
MVC全名是model view controller
它是一种软件设计典范,用一种业务逻辑,数据,界面分离的方式来组织代码,将业务逻辑聚集到一个部件中,方便程序的重用,提高我们的开发效率。
Jsp model2它就是一个mvc设计模式。
M:model
即模型层,维护数据提供数据的访问 javaBean
V:view
即视图层 数据的显示 jsp
C:controller
控制层,用于业务处理。 Servlet
Model2它是mvc模式,mvc它不是model2
Javaweb开发中三层架构
三层指的是web层 service层 dao层
它这种架构是我们在javaweb开发中经常使用的。
Web层:它包含了jsp servlet javaBean相关内容
Service层:它也叫做bussiness层
它只处理业务逻辑操作,不包含web相关API
Dao层
数据层
也叫做持久化层 它的主要功能是负责对数据源访问,简单说,它就是包含对数据的CRUD
操作
Web开发的三层架构与mvc区别?
三层架构它是一个分层式的体系架构设计,它可适用于任何一个项目,MVC它只是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。
在开发,首要对项目进行架构,在架构以后,我们要根据具体的需求,来选择设计模式。例如mvc
工厂模式等。
Jsp模式
Sun公司在推出jsp后,也为我们提供了两种jsp开发模式
Model1 jsp+javaBean
Model1模式中jsp与javaBean功能
Model1模式中,jsp主要负责业务操作及数据的显示。javaBean用于数据封装。
Model1
优点:
使用简单快捷,对开发人员要求不高。
缺点:
它不适合完成比较复杂的项目,并且所有操作都在jsp页面上,为我们的程序开发与维护带来不便 :
Model2 jsp+servlet+JavaBean
Model2模式它在model1模式基础上,将原来由jsp完成的功能,现在由servlet与jsp一起完成。
Servlet主要负责业务逻辑处理
Jsp主要负责数据显示
javaBean负责数据的封装。
Model2模式
优点:维护方便,开发人员各司其职,有利于我们进行分工操作,它比较适合开发一些比较复杂项目,因为它的很多组件可以重用。
缺点:
开发难度增大,对开发人员要求比较高。
javaBean介绍
javaBean是一种java语言写成的可重用的组件,为了写成javaBean,它要必须具有公共的无参数的构造,javaBean通过提供符合一致性设计模式的公共方法将内部的域暴露成员属性。简单说,一个javaBean它应该是具有无参数构造,并且属性private,对外提供get/set方法让其访问,一般javaBean是可序列化,也就是说,它要实现序列化接口。
在javaweb开发中,javaBean的主要功能是什么?
javaBean可以分为两种,一种是用户界面的UI
的javaBean,javaweb中使用的不是这一种。
另外一种它没有用户界面,主要负责处理,jsp中通常使用的是这一种,我们在实际开发中,所使用的javaBean主要是用于将数据进行封装操作。
javaBean在model1模式下如何使用
在model1模式下,我们将数据封装到javaBean,一般会使用jsp的bean标签来操作。
Jsp:userBean
Jsp:setProperty
Jsp:getProperty
注意:bean属性,它指的不是类属性,我们所说的bean属性指的是get/set方法后的名称。
如果我们使用bean标签操作,那么表单中请求参数名称一定要与bean属性一致。
如果一致,那么我们在使用setProperty标签时,也可以使用通配符*来操作
javaBean在model2模式下如何使用
在model2模式下,我们要将请求参数封装到javaBean中,可以手动封装
我们可以使用beanutils工具来完成请求参数封装。
Beanutils它是apache开发的一套用于操作javaBean的api,通过这套api,可以简化我们操作javaBean代码的编写。
简单介绍beanutils如何使用?
1.
导入jar包
2.
编写代码
Populate方法参数1就是我们的javaBean对象,参数2是我们的所有的请求参数的map集合,可以通过request.getParameterMap方法获取。
Beanutils工具实现原理
Beanutils工具它的底层是使用java内省机制,而内省它的实现是依赖于java反射。
1.
使用反射方式来完成请求参数封装
//使用反射来完成封装
@Test
public void fun1() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
//1.创建一个Map集合,模仿request.getParameterMap()获取的结果
Map<String,String[]> map=new HashMap<String, String[]>();
map.put("username", new String[]{"tom"});
map.put("password", new String[]{"123"});
//2.创建一个User对象
User user=new User();
//3.将map集合中key的名称与user中bean属性一致的使用key对应的value封装到bean属性上。
//3.1得到map中所有的key的set信
Set<String> keys=map.keySet();
//3.2得到User类中所有的方法
Method[] ms=user.getClass().getDeclaredMethods();
//3.3.判断所有方法名称是否与"set"+key的值相等(不区分大小写)
for(String key:keys){
String setMethodName="set"+key;
//3.4遍历所有的ms,并得到方法名称
for(Method m:ms){
String methodName=m.getName();
if(setMethodName.equalsIgnoreCase(methodName)){
//3.5.使用method对象调用invoke方法将key对应的value值进行赋值
m.invoke(user, map.get(key)[0]); // user.setXxx(map.get(xxx))
}
}
}
//4.输出
System.out.println(user);
}
2.
使用内省操作
1.
使用Introspector来获取BeanInfo对象
2.
通过BeanInfo对象获取所有的属性描述器 PropertyDescription
3.通过属性描述器,得到读写方法
PropertyDescriptor.getWriteMethod()
PropertyDescriptor.getReadMethod()
可以通过属性描述器得到bean属性名称
PropertyDescriptor.getName()
// 1.创建一个Map集合,模仿request.getParameterMap()获取的结果
Map<String, String[]> map = new HashMap<String, String[]>();
map.put("username", new String[] { "tom" });
map.put("password", new String[] { "123" });
// 2.创建一个User对象
User user = new User();
// 3.得到一个BeanInfo对象
BeanInfo bif = Introspector.getBeanInfo(User.class);
// 4.得到所有属性描述器
PropertyDescriptor[] pds = bif.getPropertyDescriptors();
// 5.通过属性描述器得到读写方法
for (PropertyDescriptor pd : pds) {
Method writeMethod = pd.getWriteMethod();
// 6.得到方法名称
if (writeMethod != null) {
//System.out.println(pd.getName()); //得到bean属性名称
//System.out.println(writeMethod.getName()); //得到所有的set方法名称
String name=pd.getName();
writeMethod.invoke(user, map.get(name)[0]);
}
}
System.out.println(user);
Beanutils中类型转换
Beanutils工具中本身是提供一些类型转换的,可以直接将请求参数封装到javaBean对应的属性上,属性的类型不是String,也可以,例如int
age.
我们在使用Beanutils工具时,可以做自定义的类型转换,将请求参数封装到javaBean中。
我们可以参考beanutils本身提供的类型转换器。
完成自定义类型转换器步骤:
1.
创建一个类来实现org.apache.commons.beanutils.Converter
2.
重写方法完成类型转换
参数type就要要转换的类型
参数value就是浏览器端发送的请求参数数据
这个方法的返回值就是给bean属性要赋的值。
3.
注册自定义类型转换器、
MVC设计模式
MVC全名是model view controller
它是一种软件设计典范,用一种业务逻辑,数据,界面分离的方式来组织代码,将业务逻辑聚集到一个部件中,方便程序的重用,提高我们的开发效率。
Jsp model2它就是一个mvc设计模式。
M:model
即模型层,维护数据提供数据的访问 javaBean
V:view
即视图层 数据的显示 jsp
C:controller
控制层,用于业务处理。 Servlet
Model2它是mvc模式,mvc它不是model2
Javaweb开发中三层架构
三层指的是web层 service层 dao层
它这种架构是我们在javaweb开发中经常使用的。
Web层:它包含了jsp servlet javaBean相关内容
Service层:它也叫做bussiness层
它只处理业务逻辑操作,不包含web相关API
Dao层
数据层
也叫做持久化层 它的主要功能是负责对数据源访问,简单说,它就是包含对数据的CRUD
操作
Web开发的三层架构与mvc区别?
三层架构它是一个分层式的体系架构设计,它可适用于任何一个项目,MVC它只是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。
在开发,首要对项目进行架构,在架构以后,我们要根据具体的需求,来选择设计模式。例如mvc
工厂模式等。
相关文章推荐
- WEB 开发与Java框架及设计模式
- java基础之设计模式之单例模式
- (2011年java基础)设计模式总结(简述)
- java WEB开发中Struts2+Spring+Hibernate 设计模式
- java 设计模式基础
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- java设计模式基础之设计原则
- 别人的Morgan Stanley面试,注重基础,java core、多线程、设计模式、设计程序。。。
- 黑马程序员:Java基础总结----模版方法设计模式
- Java基础之装饰设计模式理解
- 黑马程序员_java基础复习之十常用设计模式总结
- JAVA操作数据库方式与设计模式应用-Java基础-Java-编程开发
- JAVA-WEB设计模式
- 黑马程序员-JAVA基础-IO流中的装饰设计模式
- GoF的设计模式是Java基础知识和J2EE框架知识之间一座隐性的"桥"
- 黑马程序员_毕向东JAVA基础_设计模式&异常处理机制
- 黑马程序员---JAVA基础JAVA23种设计模式之---单例设计模式
- 黑马程序员JAVA基础-单例设计模式
- JAVA设计模式系列之Adapter(适配器)-Java基础-Java-编程开发
- Java 基础一些代码练习笔记(设计模式-单列模式)