题目:
学员管理:
学员录入,与Student类中字段对应,点击保存数据,提交给UserSaveServlet进行处理,保存成功后,显示成功信息,并且提供一个用户列表<a>的超链接,
点击“用户列表”超链接,显示出所有的用户数据信息,并且可以对数据进行删除操作。
说明:没有用到jsp,还没学到那儿……
学生信息录入页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/StuRecServlet" method="post">
姓名:<input type="text" name="name"/><br/>
性别:<input type="radio" name="sex" value="true"/>男
<input type="radio" name="sex" value="false"/>女<br/>
年龄:<input type="text" name="age" /><br/>
班级:<input type="text" name="className" /><br/>
<input type="submit" value="提交信息" />
</form>
</body>
</html>
Servlet项目配置信息:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>StuRecServlet</servlet-name>
<servlet-class>cn.itcast.servlet.student.StuRecServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StuRecServlet</servlet-name>
<url-pattern>/StuRecServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>StuManServlet</servlet-name>
<servlet-class>cn.itcast.servlet.student.StuManServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StuManServlet</servlet-name>
<url-pattern>/StuManServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>StuDelServlet</servlet-name>
<servlet-class>cn.itcast.servlet.student.StuDelServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StuDelServlet</servlet-name>
<url-pattern>/StuDelServlet</url-pattern>
</servlet-mapping>
</web-app>
学生domain和DAO:
package cn.itcast.servlet.domain;
public class Student {
private String id;
private String name;
private boolean sex;
private String age;
private String className;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex
+ ", age=" + age + ", className=" + className + "]";
}
}
package cn.itcast.servlet.dao;
import java.util.List;
public interface IStudentDAO {
List<Student> getAllStudents();
void addStudent(Student stu);
void deleteStudent(String id);
// void updateStudent(Student stu);
}
package cn.itcast.servlet.dao;
import java.io.File;
public class StudentDAOImpl implements IStudentDAO {
private final static String XMLFile = "D:\\Java\\WorkSpace\\MyWebApps\\webdoc\\student.xml";
/**
* 获取Document对象.
*
* @return
*/
public Document getDoc() {
DocumentBuilder builder = null;
Document doc = null;
try {
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
doc = builder.parse(new File(XMLFile));
} catch (Exception e) {
e.printStackTrace();
doc = builder.newDocument();
}
return doc;
}
/**
* 获取xml文件所有的Student对象,存放到List中.
*/
@Override
public List<Student> getAllStudents() {
/*
* 注意:这里只能使用局部变量doc来操作,不能直接使用getDoc()的方式,否则抛出异常:
* WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it。
* 在dom操作中全局变量赋值后再取值的时候会不确定
*/
Document doc = getDoc();
List<Student> list = new ArrayList<Student>();
// 得到所有的student元素.
NodeList nodeList = doc.getElementsByTagName("student");
// 迭代
for (int i = 0; i < nodeList.getLength(); i++) {
Student stu = new Student();
Element stuEl = (Element) nodeList.item(i);
stu.setId(stuEl.getAttribute("id"));
stu.setAge(stuEl.getElementsByTagName("age").item(0)
.getTextContent());
stu.setClassName(stuEl.getElementsByTagName("className").item(0)
.getTextContent());
stu.setName(stuEl.getElementsByTagName("name").item(0)
.getTextContent());
stu.setSex(Boolean.parseBoolean(stuEl.getElementsByTagName("sex")
.item(0).getTextContent()));
list.add(stu);
}
return list;
}
/**
* 向xml中增加一个Student.
*/
@Override
public void addStudent(Student stu) {
Document doc = getDoc();
Element stuEl = doc.createElement("student");
stuEl.setAttribute("id", stu.getId());
Element nameEl = doc.createElement("name");
nameEl.setTextContent(stu.getName());
stuEl.appendChild(nameEl);
Element sexEl = doc.createElement("sex");
sexEl.setTextContent(stu.isSex() + "");
stuEl.appendChild(sexEl);
Element ageEl = doc.createElement("age");
ageEl.setTextContent(stu.getAge());
stuEl.appendChild(ageEl);
Element classEl = doc.createElement("className");
classEl.setTextContent(stu.getClassName());
stuEl.appendChild(classEl);
// 通过根节点增加子节点(student元素)
doc.getDocumentElement().appendChild(stuEl);
// 将数据从内存保存到文件中
try {
Transformer tf = TransformerFactory.newInstance().newTransformer();
Source source = new DOMSource(doc);
Result result = new StreamResult(new File(XMLFile));
tf.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 从Xml文件中删除一个节点.
*/
@Override
public void deleteStudent(String id) {
Document doc = getDoc();
NodeList nodeList = doc.getElementsByTagName("student");
for (int i = 0; i < nodeList.getLength(); i++) {
Element el = (Element) nodeList.item(i);
if (id.equals(el.getAttribute("id"))) {
el.getParentNode().removeChild(el);
break;
}
}
// 将数据从内存保存到文件中
try {
Transformer tf = TransformerFactory.newInstance().newTransformer();
Source source = new DOMSource(doc);
Result result = new StreamResult(new File(XMLFile));
tf.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
学生录入Servlet:
package cn.itcast.servlet.student;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.itcast.servlet.dao.StudentDAOImpl;
import cn.itcast.servlet.domain.Student;
//学生信息录入StuRecServlet
public class StuRecServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置编码,否则录入后读取信息会造成乱码.
req.setCharacterEncoding("UTF-8");
String id = UUID.randomUUID().toString();
String name = req.getParameter("name");
boolean sex = Boolean.parseBoolean(req.getParameter("sex"));
String age = req.getParameter("age");
String className = req.getParameter("className");
StudentDAOImpl stuDao = new StudentDAOImpl();
Student stu = new Student();
stu.setName(name);
stu.setSex(sex);
stu.setAge(age);
stu.setClassName(className);
stu.setId(id);
stuDao.addStudent(stu);
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<h1>录入成功!</h1>");
//关联学生管理StuManServlet.
out.println("<a href='/StuManServlet'>查看学生信息列表</a>");
out.flush();
}
}
学生管理Servlet:
package cn.itcast.servlet.student;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.itcast.servlet.dao.StudentDAOImpl;
import cn.itcast.servlet.domain.Student;
//学生信息管理StuManServlet
public class StuManServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
StudentDAOImpl stuDao = new StudentDAOImpl();
List<Student> stuList = stuDao.getAllStudents();
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
// 写表头信息,设置边框和宽度
out.println("<form action='/StuManServlet' method='POST'>");
out.println("<table border=1 bordercolor='blue' width='70%'><tr><th>ID</th><th>姓名</th><th>性别</th><th>年龄"
+ "</th><th>班级</th><th>操作</th></tr>");
//迭代处理
for (Student stu : stuList) {
String id = stu.getId();
String name = stu.getName();
String sex = stu.isSex() + "";
String age = stu.getAge();
String className = stu.getClassName();
out.println("<tr>");
out.println("<td>" + id + "</td>");
out.println("<td align='center'>" + name + "</td>");
out.println("<td align='center'>" + sex + "</td>");
out.println("<td align='center'>" + age + "</td>");
out.println("<td align='center'>" + className + "</td>");
// 关联StuDelSetvlet删除的时候需要传递给StuDelServlet当前的ID,根据ID删除.
out.println("<td align='center'><a href='/StuDelServlet?id=" + id
+ "'>删除</a></td>");
out.println("</tr>");
out.flush();
}
out.println("</table></form>");
out.flush();
}
}
学生删除Servlet:
package cn.itcast.servlet.student;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.itcast.servlet.dao.StudentDAOImpl;
//学生信息删除StuDelServlet
public class StuDelServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
StudentDAOImpl stuDao = new StudentDAOImpl();
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
String id = req.getParameter("id");
if(id!=null && !"".equals(id)){
stuDao.deleteStudent(id);
out.println("<h1>删除成功!</h1>");
//关联学生管理servlet
out.println("<br/><a href='/StuManServlet'>查看学生信息列表</a>");
out.flush();
}
}
}