0

我正在编写一个调用服务方法的示例 servlet 类。服务方法需要验证用户名和密码。

public static void main(String[] args) {

        System.out.println(new UserServiceImpl().login(name, password));
    }
    public String login(String username, String password) {
        StringBuilder validUser = new StringBuilder();
        if(username == null || password == null){           
            return invalidUser();
        }
        if((validUsers.contains(name) && validPassword.contains(password))){    
            validUser.append("<user>");
            validUser.append("<username>");
            validUser.append(username);
            validUser.append("</username>");
            validUser.append("<firstname>");
            validUser.append("Mr M");
            validUser.append("</firstname>");
            validUser.append("<lastname>");
            validUser.append("Tom");
            validUser.append("</lastname>");
            validUser.append("</user>");
            return validUser.toString();
        }
        else{
            return invalidUser();
        }
    }
    private String invalidUser() {
         StringBuilder invalidUser = new StringBuilder();
         invalidUser.append("<status>");
         invalidUser.append("<code>");
         invalidUser.append("401");
         invalidUser.append("</code>");
         invalidUser.append("<message>");
         invalidUser.append("Invalid Credentials");
         invalidUser.append("</message>");
         invalidUser.append("</status>");        
         return invalidUser.toString();
    }

表单提交应该触发 LoginServlet,用户名和密码从中传递给 UserService.login。如果验证了用户名和密码(如果语句没问题),则应返回用户 xml 字符串:

<user><username></username><firstname></firstname><lastname></lastname></user>

否则,应返回状态 xml 字符串:

<status><code>401</code><message>Invalid Credentials</message></status>

在这种情况下,我尝试使用 StringBuilder 来制作上述格式。我可以尝试任何不同的方法吗?像 JaxB 或 Sax 或 Dom,哪种格式更适合制作上述格式?字符串生成器最适合这种情况?

在我的 servlet 类中,如果用户有效,我需要返回查看页面,即欢迎页面,否则返回带有错误详细信息的错误消息页面。

4

2 回答 2

0

SAX 是一种方式解析器——您只能用它读取 XML。JAXB 太多了,除非您想广泛使用 XML。DOM 是一个很好的替代方案,但只是一个替代方案 - 简单 XML 的 StringBuilder 更简单,只要生成正确的 XML,它就是完美的。

于 2013-07-27T05:36:23.827 回答
0

根据我的说法,Jaxb 是我们必须生成 xml 文件的最佳方法。这是最好和最简单的方法。这是 jaxb 的示例。

JaxbGetterSetter.java

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Data")

public class JaxbGetterSetter {

    String name;
    int age;
    int id;
    /**
     * @return the name
     */
    @XmlElement
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    @XmlElement
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    /**
     * @return the id
     */
    @XmlAttribute
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

}

JaxbMarshaller.java

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class JaxbMarshaller {
    public static void main(String[] args) {

      JaxbGetterSetter jaxbGetterSetter = new JaxbGetterSetter();
      jaxbGetterSetter.setId(100);
      jaxbGetterSetter.setName("Pritpal Singh");
      jaxbGetterSetter.setAge(24);

      try {

        File file = new File("/root/Desktop/jaxbExample.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(JaxbGetterSetter.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        // output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        jaxbMarshaller.marshal(jaxbGetterSetter, file);
        jaxbMarshaller.marshal(jaxbGetterSetter, System.out);

          } catch (JAXBException e) {
        e.printStackTrace();
          }

    }
}
于 2016-05-04T05:03:08.233 回答