文档章节

JavaWeb基础中的三种数据封装方法

柳初心
 柳初心
发布于 2017/06/04 21:31
字数 615
阅读 7
收藏 0
点赞 0
评论 0

#JSP中的封装


	public class User(){
		private String username;
		private String password;
		public void setUsername(){
		}
		public void getUsername(){
		}
		public void getPassword(){
		}
		public void getInfo(){
		}
	}
				
		* 作用:封装数据。
			
		把数据封装到JavaBean中(JSP页面中完成的)
		<jsp:useBean>
		<jsp:setProperty> 
		<jsp:getProperty> 
		
		<jsp:useBean id="u" class="cn.itcast.vo.User"></jsp:useBean>
		<jsp:setProperty property="username" name="u"/>
		<jsp:setProperty property="password" name="u"/>
		或者
		<jsp:setProperty property="*" name="u"/>

		<jsp:getProperty property="username" name="u"/>
		<jsp:getProperty property="password" name="u"/>

#内省的方法

* 内省	(Introspector)
		@Test
		public void run() throws Exception{
			User user = new User();
			// 获取类的信息
			BeanInfo info = Introspector.getBeanInfo(user.getClass());
			// 获取属性的描述
			PropertyDescriptor [] pds = info.getPropertyDescriptors();
			// 循环遍历,获取属性的名称
			for (PropertyDescriptor pd : pds) {
				// System.out.println(pd.getName());
				// 属性:
						class
						password
						username
				// 找到不为class 属性的方法。
				// class没有写的方法。
				if(!"class".equals(pd.getName())){
					// 获取写的方法
					Method m = pd.getWriteMethod();
					m.invoke(user, "admin");
				}
			}
			
			System.out.println(user.getUsername());
			System.out.println(user.getPassword());
		}

	* 完成封装的实例	
		// 获取输入的数据
		Map<String, String []> map = request.getParameterMap();
		// 创建User对象
		User user = new User();
		// 自己编写封装数据的方法
		try {
			populate(map,user);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		// 完成数据的封装
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());
	}
	
	/**
	 * 完成的数据
	 * @param map
	 * @param user
	 * @throws Exception 
	 */
	private void populate(Map<String, String[]> map, User user) throws Exception {
		BeanInfo info = Introspector.getBeanInfo(user.getClass());
		// 获取属性的描述
		PropertyDescriptor [] pds = info.getPropertyDescriptors();
		// 循环遍历	
		for (PropertyDescriptor pd : pds) {
			// 获取到属性的名称
			String name = pd.getName();
			// map的key	
			if(map.containsKey(name)){
				// 获取属性的方法
				Method m = pd.getWriteMethod();
				// 执行之。
				m.invoke(user, map.get(name)[0]);
			}
		}
	}

#BeanUtils的使用方法# ##1.导入jar包##

  • commons-beanutils
  • commons-logging ##2.代码应用##
public class User{
	private String username;
	private String password;
	
	public String getUsername(){
		return username;
	}
	public String setUsername(String username){
		this.username = username;
	}
	......
}

