用于检索HttpServletRequest参数的Java库

用于检索HttpServletRequest参数的Java库,java,jakarta-ee,web,Java,Jakarta Ee,Web,我正在开发一个使用servlet的应用程序。老板要求我不要使用Struts2或JSF或SpringMVC,而只使用servlet和jsp。在我的Servlet中,我需要调用request.getParameter(“parameterName”)来检索参数值。 我的问题 是否存在一个Java库,我可以将JavaBean和HttpServletRequest对象传递给并返回一个填充的JavaBean。i、 e.JavaBean自动填充请求参数。来自Ignite Realtime的Jive软件有一个

我正在开发一个使用
servlet
的应用程序。老板要求我不要使用
Struts2或JSF或SpringMVC
,而只使用
servlet和jsp
。在我的
Servlet
中,我需要调用
request.getParameter(“parameterName”)
来检索参数值。 我的问题
是否存在一个Java库,我可以将
JavaBean
HttpServletRequest
对象传递给并返回一个填充的
JavaBean
。i、 e.
JavaBean
自动填充请求参数。

来自Ignite Realtime的Jive软件有一个BeanUtils类,似乎可以执行您想要的操作。它是开源的。我从来没用过。它在OpenFire下载中。

我通常对任何类型的JavaBean反射内容都会有一个合适的方法:

public void填充(对象bean,
地图属性)
抛出非法访问异常,
InvocationTargetException

根据 指定的名称/值对。此方法使用Java反射API来 识别相应的“属性设置器”方法名称,并处理 字符串、布尔、int、long、float和 双重的此外,这些类型(或 还可以识别相应的基元类型

要为每个属性调用的特定setter方法是 使用常用的JavaBeans内省机制确定。因此 您可以使用一个 与bean本身的类相关联。如果没有这样的信息 类可用,标准方法名称转换(“set”加上 使用所涉及财产的大写名称)

注意:与JavaBeans规范相反的是,拥有超过 一个setter方法(具有不同的参数签名)用于相同的 财产

警告-此方法的逻辑是为提取而自定义的 HTTP请求中基于字符串的请求参数。可能是的 不是使用类型转换进行常规属性复制所需的。 为此,请检查copyProperties()方法

请注意,它是为从HTTP请求中提取基于字符串的请求参数而定制的,因此它正是您想要的。问题是HTTP请求参数以
映射的形式出现,需要从数组中展开

我做了一个快速测试,以确保它按预期工作。我注意到类必须是
公共的
,并且在它自己的文件中,这样内省才能起作用

我创建了一个JavaBean,如下所示:

public class JavaBean {

    String userName;
    String password;
    Integer id;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

}
并将以下内容用于快速测试:

public static void main(String[] args) throws Exception {
    final Map<String, String[]> params = new HashMap<>();
    params.put("userName", new String[]{"userA"});
    params.put("password", new String[]{"secrect"});
    params.put("id", new String[]{"10"});
    final JavaBean javaBean = new JavaBean();
    BeanUtilsBean.getInstance().populate(javaBean, params);
    System.out.println(javaBean.getUserName());
    System.out.println(javaBean.getPassword());
    System.out.println(javaBean.getId());

}

我还注意到,它似乎不喜欢数值属性的
int
——似乎期望一个
Integer

JavaBean能让您做什么,而
HttpServletRequest
不能?@DavidWallace
JavaBean
将包含发送到后端的表单字段。提交表单时,我想通过调用API来填充这个
JavaBean
,我正在寻找的库将提供
HttpServletRequest
对象。你是说你正在使用某种需要bean的ORM工具吗?@Boris,是的,我想可能就是这样。只是检查一下。没有必要提供一个与OP实际想要的答案不匹配的答案。是的,谢谢eric,我读了你的问题。有一个可以满足你需要的。请你发布一个指向Util类的链接。这是开源的吗?
userA
secrect
10