`

java-servlet、DOM、html综合运用示例

 
阅读更多
题目:

学员管理:
学员录入,与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();
		}
	}
	
}
分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JavaScript完全自学宝典 源代码

    \testJson\src\jsonExercise\JSONServlet.java 处理页面请求的Servlet。 \testJson\src\jsonExercise\ComdtyBean.java 商品信息的POJO。 \testJson\WebRoot\orderInfo.jsp 录入商品信息的JSP页面。 第21...

    Java学习笔记-个人整理的

    {12.10}示例}{162}{section.12.10} {12.10.1}exists}{165}{subsection.12.10.1} {12.11}集合操作}{165}{section.12.11} {12.11.1}union}{166}{subsection.12.11.1} {12.11.2}intersect与minus}{166}{subsection...

    jsp 开发技术大全

    全书共分9篇32章,分别介绍了JSP基础、环境搭建和开发工具、Java语言基础、JSP语法、JSP内建对象、JavaBean技术、Servlet技术、JSP经典设计模式、数据库的安装与创建、数据库访问技术、SQL语句在JSP中的应用、高能...

    JSP开发技术大全 JSP

    全书共分9篇32章,分别介绍了JSP基础、环境搭建和开发工具、Java语言基础、JSP语法、JSP内建对象、JavaBean技术、Servlet技术、JSP经典设计模式、数据库的安装与创建、数据库访问技术、SQL语句在JSP中的应用、高性能...

    JSP开发技术大全 源码

    全书共分9篇32章,分别介绍了JSP基础、环境搭建和开发工具、Java语言基础、JSP语法、JSP内建对象、JavaBean技术、Servlet技术、JSP经典设计模式、数据库的安装与创建、数据库访问技术、SQL语句在JSP中的应用、高性能...

    Android解析服务器端发来的xml数据示例

    服务器端我使用dom4j第三方包来组织xml数据,大家可自行百度下载。而Android客户端则使用 XmlPullParser来解析xml数据。服务器端代码: 代码如下: package servlet; import java.io.IOException; import java.io....

    Ajax详解.rar

    Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本系列的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 —— 从总体概述到细节的...

    Ajax基础教程(扫描版)

    原书名:Foundations of Ajax 原出版社: Apress 作者: (美)Ryan Asleson,Nathaniel T....b.2.6 java blueprints 252 b.2.7 ajax.net 252 b.2.8 microsoft的atlas项目 253 b.2.9 ruby on rails ... 253

    Python编程入门经典

    Java EE servlet 477 21.7.4 选择Jython开发工具 483 21.8 使用Jython进行测试 483 21.9 嵌入Jython解释器 484 21.10 处理C-Python和Jython 之间的差异 487 21.11 本章小结 488 21.12 习题 488 第Ⅳ部分 附 录 附录A...

    Ext+JS高级程序设计.rar

    8.3.1 一个结合DataWrite和RowEditor的Grid示例 238 8.3.2 在CRUD操作中restful的设置以及使用Ext.Direct的问题 247 8.4 ListView控件 248 8.5 本章小结 251 第四部分 Ext 扩展和Ext插件 第9章 Ext 扩展 254 9.1 ...

Global site tag (gtag.js) - Google Analytics