联系人管理系统(MVC框架)

这里做一个联系人管理系统,实现了对联系人的增、删、改、查;表现层,service层和dao层都写了大致框架,还没学数据库,所以都是模拟一下,等学了数据库再来完善。( ^_^ )

 

先上效果图:

增加联系人:

 

删除联系人:

 

修改联系人(前):

 

修改联系人(后):

 

这是整个项目用的类:

 

 

主页index.jsp

<span style="font-size:14px;">
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>联系人管理系统 </title>
    <link href="<c:url value='/css/table.css' ></c:url>" rel="stylesheet" type="text/css" />
    <!-- 若js代码很多则采取外部导入方式 -->
    <script type="text/javascript" src="<c:url value='/js/table.js'></c:url>">
    </script>
    <script type="text/javascript">
    	var path="<c:url value='/' />";//获取项目根路径("/canMvcWeb2/"),因为在js中无法认识c:url标签
    </script>
    
  </head>
  <body>
  	<div>
   	<button οnclick="add();">添加联系人</button>
   	<button οnclick="del();">删除联系人</button>
   	<button οnclick="update();">修改联系人</button>
  	</div>
   	<table id="tb">
   		<tr><th><input type="checkbox" name="parentChk" οnclick="chk(this)">选择</th><th>姓名</th><th>年龄</th><th>电话</th><th class="iid">ID</th></tr>
   	
   	</table>
   	
 	 <!-- 专门用于实现ajax提交ids信息的表单和隐藏帧 -->
 	 <form action="<c:url value='/DelServlet' />" target="iff" method="post" name="form1">
 	 	<input type="hidden" name="ids" />
 	 </form>
 	 <iframe name="iff" style="display:none">
 	 </iframe>
  </body>
</html>
</span>

 

主页中的js代码很多,所以采用分离导入式table.js

<span style="font-size:14px;">function add(){
	//alert(path);
	var url=path+"/jsps/input.jsp";
	//alert(url);
	var resObj=window.showModalDialog(url,{},"dialogHeight:200px;dialogHide:300px;");
	if(resObj){
		addToTable(resObj);
	}
}
function addToTable(obj){
	var oTb=document.getElementById("tb");
	var oTr=oTb.insertRow();
	
	var cell_1=oTr.insertCell();
	cell_1.innerHTML="<input type='checkbox' name='chk' οnclick='subChk()' />";
	var cell_2=oTr.insertCell();
	cell_2.innerHTML=obj.name;
	var cell_3=oTr.insertCell();
	cell_3.innerHTML=obj.age;
	var cell_4=oTr.insertCell();
	cell_4.innerHTML=obj.tel;
	
	//添加ID列,(为接下来删除),并设类样式iid
	var cell_5=oTr.insertCell();
	cell_5.className="iid";
	cell_5.innerHTML=obj.id;
	
	subChk();//从新刷新一下列表
}
function chk(obj){
	var chks=document.getElementsByName("chk");
	for(var i=0;i<chks.length;i++){
		chks[i].checked=obj.checked;
	}
}
function subChk(){
	var sum=0;
	
	var chks=document.getElementsByName("chk");
	for(var i=0;i<chks.length;i++){
		if(chks[i].checked){
			sum++;
		}
	}
	var parentChk=document.getElementsByName("parentChk")[0];
	if(sum==0){
		parentChk.indeterminate=false;
		parentChk.checked=false;
	}else if(sum==chks.length){
		parentChk.indeterminate=false;
		parentChk.checked=true;
	}else{
		parentChk.indeterminate=true;
	}
}
function del(){
	var str="";
	var chks=document.getElementsByName("chk");
	for(var i=0;i<chks.length;i++){
		if(chks[i].checked){
			var oTd=chks[i].parentNode;
			var oTr=oTd.parentNode;
			var id=oTr.cells[4];
			if(str==""){
				str=id;
			}else{
				str+="$%"+id;//把将要删除的联系人id用$%连接
			}
		}
	}
	if(str==""){
		alert("请选择要删除的用户");
		return;
	}else{
		document.getElementsByName("ids")[0].value=str;
		//document.forms["form1"].submit();
		document.getElementsByName("form1")[0].submit();
	}
}
function relDel(boo){
	if(!boo){
		alert("删除失败!");
		return;
	}
	var chks=document.getElementsByName("chk");
	for(var i=chks.length-1;i>=0;i--){
		if(chks[i].checked){
			var oTd=chks[i].parentNode;
			var oTr=oTd.parentNode;
			oTr.parentNode.removeChild(oTr);
		}
	}
	subChk();//从新刷新一下列表
}
function update(){
	var n=0;
	var x=0;
	var chks=document.getElementsByName("chk");
	for(var i=0;i<chks.length;i++){
		if(chks[i].checked){
			n++;
			x=i;
		}
	}
	if(n==0){
		alert("请选择要修改的联系人!");
		return;
	}else if(n>1){
		alert("一次只能修改一个联系人!");
		return;
	}
	var id=chks[x].parentNode.parentNode.cells[4].innerHTML;
	var name=chks[x].parentNode.parentNode.cells[1].innerHTML;
	var age=chks[x].parentNode.parentNode.cells[2].innerHTML;
	var tel=chks[x].parentNode.parentNode.cells[3].innerHTML;
	//alert(id);
	
	//这里封装一个对象,传值到模式窗口
	var obj={"id":id,"name":name,"age":age,"tel":tel};
	
	var url=path+"/jsps/input2.jsp";
	
	var resObj=window.showModalDialog(url,obj,"dialogHeight:200px;dialogHide:300px;");
	
	if(resObj){//如果res为0、null、undefined、false----这些结果都为false
		//直接修改页面表格
		chks[x].parentNode.parentNode.cells[1].innerHTML =resObj.name;
		chks[x].parentNode.parentNode.cells[2].innerHTML=resObj.age;
		chks[x].parentNode.parentNode.cells[3].innerHTML=resObj.tel;
	}
}
</span>


