本篇以看传智播客方立勋老师的《JDBC入门》之《实现客户关系管理案例》视频有感,从中提取方老师在设计管理系统的简单案例中对自己比较有用的部分,以便日后在开发过程中希望能有所帮助。

  在这个视频中,该客户关系管理系统的界面由简单的“添加客户”和“查看客户”两个超链接构成。其中“查看客户”的功能涉及使用数据库来进行网页显示的分页效果,该功能的实现请看相关博客。

  在“添加客户”的功能中,方老师很灵巧的将一个Servlet的doGet方法和doPost方法一起使用,这样减少了类的定义,优化了程序。我们知道在MVC设计模式下,一个来自客户端浏览器的请求应该是由Servlet先处理,然后转交给JSP显示给用户。因此在JSP页面中,“添加用户”的超链接地址是一个Servlet,表单提交的“action”属性也是一个Servlet,当然添加用户的超链接和添加用户的表单并不是同一个JSP页面,却是可以使用相同的Servlet来处理,这是非常巧秒的一个地方,如下图所示:

  在web层处理添加用户的addCustomerServlet中,在doGet方法中,只有一行代码,那就是跳转(forward)到另一个JSP页面,这个JSP页面是添加用户的表单显示,当我们填写好表单之后并提交,设置提交地址还是刚才的addCustomerServlet,此时应该使用的是doPost方法,本来这个方法也是专门用来处理表单数据的。

  在处理表单的doPost方法中,首先我们要先校验表单,表单校验通过了,要将请求中的表单对象封装到一个JavaBean中,为了能实现请求对象中无论是封装什么对象都将其数据完整的封装到一个实体JavaBean对象中,我们在web层构建一个工具类,在这个工具类中设计一个满足这样的方法,使用泛型、反射和BeanUtils工具类:

 public class WebUtils {
public static <T> T request2Bean(HttpServletRequest request, Class<T> beanClass) {
try{
T bean = beanClass.newInstance();
Map paramMap = request.getParameterMap();
BeanUtils.populate(bean, paramMap);
return bean; }catch (Exception e) {
throw new RuntimeException(e);
}
}
}

  如果要使用上面这个将请求中的对象封装到对应的JavaBean对象中,必须确保表单中的name属性、工程程序里domain包中对应JavaBean的属性名要一致,这样使用BeanUtils时才能正确复制数据。

  但请注意,使用BeanUtils的populate方法只能将字符串转换为字符串和八大基本数据类型,对于bean对象中如果有Date类型这样的属性,那么一定要在使用BeanUtils的方法之前先使用转换器ConvertUtils进行注册要转换的类型。代码如下:

 public class WebUtils {
public static <T> T request2Bean(HttpServletRequest request, Class<T> beanClass) {
try{
T bean = beanClass.newInstance();
Map paramMap = request.getParameterMap();
ConvertUtils.register(new Converter() {
@Override
public <T> T convert(Class<T> type, Object value) {
if(value == null) {
return null;
}
String dateStr = (String) value;
if(dateStr.trim().equals("")) {
return null;
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = format.parse(dateStr);
return (T) date;
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}, Date.class);
BeanUtils.populate(bean, paramMap);
return bean; }catch (Exception e) {
throw new RuntimeException(e);
}
}
}

在WEB工程的web层中的编程技巧的更多相关文章

  1. 容器加載Web工程的Web.xml文件介紹

    转 容器加載Web工程的Web.xml文件介紹 [-] 这篇文章主要是综合网上关于webxml的一些介绍希望对大家有所帮助也欢迎大家一起讨论 ---题记 一            Webxml详解 一 ...

  2. 如何将下载的web工程导入到eclipse中使用

    如果你是喜欢编程的,在你的开发工具中一定有许多项目,就像小编一样(PS:小编只想默默地装一X):   我们选中其中的一个项目,然后[Ctrl + C]复制,再[Ctrl + V]粘贴到桌面:   那么 ...

  3. ZStack中的编程技巧

    1. 像函数一样使用的宏 //这个宏,用来被其他宏使用,构造一个正确有效的表达式.这个适合于一些离散语句的组合,不适合函数的重新命名 #define st(x)      do { x } while ...

  4. web工程导入MyEclipse 就变成Java工程 ———— 解决方案

    Web 工程 导入到 MyEclipse 中后就变成 Java工程了 折腾大大半天,最后才发现是 .settings 里面文件的配置问题.. .settings 文件夹里面的 org.eclipse. ...

  5. Maven工程的Web调试

    1.添加Server,将Web工程和Tomcat关联起来: 1)Windows->Show views->Other-->Servers,将会在下方弹出Server的窗口,然后右键添 ...

  6. OSGI插件(plugin)web工程建设步骤

     所有资源下载(汇总) 底包的下载地址:https://pan.baidu.com/s/15JxHOHf0AyZaLKPJUkpeXA 提取码: bujz web-target.war下载地址: ht ...

  7. 购物商城学习--第三讲(tomcat插件启动web工程)

    此处提到的tomcat插件即maven工程集成的tomcat插件,可以在添加maven的tomcat插件之后,在本地通过脚本或者命令行方式运行web工程,tomcat插件启动只需要修改一个端口即可,非 ...

  8. 搭建Dynamic Web Project(动态web项目)的springmvc工程1

    本文转载自:http://blog.csdn.net/typa01_kk/article/details/45902955 此篇创建Dynamic Web Projec工程(动态web项目),下一篇, ...

  9. 15.自动部署web工程

    用maven自动部署web工程 在pom.xml中写入以下: <build> <!--最终名称,进入网页时有http://localhost:8080/xxx/--> < ...

随机推荐

  1. 2013年最好的Python开源项目汇总

    2013年Python社区诞生了很多实用的开发工具,这些工具 在一定程度上 可以帮助你节省更多的时间.本文为你汇总了这些工具,它们大部分都是开源的,你还可以通过源码来学习更多的Python开发知识. ...

  2. 基于visual Studio2013解决C语言竞赛题之0602最大值函数

     题目

  3. (step7.2.4)hdu 2674(N!Again——简单数论)

    题目大意:输入一个整数n,输出N! mod 2009 的结果. 解题思路: 1)任意数  n = ( n / 2009) * 2009 + n % 2009 2)40!  mod 2009  等于 2 ...

  4. HDU 1150:Machine Schedule(二分匹配,匈牙利算法)

    Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. C++成员变量与函数内存分配

    关于结构体和C++类的内存地址问题 C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样的.下面我们以类来说明问题,如果类的问题通了,结构体也也就没问题啦 ...

  6. linux定时调度器每秒运行一次

    linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...

  7. 开源框架ViewPagerIndicator的使用——TabPageIndicator

    1.导入Android-ViewPagerIndicator库文件 下载地址:https://github.com/JakeWharton/ViewPagerIndicator 2.布局文件     ...

  8. sencha touch(7)——list组件

    1.list组件是一个很强大的组件.用于以一览表的形式或者列表的形式展示应用程序中的大量的数据.该组件使用XTemplate模版来显示数据,同时与数据仓库进行绑定.所以当数据仓库中的数据发生变化的时候 ...

  9. 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)

    2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算 ...

  10. iTextSharp

    iTextSharp 116毫秒处理6G的文件   前言: 有一家印刷企业专为米兰新娘,微微新娘,金夫人这样的影楼印刷婚纱相册.通过一个B2B销售终端软件,把影楼的相片上传到印刷公司的服务器,服务器对 ...