字符串构建器中的输出格式,jaxb sax

时间:2013-07-27 05:07:28

标签: java java-ee servlets jaxb sax

我正在编写一个调用服务方法的示例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类中,我需要返回查看页面,如果是有效用户则返回欢迎页面,否则返回错误信息的错误消息页面。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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();
          }

    }
}