Servlet处理form的一些封装应用

     我们在平时写程序时都会利用各种各样的框架,从而提升工作效率和代码质量,其实框架归根到底是由底层的代码搭建起来,打好基础是非常重要;下面主要想谈谈Servlet如何把从提交form表单时传来的参数封装在一个class里,并且对其进行解析调用,其中涉及的知识点主要是Servlet和Java反射机制。

 

Servlet基本知识:

1、Servlet的框架是由两个Java包组成的:javax.servletjavax.servlet.http

2、Servlet的生命周期:

  (一)初始化阶段:init方法;

  (二)响应客户请求阶段:service方法;

  (三)终止阶段:destroy方法 

 

Java反射机制的基本介绍: 

 

       1、Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fieldsmethods的所有信息,并可于运行时改变fields内容或唤起methods

       2、Java反射机制容许程序在运行时加载、探知、使用编译期间完全未知的classes

 

     换言之,Java可以加载一个运行时才得知名称的class,获得其完整结构

public abstract class TestAction extends HttpServlet {

	protected HttpServletRequest request; //请求对象
	protected HttpServletResponse response;//响应对象
	private ActionForm actionForm;

	/**
	 * 初始化
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void init(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		 init(formClass);//实例化继承ActionForm父类的子类class
		 initField();// 初始化ActionForm 变量
	}
	
	@Override
	protected void service(HttpServletRequest request,HttpServletResponse response) {
		//处理请求
		/**如果想获取form表单提交时的变量信息,可根据ActionForm表单class对应变量的get和set方法获取**/
	}
	
	private void initField() {
	Field[] fields = actionForm.getClass().getDeclaredFields();//返回的是classr的声明变量的集合
	for (Field field : fields) {//遍历
	String fieldName = field.getName();//获取变量名
         String[] values = request.getParameterValues(fieldName);//基于servlet 的 request请求方法
	Class<?> type = field.getType();//变量的类型
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String setMethodName = "set" + firstLetter + fieldName.substring(1);//拼成变量生成的get和set的方法
	Method setMethod;
			try {
				setMethod = actionForm.getClass().getMethod(setMethodName,new Class[] { type });
				setMethod.invoke(actionForm, values);//把页面传来的变量set到class对应的变量上
			} catch (Exception e) {
			}
		}
	}
	
	/**
	 * 销毁
	 */
	@Override
	public void destroy() {
		super.destroy();
	}
} 

  

 

By cq

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值