黑马程序员javaweb教程:案例--注册功能
案例--注册功能
1功能说明
没有人不知道什么叫注册功能吧!
我们这里的注册功能很简单,给用户提供一个页面,在页面中给出一个注册表单,用户输入自己的注册信息(用户名和密码)。然后提交表单,把请求发送到Servlet,Servlet会把用户的注册信息保存到XML文件中。完毕!
我们也不打算让Servlet做太多的事情,所以真正保存信息的工作还是交给DAO来做吧!所以在Servlet中只是获取DAO对象,然后调用DAO的方法来完成保存信息!
DAO – Data Access Object(数据的存取工作,由这个对象来完成!)
●User :这是我们注册功能的唯一数据类!
不能用业务数据做主键(唯一标识!)
username:用户名是唯一的!
password
email:唯一的!
2项目分析
用户通过注册页面的表单向Servlet发送请求,Servlet获取DAO对象,然后调用DAO 对象的方法save()方法完成向XML文档中保存注册信息。
●reigst.jsp:包含注册表单的页面,提交表单会把请求交给RegistServlet来处理;
●RegistServlet:注册Servlet,包含doPost()方法。获取DAO对象,然后调用DAO对
象的save()方法传递User对象(注册信息领域对象)过去,由DAO完成保存注册信
息;
●RegistDao:只有一个save(User)方法,会使用DOM4J完成把User保存到XML文件
中;
●RegistDaoImpl:为了更好的处理耦合的问题,我们把RegistDao定义为接口,而
RegistDaoImpl为其实现类;
●User:领域对象,用来封装注册信息。最终还需要把它转换成XML数据持久化!
●user.xml:因为我们现在没学数据库,只能使用XML作为存储数据的工具。
总是从无依赖开始!
3从注册页面开始
测试页面
4从底层开始(无依赖的领域对象)
package cn.itcast.regist.domain;
public class User {
private String username;
private String password;
......
}
5编写XML文件
在src目录下创建user.xml文件。只要在src下创建的文件,都会copy到classes目录。最终会在项目发布时发送到Tomcat下。
6RegistDao
package cn.itcast.regist.dao;
import https://www.360docs.net/doc/2f16729002.html,er;
public interface RegistDao {
public void save(User user) throws Exception;
}
7RegistDaoImpl
RegistDaoImpl是RegistDao的实现类!将来如果希望把数据存储到数据库中时,只需要再给出一个新的RegistDao实现类即可,无需去修改代码!
package cn.itcast.regist.dao.impl;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import https://www.360docs.net/doc/2f16729002.html,.URISyntaxException;
import https://www.360docs.net/doc/2f16729002.html,.URL;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import cn.itcast.regist.dao.RegistDao;
import https://www.360docs.net/doc/2f16729002.html,er;
public class RegistDaoImpl implements RegistDao {
private String xmlFilePath = "F:\database\users.xml";
public RegistDaoImpl() {}
public RegistDaoImpl(String xmlFilePath) {
this.xmlFilePath = xmlFilePath;
}
public String getXmlFilePath() {
return xmlFilePath;
}
public void setXmlFilePath(String xmlFilePath) {
this.xmlFilePath = xmlFilePath;
}
private Document getDoc() throws DocumentException {
SAXReader reader = new SAXReader();
ClassLoader loader = this.getClass().getClassLoader();
InputStream in = loader.getResourceAsStream(this.xmlFilePath);
return reader.read(in);
}
private void saveDoc(Document doc) throws IOException, URISyntaxException { OutputFormat format = new OutputFormat();
format.setIndent(true);
format.setNewlines(true);
format.setEncoding("UTF-8");
ClassLoader loader = this.getClass().getClassLoader();
URL url = loader.getResource(this.xmlFilePath);
XMLWriter out = new XMLWriter(new FileWriter(new File(url.toURI())), format);
out.write(doc);
out.close();
}
public void save(User user) throws Exception {
Document doc = getDoc();
Element root = doc.getRootElement();
Element userEle = root.addElement("user");
userEle.addElement("username").setText(user.getUsername());
userEle.addElement("password").setText(user.getPassword());
saveDoc(doc);
}
}
8RegistServlet
package cn.itcast.regist.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.itcast.bean.factory.BeanFactory;
import cn.itcast.regist.dao.RegistDao;
import https://www.360docs.net/doc/2f16729002.html,er;
public class RegistServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = new User(username, password);
RegistDao registDao = new RegistDaoImpl();
registDao.save(user);
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().print("注册成功!!!");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
10查找的是哪个XML文件
最后我们讨论一个问题!
在我们的MyEclipse项目中,src目录下有一个user.xml文件,同时WebRoot\WEB-INF\classes下也有一个user.xml文件。
注意,项目最终是需要发布的,项目发布到Tomcat的webapps目录下。这说明在webapps 下会有一个regist目录,这下面的WEB-INF\classes目录下也会有一个user.xml文件。
问题是,最终我们注册的用户信息会保存到user.xml文件中,现在有三个user.xml文件,到底保存到哪个user.xml文件中去了呢?
现在就算是你把MyEclipse中的项目删除100次,程序一样可以使用!因为真正运行的项目是在Tomcat\webapps\regist,而不是MyEclipse中的项目!!!你可别真去删除,因为Tomcat下的项目是没有源代码的!