【问题标题】:Java Servlet check if username already existJava Servlet 检查用户名是否已经存在
【发布时间】:2018-05-07 12:58:46
【问题描述】:

这是一个检查用户名是否已经存在,如果不存在则添加它的函数。它在 DepartmentBean 类中。

私有列表用户;

public List<UserBean> getUsers() {
    return users;
}

public int flag;

public int getFlag() {
    return flag;
}


public void setFlag(int flag) {
    this.flag = flag;
}

public void addIfAbsent(UserBean userBean) {

            if (users.stream().anyMatch(x -> x.getUsername().equals(userBean.getUsername()))) {
        setFlag(1);// flag to indicate that there is user with the same name

            } else {

                setFlag(2);
           users.add(userBean);// add the user

            }
        }

在 Servlet 中,我像这样检查标志:

    DepartmentBean dp = new DepartmentBean();
    UserBean user = new UserBean();//UserBean is class which store name and password
    DepartmentBean departmentBean = read();
    String userName = request.getParameter("username");
    String password = request.getParameter("password");


    user.setPassowrd(password);
    user.setUsername(userName);
    departmentBean.addIfAbsent(user);

         if(dp.flag == 2)//if flag is 2, their's no user with the same name, so write it
         {

    RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
    rd.forward(request, response);
    write(departmentBean);//write to xml

         }

如果这超出了 if 大括号正在工作并制作记录。但是,如果我使用它,它不会将我带到白页而不是 index.jsp。

这是 Servlet 中的写入和读取函数:

public static DepartmentBean read() throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(DepartmentBean.class, UserBean.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        return (DepartmentBean) unmarshaller.unmarshal(new StreamSource(new File("1.xml")));
    }

    public static void write(DepartmentBean department) throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(DepartmentBean.class, UserBean.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.marshal(department, new File("1.xml"));
    }

【问题讨论】:

  • 为什么不让addIfAbsent(...) 返回一个布尔值并摆脱flag 的魔力?但是如果 add...if...absent 应该已经处理过了,servlet 为什么还要写呢?

标签: java xml servlets jaxb


【解决方案1】:

我看到您正在使用两个 DepartmentBean 变量:一个名为“dp”,一个名为“departmentBean”。您使用后者来检查是否已经存在用户(因此“departmentBean.flag”被修改)和“dp”来检查标志的值(之前在代码中没有被修改)。我建议这样做:

DepartmentBean departmentBean = new DepartmentBean();
UserBean user = new UserBean();
String userName = request.getParameter("username");
String password = request.getParameter("password");


user.setPassowrd(password);
user.setUsername(userName);
departmentBean.addIfAbsent(user);

if(departmentBean.flag == 2)
{

    RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
    rd.forward(request, response);
    write(departmentBean);//write to xml

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 2023-03-22
    • 1970-01-01
    • 2015-05-05
    • 2015-06-17
    • 2016-08-08
    相关资源
    最近更新 更多