首页 > 编程语言 >JavaWEB06--book02--利用反射合并 LoginServlet 和 RegistServlet 程序为 UserServlet 程序

JavaWEB06--book02--利用反射合并 LoginServlet 和 RegistServlet 程序为 UserServlet 程序

时间:2022-10-28 12:37:16浏览次数:71  
标签:RegistServlet -- resp req 程序 bean action BeanUtils method


​项目源码​

合并 LoginServlet 和 RegistServlet 程序为 UserServlet 程序

优化一:使用​​if-else​

JavaWEB06--book02--利用反射合并 LoginServlet 和 RegistServlet 程序为 UserServlet 程序_工具类

优化代码二: 使用​​反射​​优化大量 else if 代码:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
String action = req.getParameter("action");
try {
// 获取action 业务鉴别字符串,获取相应的业务方法反射对象
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class,HttpServletResponse.class);
// System.out.println(method);
// 调用目标业务 方法
method.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}

代码优化三: 抽取 BaseServlet 程序。

JavaWEB06--book02--利用反射合并 LoginServlet 和 RegistServlet 程序为 UserServlet 程序_反射_02

BaseServlet 程序代码:

public abstract class BaseServlet extends HttpServlet {


@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决post请求中文乱码问题
//一定要在获取请求参数之前调用有效
req.setCharacterEncoding("UTF-8");
//解决响应的中文乱码
resp.setContentType("text/html; charset=UTF-8");


String action = req.getParameter("action");
try {
// 获取action业务鉴别字符串,获取相应的业务 方法反射对象
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
// System.out.println(method);
// 调用目标业务 方法
method.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);// 把异常抛给Filter过滤器
}
}

}

修改 UserServlet 程序继承 BaseServlet 程序。

数据的封装和抽取 BeanUtils 的使用

BeanUtils 工具类,它可以一次性的把所有请求的参数注入到 JavaBean 中。
BeanUtils 工具类,经常用于把 Map 中的值注入到 JavaBean 中,或者是对象属性值的拷贝操作。

BeanUtils 它不是 Jdk 的类。而是第三方的工具类。所以需要导包。

1、导入需要的 jar 包:
commons-beanutils-1.8.0.jar
commons-logging-1.1.1.jar

2、编写 WebUtils 工具类使用

package com.nie.utils;/*
*
*@auth wenzhao
*@date 2021/2/3 1:28
*/

import org.apache.commons.beanutils.BeanUtils;


import java.util.Map;

public class WebUtils {
/**
* 把Map中的值注入到对应的JavaBean属性中。
* @param value
* @param bean
*/
public static <T> T copyParamToBean( Map value , T bean ){
try {
System.out.println("注入之前:" + bean);
/**
* 把所有请求的参数都注入到user对象中
*/
BeanUtils.populate(bean, value);
System.out.println("注入之后:" + bean);
} catch (Exception e) {
e.printStackTrace();
}
return bean;
}


/**
* 将字符串转换成为int类型的数据
* @param strInt
* @param defaultValue
* @return
*/
public static int parseInt(String strInt,int defaultValue) {
try {
return Integer.parseInt(strInt);
} catch (Exception e) {
// e.printStackTrace();
}
return defaultValue;
}

}


标签:RegistServlet,--,resp,req,程序,bean,action,BeanUtils,method
From: https://blog.51cto.com/u_15850876/5804330

相关文章