黑马程序员javaweb教程:案例--注册功能

黑马程序员javaweb教程:案例--注册功能
黑马程序员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下的项目是没有源代码的!

相关主题
相关文档
最新文档