唐祖庭 2021-12-08 20:24 采纳率: 95.9%
浏览 15
已结题

有能翻译以下吗?求答案

protected
void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
Class userClass = null;
Object user = null;

    try {
        userClass = Class.forName("com.example.homework2.User");
        Constructor constructor = userClass.getConstructor();
        user = constructor.newInstance();

    } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
        e.printStackTrace();
    }
    Enumeration<String> parameterNames = request.getParameterNames();
    while (parameterNames.hasMoreElements()) {
        String parameterKey = parameterNames.nextElement();
        String upperCase = parameterKey.toUpperCase();
        String[] parameterValues = request.getParameterValues(parameterKey);
        Method method = null;
        String getMethod = "set" + parameterKey.replace(parameterKey.charAt(0), upperCase.charAt(0));
        try {

            if (parameterValues.length != 1) {
                method = userClass.getMethod(getMethod, String[].class);
                method.invoke(user, (Object) parameterValues);
            } else {
                method = userClass.getMethod(getMethod, String.class);
                method.invoke(user, parameterValues[0]);
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
    System.out.println(user);
}


  • 写回答

1条回答 默认 最新

  • -御狐神- 2021-12-08 21:21
    关注
    
    // HttpServletRequest 是一次网络请求中的请求信息,HttpServletResponse 是网络请求中的响应信息
    protected
    void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
    Class userClass = null;
    Object user = null;
    
        try {
            // 从Jar包中加载"com.example.homework2.User"类,加载结果为Class
            userClass = Class.forName("com.example.homework2.User");
    
            // 获取类"com.example.homework2.User"的构造函数
            Constructor constructor = userClass.getConstructor();
          // 调用构造函数反射生成实例
            user = constructor.newInstance();
     
    // 反射过程中的异常处理
        } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    // 获取网络请求中的参数名列表
        Enumeration<String> parameterNames = request.getParameterNames();
    
    // 遍历参数名
        while (parameterNames.hasMoreElements()) {
    
          // 迭代遍历, parameterKey 为迭代的到的参数名
            String parameterKey = parameterNames.nextElement();
    
                // 参数名大写
            String upperCase = parameterKey.toUpperCase();
    
            // 获取参数对应的值
            String[] parameterValues = request.getParameterValues(parameterKey);
            Method method = null;
    
            // 获取参数对应的Setter方法,比如参数名是username,此处set方法就是setUserName,这样实现很不规范
            String getMethod = "set" + parameterKey.replace(parameterKey.charAt(0), upperCase.charAt(0));
            try {
                // 判断参数值的数目, 
                if (parameterValues.length != 1) {
                    // 反射获取"com.example.homework2.User"类中的指定方法,如setUserName方法
                    method = userClass.getMethod(getMethod, String[].class);
                  // 反射调用方法,设置值
                    method.invoke(user, (Object) parameterValues);
                } else {
                  // 同事
                    method = userClass.getMethod(getMethod, String.class);
                    method.invoke(user, parameterValues[0]);
                }
     } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
        }
    // 打印最后的用户信息
        System.out.println(user);
    

    这个实现有点粗糙,不太实用,可以考虑使用框架实现

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 创建了问题 12月8日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来