主页的样式也采用了导入table.css

<span style="font-size:14px;">body{
	text-align: center;
}
table{
	clear:left;
	border: 1px solid blue;
	border-collapse: collapse;
	width: 500px;

}
th,td{
	border: 1px solid blue;
}
.iid{
	display: none;
}
div {
	float: left;
	margin: 5px;
	padding: 5px;
}
div button{
	margin: 3px;
}</span>


 

增加联系人input.jsp

<span style="font-size:14px;">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>增加联系人</title>
    <script type="text/javascript">
    	function save(){
    	//document中有form集合,用form的name值也可以找到此form
    	//按理应该先检验表单的数据是否合法,然后在提交,此处省略了
    		//alert("aaaa");
    		document.forms["ff"].submit();
    	}
    	function relSave(obj){
    		//在弹出窗口向主页面传值
			//alert(obj.name);
    		window.returnValue=obj;//窗口关闭后的返回值
    		//window.returnValue=obj;
    		window.close();
    	}
    </script>
  </head>
  <body>
  	请输入联系人信息
   	<form action='<c:url value="/SaveServlet" ></c:url>' name="ff" target="iframe" method="post">
   		姓名:<input type="text" name="name" /><br/>
   		年龄:<input type="text" name="age" /><br/>
   		电话:<input type="text" name="tel" /><br/>
   	</form>
   	<button οnclick="save()">保存</button>
   	<button οnclick="window.close();">取消</button><br/>
   	<iframe name="iframe" style="display: none;">
   	</iframe>
  </body>
</html>
</span>


表单提交的SaveServlet.java

<span style="font-size:14px;">
package cn.hncu.servlet;
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.hncu.domain.User;
import cn.hncu.service.IUserService;
import cn.hncu.service.IUserServiceImpl;


public class SaveServlet extends HttpServlet {
	
