我们在平时写程序时都会利用各种各样的框架,从而提升工作效率和代码质量,其实框架归根到底是由底层的代码搭建起来,打好基础是非常重要;下面主要想谈谈Servlet如何把从提交form表单时传来的参数封装在一个class里,并且对其进行解析调用,其中涉及的知识点主要是Servlet和Java反射机制。
Servlet基本知识:
1、Servlet的框架是由两个Java包组成的:javax.servlet和javax.servlet.http
2、Servlet的生命周期:
(一)初始化阶段:init方法;
(二)响应客户请求阶段:service方法;
(三)终止阶段:destroy方法
Java反射机制的基本介绍:
1、Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变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