`

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+Servlet+Jquery+Json基础示例

    在这个"Java+Servlet+Jquery+Json基础示例"中,我们可以看到如何将这四种技术融合在一起创建一个Web应用。首先,用户通过前端界面(HTML+CSS+Jquery)发送Ajax请求,Jquery负责包装和发送这些请求,通常是以Json格式...

    json-servlet-ajax

    1. **序列化与反序列化**:在Servlet中,使用如Jackson或Gson库可以方便地将Java对象转换为JSON字符串,反之亦然。 2. **设置响应头**:Servlet在返回JSON时,需设置响应头`Content-Type`为`application/json`,告知...

    Ajax实现二级/三级联动下拉框---servlet版

    Servlet是Java Web开发中的服务器端组件,用于处理请求并生成响应。 1. **数据库设计**: 在这个示例中,我们有两个SQL文件,`ajax.sql`和`ajaxExample.sql`。这些文件通常用于创建数据库表结构。例如,我们可以...

    jsp-servlet-mysql实现的学生成绩管理系统.docx

    本示例介绍了一个基于JSP、Servlet和MySQL实现的学生成绩信息管理系统,该系统提供了丰富的功能,包括管理员、教师和学生的不同权限操作。以下是系统的详细知识点解析: 1. **技术栈**: - **JSP (JavaServer ...

    Java-xml.rar_XML java_java xml_javaXML.rar_javaxml.r_xml 网站

    Servlet是Java编写服务器端应用程序的标准API,可以生成动态内容。JSP则是更高级的视图技术,允许开发者在HTML中嵌入Java代码,更易于创建用户界面。 在"Java-xml.rar"中,可能包含的Java源代码可能涉及了XML的解析...

    JAVA-DWR简单例子

    - **Servlet**: DWR包含一个Servlet,用于接收和处理来自浏览器的请求。 - **JavaScript API**: 提供了一系列JavaScript对象和方法,供前端开发者在浏览器中使用。 3. **DWR的工作流程** - **初始化**: 在服务器...

    简单的AJAX示例(JSP+servlet)

    在本示例中,我们使用AJAX来验证用户名是否存在,这涉及到JSP(JavaServer Pages)、Servlet以及相关的web配置。 **JSP基础** JSP是Java的一种动态网页技术,它允许开发者在HTML代码中嵌入Java代码,以实现服务器...

    动态网页(JSP+Servlet)教程

    - 示例: `&lt;%@ page language="java" contentType="text/html; charset=UTF-8"%&gt;` - **表达式** - 示例: `!" %&gt;` - **脚本片段** - 示例: `!"; %&gt;` - **声明** - 示例: `! int count = 0; %&gt;` **4.4 JSP的执行...

    Send-json-to-servlet-using-jquery-ajax

    标题 "Send-json-to-servlet-using-jquery-ajax" 涉及到的是在Web开发中,如何使用jQuery的AJAX功能向JavaServlet发送JSON数据。这是一个常见的需求,特别是在前后端分离的架构中,前端通过异步方式与后端交互,提高...

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

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

    递归显示数据库目录树(html+java servlet)

    `递归显示数据库目录树(html+java servlet)`的主题主要涉及到两个核心部分:前端HTML展示和后端Java Servlet处理。 前端HTML是用户与应用交互的界面,它负责将数据以树形结构呈现出来。在HTML中,我们可以使用`&lt;ul&gt;...

    (超赞)JAVA精华之--深入JAVA API

    **3.8 Java与XML联合编程之DOM篇** - **DOM解析** - 使用 DOM 对整个文档进行操作。 #### 四、其他 **4.1 代码复用的规则** - **代码复用** - 如何有效地重用代码。 **4.2 Java IO 包中的Decorator模式** - ...

    Todos-Application-With-Servlet-Jquery-Ajax:使用 serlvet、ajax、html、css、jquery

    【标题】"Todos-Application-With-Servlet-Jquery-Ajax"是一个使用Servlet、Ajax、HTML、CSS和jQuery构建的待办事项应用项目。这个项目旨在展示如何将这些技术结合在一起,创建一个实时更新、无需页面刷新的Web应用...

    Java解析xml配置文件,DOM4J解析xml配置文件,提供使用文档和源码下载

    DOM4J是Java中一个非常流行且功能强大的XML处理库,它提供了丰富的API用于读取、写入、修改XML文档。在本教程中,我们将深入探讨如何使用DOM4J解析XML配置文件,并模拟处理`web.xml`中的`url-pattern`元素。 首先,...

    ajax调用servlet_test_可以运行的例子,是一个完整的工程

    本示例“ajax调用servlet_test_可以运行的例子”提供了一个完整的工程,它演示了如何利用Ajax异步地与Servlet进行交互,从而提高用户体验。这个项目基于JDK5.0环境,确保了兼容性和可运行性。 首先,让我们深入理解...

    JAVA 学生管理系统-版本1(servlet3.0+bootstrap3.3.7+jsp)

    总结来说,这个项目是一个典型的Java Web应用示例,展示了如何结合Servlet、Bootstrap、JQuery和Ajax来开发一个功能完整的学生信息管理系统。对于初学者,这是一个很好的学习案例,可以帮助理解Java Web开发的基本...

    ajax和java servlet交互

    **Ajax与Java Servlet交互详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,实现了页面的异步更新,大大...

    Java学习资料 javaEE学习代码,包括前端三大件和Servlet

    这个压缩包“java-ee-master”显然包含了与JavaEE相关的代码示例,特别是前端三大件(HTML、CSS、JavaScript)和Servlet的实践应用。 首先,让我们详细探讨JavaEE。Java Enterprise Edition(JavaEE),现在被称为...

    ajax完整代码与实现.rar_ajax_java_servlet_实现_源码

    本资源包含了一套完整的Ajax实现,涵盖了Java Servlet和JavaScript的相关应用,旨在帮助开发者深入理解和掌握Ajax的实现过程。 **1. JavaScript基础** 在Ajax中,JavaScript扮演着关键角色。它负责创建和管理...

Global site tag (gtag.js) - Google Analytics