在WEB工程的web层中的编程技巧
本篇以看传智播客方立勋老师的《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层中的编程技巧的更多相关文章
- 容器加載Web工程的Web.xml文件介紹
转 容器加載Web工程的Web.xml文件介紹 [-] 这篇文章主要是综合网上关于webxml的一些介绍希望对大家有所帮助也欢迎大家一起讨论 ---题记 一 Webxml详解 一 ...
- 如何将下载的web工程导入到eclipse中使用
如果你是喜欢编程的,在你的开发工具中一定有许多项目,就像小编一样(PS:小编只想默默地装一X): 我们选中其中的一个项目,然后[Ctrl + C]复制,再[Ctrl + V]粘贴到桌面: 那么 ...
- ZStack中的编程技巧
1. 像函数一样使用的宏 //这个宏,用来被其他宏使用,构造一个正确有效的表达式.这个适合于一些离散语句的组合,不适合函数的重新命名 #define st(x) do { x } while ...
- web工程导入MyEclipse 就变成Java工程 ———— 解决方案
Web 工程 导入到 MyEclipse 中后就变成 Java工程了 折腾大大半天,最后才发现是 .settings 里面文件的配置问题.. .settings 文件夹里面的 org.eclipse. ...
- Maven工程的Web调试
1.添加Server,将Web工程和Tomcat关联起来: 1)Windows->Show views->Other-->Servers,将会在下方弹出Server的窗口,然后右键添 ...
- OSGI插件(plugin)web工程建设步骤
所有资源下载(汇总) 底包的下载地址:https://pan.baidu.com/s/15JxHOHf0AyZaLKPJUkpeXA 提取码: bujz web-target.war下载地址: ht ...
- 购物商城学习--第三讲(tomcat插件启动web工程)
此处提到的tomcat插件即maven工程集成的tomcat插件,可以在添加maven的tomcat插件之后,在本地通过脚本或者命令行方式运行web工程,tomcat插件启动只需要修改一个端口即可,非 ...
- 搭建Dynamic Web Project(动态web项目)的springmvc工程1
本文转载自:http://blog.csdn.net/typa01_kk/article/details/45902955 此篇创建Dynamic Web Projec工程(动态web项目),下一篇, ...
- 15.自动部署web工程
用maven自动部署web工程 在pom.xml中写入以下: <build> <!--最终名称,进入网页时有http://localhost:8080/xxx/--> < ...
随机推荐
- 我的Python成长之路---第三天---Python基础(12)---2016年1月16日(雾霾)
四.函数 日常生活中,要完成一件复杂的功能,我们总是习惯把“大功能”分解为多个“小功能”以实现.在编程的世界里,“功能”可称呼为“函数”,因此“函数”其实就是一段实现了某种功能的代码,并且可以供其它代 ...
- cocos2d-x游戏开发系列教程-超级玛丽02-代码结构
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 前景回顾 上一篇博文提到超级马里奥的游戏效果,大家 ...
- 模式匹配KMP
字符串朴素模式匹配算法的2种实现: //1.朴素的模式匹配算法,用while实现 int StrStr_While(const char* pStr, const char* pSub, int* p ...
- Oracle 11g RAC OCR 与 db_unique_name 配置关系 说明
一. 问题一 在做RAC standby 的alert log里发现如下错误: SUCCESS: diskgroup DATA was mounted ERROR: failed toestablis ...
- Android --Vibrator--震动服务
1.取得震动服务的句柄 vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);或者vibrator = (Vibrator)getAppli ...
- BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )
裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案. ------------------------------------------------------------------- ...
- 【译】在Asp.Net中操作PDF - iTextSharp - 利用列进行排版
原文 [译]在Asp.Net中操作PDF - iTextSharp - 利用列进行排版 在使用iTextSharp通过ASP.Net生成PDF的系列文章中,前面的文章已经讲述了iTextSharp所涵 ...
- mysql启动的四种方式
mysql的四种启动方式: .mysqld 启动mysql服务器:./mysqld --defaults-file=/etc/my.cnf --user=root 客户端连接: mysql --def ...
- solr 从零学习开始
2010-10 目 录 1 1.1 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4. ...
- 关于运行robotium提示连接不上jar问题
robotium运行测试helloworld报错: java.lang.NoClassDefFoundError: com.jayway.android.robotium.solo.Solo at c ...