利用反射优化Servlet代码

在当前的web项目中,只是简单的使用jsp和servlet来实现功能,没有使用到框架,所以无论使用什么方法都需要通过servlet中的doGet和doPost方法。Servlet原本的获取type值执行方法的if…else代码并没有存在错误,但是这样写会太过于繁琐,代码量大,还会导致阅读不方便。

利用反射优化Servlet代码_第1张图片

为了提高效率,减少代码量,提高阅读,那么可以利用简单的反射来优化代码

JSP:

可以在value处定义方法的参数,然后通过post或get等方法拼接链接参数传到servlet处。

<input style="display: none" name="type" value="参数 ">

SERVLET:

在servlet处获取请求参数type,然后通过方法名获取方法的对象,getMethod需要两个参数,方法名和参数名,因为在java需要通过方法名和参数列表来确定一个方法,将其映射成函数,然后就可以在相应的函数中做处理了。最后调用方法执行,invoke用于调用一个方法,第一个参数时要调用方法的对象,剩下是调用方法需要的参数。
  public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		 request.setCharacterEncoding("utf-8");
		 response.setContentType("text/html;charset=UTF-8");
		    // 获取请求参数type
	   String type = request.getParameter("type");
	   try {
	    	 /* 通过此对象获取类,再获取类中指定名称并传入参数类型的对应Class对象 */
            Method method = this.getClass().getMethod(type, HttpServletRequest.class, HttpServletResponse.class);
            /* 执行方法,this实际上是getMethod对象 */
            method.invoke(this, request, response);
	   } catch (Exception e) {
		   throw new RuntimeException(e);
	   }
   }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
  }

 

getMethod()和getDeclaredMethod()区别:

1. getDeclaredMethod()返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。 
2.getDeclaredMethods() 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声    明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。 
3.getMethod()返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。 
4. getMethods() 返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。 
5.getDeclaredField()返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 
6. getDeclaredFields() 返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。

 

注:方法名和参数名

  1. 方法名需要和doGet中的type传过来的参数一致
  2. HttpServletRequestHttpServletResponse作为参数列表,需要和doGetdoPost中的HttpServletRequest相对应,

否则报错

你可能感兴趣的:(利用反射优化Servlet代码)