	//注入service
	IUserService service=new IUserServiceImpl();
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		//收集(省去对数据的有效性防护)
		String name=request.getParameter("name");
		Integer age=Integer.parseInt(request.getParameter("age"));
		String tel=request.getParameter("tel");
		//封装
		User user =new User();
		user.setName(name);
		user.setAge(age);
		user.setTel(tel);
		//调用service层
		user=service.save(user);
		//根据结果导向不同结果界面
		if(user!=null){
			request.setAttribute("user", user);
		}
		request.getRequestDispatcher("/jsps/saveback.jsp").forward(request, response);
	}

}
</span>


servlet调用的service层

IUserService.java接口

<span style="font-size:14px;">
package cn.hncu.service;

import cn.hncu.domain.User;

public interface IUserService {

	public User save(User user);

	public boolean del(String[] ids);

	public User update(User user);


}
</span>


IUserServiceImpl.java实现类

<span style="font-size:14px;">
package cn.hncu.service;

import cn.hncu.dao.UserDAO;
import cn.hncu.dao.UserDAOJdbc;
import cn.hncu.domain.User;

public class IUserServiceImpl  implements IUserService{
	//注入dao
	UserDAO dao=new UserDAOJdbc();
	@Override
	public User save(User user) {
		return dao.save(user);
	}
	@Override
	public boolean del(String[] ids) {
		
		return dao.del(ids);
	}
	@Override
	public User update(User user) {
		return dao.update(user);
	}

}
</span>


 

service层调用DAO层

UserDAO.java接口

<span style="font-size:14px;">
package cn.hncu.dao;

import cn.hncu.domain.User;

public interface UserDAO {

	public User save(User user);

	public boolean del(String[] ids);

	public User update(User user);


}
</span>


UserDAOJdbc.java实现类

<span style="font-size:14px;">
package cn.hncu.dao;

import java.util.UUID;

import cn.hncu.domain.User;

public class UserDAOJdbc implements UserDAO{

	@Override
	public User save(User user) {
		//等学了数据库再来完善,这里模拟一下
		String id=UUID.randomUUID().toString().replace("-", "");
		user.setId(id);
		System.out.println("User到了:"+user);
		return user;
	}

	@Override
	public boolean del(String[] ids) {
		for(String id:ids){
			System.out.println("要删除联系人的id:"+id);
		}
		return true;
	}

	@Override
	public User update(User user) {
		//对比数据库的user.id,然后进行修改
		System.out.println("这里对"+user+"修改:");
		return user;
	}

}
</span>


Servlet导向saveback.jsp

<span style="font-size:14px;">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
  	<!-- 该页面是ajax返回界面,隐藏在显示帧中 -->
  	<!-- 技术学习:如何从web容器中把后台返回的数据读取并传递给js -->
  	<!-- 两种方式:一是用input组件,二是直接在js中拿 -->
  	<input type="text" id="id" value='<c:out value="${requestScope.user.id}"></c:out>'/>
  	
  	<script type="text/javascript">
  		var id=document.getElementById("id").value;
  		//alert(id);
  		var obj=new Object();
  		obj.id="<c:out value='${requestScope.user.id}' />";
  		obj.name="<c:out value='${requestScope.user.name}' />";
  		obj.age="<c:out value='${requestScope.user.age}' />";
  		obj.tel="<c:out value='${requestScope.user.tel}' />";
  		parent.relSave(obj);
  	</script>
  	
  </body>
</html>
</span>


 

删除的DelServlet.java

<span style="font-size:14px;">
package cn.hncu.servlet;

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.hncu.service.IUserService;
import cn.hncu.service.IUserServiceImpl;

public class DelServlet extends HttpServlet {
	
	IUserService service=new IUserServiceImpl();
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
		
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		//收集
		String strIds=request.getParameter("ids");
		String[] ids=strIds.split("$%");
		//封装
		
		//调用service
		boolean boo=service.del(ids);
		if(boo){
			request.setAttribute("suc", true);
		}
		request.getRequestDispatcher("/jsps/delback.jsp").forward(request, response);
	}

}
</span>


导向的delback.jsp