public class UserBeanUtilServlet extends HttpServlet{
	private static final long serialVersionUID = 365288211;
	public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException ,IOException{
		//获取数据
		Map<String, String[]>map = request.getParameterMap();
		//创建User对象
		User user = new User();
		//完成封装
		try{
			BeanUtils.populate(user,map);
		}catch(IllegalAccessException e){
			e.printStackTrace();
		}catch(InvocationTargetException e){
			e.printStackTrace();
		}
		
		//打印
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());

##Beanutils的限制##

/*某些类型不能直接转换
例如
	- String => Date类
*/
  • 解决方法
  • 实现Converter接口。复写该方法,把字符串转换日期
  • 在封装数据之前,进行注册。ConvertUtils.register(Converter converter, Class clazz)
public class MyDateConverter implements Converter{
	public Object convert(Class clazz, Object obj){
		String sDate = (String) obj;
		SimpleDAteFormat sdf = new SimpleDateFormat("yyyy-MM-dd")
		Date date;
		try{
			date = sdf.parse(dDate);
		}catch(){
		}
		return date;
	}
}

/*
 *使用自定义的转换器之前要先注册
 *ConvertUtils.register(Converter converter, Class clazz)
 */
public class UserBeanUtilServlet extends HttpServlet{
	private static final long serialVersionUID = 365288211;
	public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException ,IOException{
		//获取数据
		Map<String, String[]>map = request.getParameterMap();
		//创建User对象
		User user = new User();
		//完成注册
		ConvertUtils.register(new MyDateConverter(),Date.class);
		//完成封装
		try{
			BeanUtils.populate(user,map);
		}catch(IllegalAccessException e){
			e.printStackTrace();
		}catch(InvocationTargetException e){
			e.printStackTrace();
		}
		
		//打印
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());

© 著作权归作者所有

共有 人打赏支持
柳初心
粉丝 0
博文 31
码字总数 15977
作品 0
南昌
Javaweb组件--Servlet

今天要学习的是Javaweb的三大组件:Servlet 因为框架(包括Spring Boot)本质上是对原始的JavaWeb的高度封装,如果了解JavaWeb的开发基础,框架学起来也会相对的很轻松。 Servlet是用来处理客户...

a1ie2 ⋅ 2017/11/16 ⋅ 0

java&javaweb学习笔记(汇总)

我的java&javaweb学习笔记(汇总) 笔记分为两大部分:javase和javaweb javase javaweb 笔记内容主要是对一些基础特性和编程细节进行总结整理,适合了解java基础语法,想进一步深入学习的人 gi...

brianway ⋅ 2016/02/09 ⋅ 2

Java三大框架的技术起源

struts、hibernate和spring是我们java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的javaweb应用程序...

aminqiao ⋅ 2014/06/24 ⋅ 0

java总结文章

java总结文章 原创地址: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks Talk is cheap. Show me the code. Written In The Font   图能抵过一切,喜欢咖啡喜...

泥沙砖瓦浆木匠 ⋅ 2014/06/08 ⋅ 2

优化省市县三级联动(查询数据库)

javaWeb项目,页面实现省市县三级联动。 想到三种方法: 1.查询出所有省并显示,选择省或市,利用ajax从后台查询出对应数据,再显示。 2.查询出所有省市县,数据隐藏到页面,jquery实现联动显...

田野_7 ⋅ 2016/05/30 ⋅ 6

关于javaweb如何实现类似QQ空间动态及评论数据在jsp页面遍历的问题

我目前想到三种办法,但觉得都不可取,求有经验的大神指点。 方法一:表单提交方式,通过Struct2的s:iterator标签从request域中获取遍历数据,但这种方式会把表情及图片的img标签给转义,将无...

二环南路上的狂奔 ⋅ 2016/04/18 ⋅ 1

在Java开源王国中自由翱翔

在如今的Java领域,各种新技术,新工具层出不穷,一方面,每一种技术都会不停的升级换代,另一方面,还会不断涌现出新的技术和工具。Java世界就像小时候玩的万花筒,尽管实质上只是由几个普通...

孙卫琴 ⋅ 2007/02/10 ⋅ 0

javaweb入门笔记(3)-Servlet

javaweb入门笔记(3)-Servlet 标签: javaweb [TOC] servlet入门 开发步骤: 编写一个java类,实现servlet接口 把开发好的java类部署到web服务器 API文档 Servlet API Documentation 生命周期...

brianway ⋅ 2016/02/06 ⋅ 0

Java开发手册及JavaWeb工程师的成长及实践(及进阶)

> 进阶 个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能- http://geek.csdn.net/news/detail/246999 成为一名合格软件工程师的7点建议- http://blog.csdn.net/dev_csdn/artic...

shareus ⋅ 2016/03/03 ⋅ 0

访问数据库--JDBC

前言   JDBC是在ODBC的基础上开发的支持Java的数据库编程接口,它已成为数据库开发者使用的标准的API。使用JDBC可以很容易地把SQL语句传送到任何一个关系型数据库中。其API包括如下接口: ...

Gnd15732625435 ⋅ 2017/12/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何优雅的编程——C语言界面的一点小建议

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以...

柳猫 ⋅ 20分钟前 ⋅ 0

从零手写 IOC容器

概述 IOC (Inversion of Control) 控制反转。熟悉Spring的应该都知道。那么具体是怎么实现的呢?下面我们通过一个例子说明。 1. Component注解定义 package cn.com.qunar.annotation;impo...

轨迹_ ⋅ 21分钟前 ⋅ 0

系统健康检查利器-Spring Boot-Actuator

前言 实例由于出现故障、部署或自动缩放的情况,会进行持续启动、重新启动或停止操作。它可能导致它们暂时或永久不可用。为避免问题,您的负载均衡器应该从路由中跳过不健康的实例,因为它们...

harries ⋅ 22分钟前 ⋅ 0

手把手教你搭建vue-cli脚手架-详细步骤图文解析[vue入门]

写在前面: 使用 vue-cli 可以快速创建 vue 项目,vue-cli很好用,但是在最初搭建环境安装vue-cli及相关内容的时候,对一些人来说是很头疼的一件事情,本人在搭建vue-cli的项目环境的时候也是...

韦姣敏 ⋅ 33分钟前 ⋅ 0

12c rman中输入sql命令

12c之前版本,要在rman中执行sql语句,必须使用sql "alter system switch logfile"; 而在12c版本中,可以支持大量的sql语句了: 比如: C:\Users\zhengquan>rman target / 恢复管理器: Release 1...

tututu_jiang ⋅ 47分钟前 ⋅ 0

Nginx的https配置记录以及http强制跳转到https的方法梳理

Nginx的https配置记录以及http强制跳转到https的方法梳理 一、Nginx安装(略) 安装的时候需要注意加上 --with-httpsslmodule,因为httpsslmodule不属于Nginx的基本模块。 Nginx安装方法: ...

Yomut ⋅ 今天 ⋅ 0

SpringCloud Feign 传递复杂参数对象需要注意的地方

1.传递复杂参数对象需要用Post,另外需要注意,Feign不支持使用GetMapping 和PostMapping @RequestMapping(value="user/save",method=RequestMethod.POST) 2.在传递的过程中,复杂对象使用...

@林文龙 ⋅ 今天 ⋅ 0

如何显示 word 左侧目录大纲

打开word说明文档,如下图,我们发现左侧根本就没有目录,给我们带来很大的阅读障碍 2 在word文档的头部菜单栏中,切换到”视图“选项卡 3 然后勾选“导航窗格”选项 4 我们会惊奇的发现左侧...

二营长意大利炮 ⋅ 今天 ⋅ 0

智能合约编程语言Solidity之线上开发工具

工具地址:https://ethereum.github.io/browser-solidity/ 实例实验: 1.创建hello.sol文件 2.调试输出结果

硅谷课堂 ⋅ 今天 ⋅ 0

ffmpeg 视频格式转换

转 Mp4 格式 #> ffmpeg -i input.avi -c:v libx264 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 -s 1......

Contac ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部