<span style="font-size:14px;">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
  	<!-- 该页面是ajax返回界面,隐藏在显示帧中 -->
  	<!-- 技术学习:如何从web容器中把后台返回的数据读取并传递给js -->
  	<!-- 两种方式:一是用input组件,二是直接在js中拿 -->
  	<input type="text" id="id" value='<c:out value="${requestScope.suc}"></c:out>'/>
  	
  	<script type="text/javascript">
  		//var boo=document.getElementById("id").value;
  		var boo="<c:out value='${requestScope.suc}' />";
  		//alert(boo);
  		parent.relDel(boo);
  	</script>
  	
  </body>
</html>
</span>


修改的弹出窗口input2.jsp

<span style="font-size:14px;">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用户登录</title>
    <script type="text/javascript">
    	function save(){
    	//document中有form集合,用form的name值也可以找到此form
    	//按理应该先检验表单的数据是否合法,然后在提交,此处省略了
    		//alert("aaaa");
    		document.forms["ff"].submit();
    	};
    	function relUpdate(obj){
    		//在弹出窗口向主页面传值
			//alert(obj.name);
    		window.returnValue=obj;//窗口关闭后的返回值
    		//window.returnValue=obj;
    		window.close();
    	};
    	οnlοad=function(){
    	//在这里接收传来的对象,并给表单中的文本框赋值
    		var obj=window.dialogArguments;
    		if(obj!=null){
    			document.getElementsByName("name")[0].value=obj.name;
    			document.getElementsByName("age")[0].value=obj.age;
    			document.getElementsByName("tel")[0].value=obj.tel;
    			document.getElementsByName("id")[0].value=obj.id;
    		}
    	};
    </script>
  </head>
  <body>
  	请输入联系人信息
   	<form action='<c:url value="/UpdateServlet" ></c:url>' name="ff" target="iframe" method="post">
   		姓名:<input type="text" name="name"  /><br/>
   		年龄:<input type="text" name="age"  /><br/>
   		电话:<input type="text" name="tel"  /><br/>
   		<input type="hidden" name="id" />
   	</form>
   	<button οnclick="save()">保存</button>
   	<button οnclick="window.close();">取消</button><br/>
   	
   
   	<iframe name="iframe" style="display: none;">
   	</iframe>
   
  </body >
</html>
</span>


表单提交的UpdateServlet.java

<span style="font-size:14px;">
package cn.hncu.servlet;

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.hncu.domain.User;
import cn.hncu.service.IUserService;
import cn.hncu.service.IUserServiceImpl;

public class UpdateServlet extends HttpServlet {

	//注入service
		IUserService service=new IUserServiceImpl();
		
		public void doGet(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException {
			doPost(request, response);
		}

		
		public void doPost(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException {
			request.setCharacterEncoding("utf-8");
			//收集(省去对数据的有效性防护)
			String name=request.getParameter("name");
			Integer age=Integer.parseInt(request.getParameter("age"));
			String tel=request.getParameter("tel");
			String id=request.getParameter("id");
			//封装
			User user =new User();
			user.setName(name);
			user.setAge(age);
			user.setTel(tel);
			user.setId(id);
			//调用service层
			user=service.update(user);
			//根据结果导向不同结果界面
			if(user!=null){
				request.setAttribute("user", user);
			}
			request.getRequestDispatcher("/jsps/updateback.jsp").forward(request, response);
		}

}
</span>


servlet导向的updateback.jsp

<span style="font-size:14px;">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
  	
  	<script type="text/javascript">
  		//var boo=document.getElementById("id").value;
  		var obj=new Object();
  		obj.name="<c:out value='${requestScope.user.name}' />";
  		obj.age="<c:out value='${requestScope.user.age}' />";
  		obj.tel="<c:out value='${requestScope.user.tel}' />";
  		parent.relUpdate(obj);
  	</script>
  	
  </body>
</html>
</span>

 

在修改的时候我是从前台页面直接传的值,没有根据联系人的id去后台拿,实时性可能会差点。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值