学生信息管理系统----学生信息

回顾前面

  前面我们实现了班级页面的嵌入,对班级列表的增删改查。为了实现这些功能,建立了数据表,数据表对应的model,和Dao。
创建了Servlet,建立了Servlet与访问地址的映射关系等。
  接下来是对学生信息的管理,其中相同的步骤我打算只是简单的提一下,毕竟操作和之前都差不多。

  建立新的学生表,在model层创建student.java,其中的属性要和数据表的字段想对应。然后创建StudentServlet,并在xml中进行访问地址的映射。

读取学生信息

  这里涉及Servlet层和Dao层的方法,下面给出了对应。
Servlet —>getStudentList
StudentDao —>getStudentList

  Dao中会涉及到一个多条件查询,即姓名和班级两个条件下对学生信息进行检索。

....
String sql = "select * from s_student ";
if(!StringUtil.isEmpty(student.getName())){
	sql += "and name like '%" + student.getName() +"%'";
}
if(student.getClazzId() != 0){
	sql += " and clazz_id = " +student.getClazzId() ;
}
sql += " limit " + page.getStart() +","+page.getPageSize();
ResultSet resultSet = query(sql.replaceFirst("and", "where"));
....

  目的是根据所获取的班级id和学生信息进行查询,按照不一样的条件来对sql语句进行拼接。如果所传的信息中,上面的两个if只有一个能够执行,那么if中就将这个条件加入进去,在后面执行的时候,再将and替换为where达到目的。
  如果两个if条件都满足了,那么在拼接结果中就会出现两个and,此时我们就将第一个and替换为where。

  再来看看Servlet中的部分代码

	private void getStudentList(HttpServletRequest req, HttpServletResponse res) {
		res.setCharacterEncoding("utf-8");
		res.setContentType("text/html;charset=utf-8");
		String name = req.getParameter("studentName");
		Integer currentPage = req.getParameter("page") == null ? 1:Integer.parseInt(req.getParameter("page"));
		Integer pageSize = req.getParameter("rows") == null?999:Integer.parseInt(req.getParameter("rows"));
		Integer clazz = req.getParameter("clazzid") == null?0:Integer.parseInt(req.getParameter("clazzid"));
		Student student = new Student();
		student.setName(name);
		student.setClazzId(clazz);
		
		StudentDao studentDao = new StudentDao();
		List<Student> clazzList = studentDao.getStudentList(student, new Page(currentPage, pageSize));
		studentDao.closeCon();
		int total = studentDao.getStudentListTotal(student);
		studentDao.closeCon();
....

	}

  这里也是先在前台接受数据,保存到student中,将其中的属性传给StudentDao的getStudentList做参数判断。

  其中也有一个total变量来计算在条件查询下的数量是多少,和之前查询班级信息一样,就不说了。

添加学生

  这一模块中,我们要添加的信息包括姓名,密码,性别,电话,QQ,班级。其中班级是在下拉列表中选择。

$.ajax({
	type: "post",
  	url: "StudentServlet?method=AddStudent",
	data: $("#addForm").serialize(),
	success: function(msg){
		if(msg == "success"){
			.....
		}
});

  根据访问请求的地址,查看具体是什么信息、

	private void addStudent(HttpServletRequest req, HttpServletResponse res) {
		// TODO Auto-generated method stub
		String name = req.getParameter("name");
		String password = req.getParameter("password");
		String sex = req.getParameter("sex");
		String mobile = req.getParameter("mobile");
		String qq = req.getParameter("qq");
		int clazzId = Integer.parseInt(req.getParameter("clazzid"));
		Student student = new Student();
		student.setClazzId(clazzId);
		student.setMobile(mobile);
		student.setName(name);
		student.setPassword(password);
		student.setQq(qq);
		student.setSex(sex);
		student.setSn(SnGenerateUtil.generateSn(clazzId));
		StudentDao studentDao = new StudentDao();
		if(studentDao.addStudent(student)){
			try {
				res.getWriter().write("success");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally {
				studentDao.closeCon();
			}
		}
	}

  其中可以看出,这里做的操作是,获取信息,保存信息,再到dao层去做更新。

	public boolean addStudent(Student student){
		String sql = "insert into s_student values(null,'"+student.getSn()+"','"+student.getName();
		sql += "','" + student.getPassword() + "','" + student.getClazzId();
		sql += "','" + student.getSex() + "','" + student.getMobile();
		sql += "','" + student.getQq()+ "',null)";
		return update(sql);
	}

  当执行成功后,就返回一个true,再向前台传回一个success。

图片显示

  为了方便,我们在系统中另外设置一个servlet用于处理图片。jsp中有这样一行代码

<img alt="照片" style="max-width: 200px; max-height: 400px;" title="照片" src="PhotoServlet?method=getPhoto" />

  那么请求的地址也就十分显而易见了

	private void getPhoto(HttpServletRequest req, HttpServletResponse res) {
		int id = req.getParameter("uid") == null ? 0 : Integer.parseInt(req.getParameter("uid"));
		if(id != 0){
			int userType = Integer.parseInt(req.getSession().getAttribute("userType").toString());
			if(userType == 2){
				// 学生
				StudentDao studentDao = new StudentDao();
				Student student = studentDao.getStudent(id);
				studentDao.closeCon();
				if(student != null){
					InputStream photo = student.getPhoto();
					if(photo != null){
						try {
							outputStream(new byte[photo.available()], res);
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}
			}else if(userType == 3){
				// 老师
				return;
			}
		}
		String path = req.getSession().getServletContext().getRealPath("");
		File file = new File(path+"\\file\\logo.jpg");
		try {
			FileInputStream fis = new FileInputStream(file);
			byte[] b = new byte[fis.available()];
			fis.read(b);
			res.getOutputStream().write(b,0,b.length);
			//	outputStream(new byte[fis.available()], res);
					
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

  这个功能只是不想页面空荡荡的。
  以上是获取用户的类型,如果是是学生的信息,就根据学生的id去查询数据库中的数据。如果数据库中有图片的数据,我们就将它返回给前台显示。如果没有,我们就显示一个本地的图片到前台去。其中包含的IO操作都是比较常规的写法。

req.getSession().getServletContext().getRealPath("");

是获取项目的路径。

编辑学生信息

  在模板中有些信息我们是不需要的,所以前台只保留一下几项。

	
	<div id="editDialog" style="padding: 10px">
		<div style="float: right; margin: 20px 20px 0 0; width: 200px; border: 1px solid #EBF3FF">
	    	<img id="edit_photo" alt="照片" style="max-width: 200px; max-height: 400px;" title="照片" src="" />
	    div>   
    	<form id="editForm" method="post">
	    	<table cellpadding="8" >
	    		<tr>
	    			<td>姓名:td>
	    			<td><input id="edit_name" style="width: 200px; height: 30px;" class="easyui-textbox" type="text" name="name" data-options="required:true, missingMessage:'请填写姓名'" />td>
	    		tr>
	    		<tr>
	    			<td>性别:td>
	    			<td><select id="edit_sex" class="easyui-combobox" data-options="editable: false, panelHeight: 50, width: 60, height: 30" name="sex"><option value="">option><option value="">option>select>td>
	    		tr>
	    		<tr>
	    			<td>电话:td>
	    			<td><input id="edit_mobile" style="width: 200px; height: 30px;" class="easyui-textbox" type="text" name="mobile" validType="mobile" />td>
	    		tr>
	    		<tr>
	    			<td>QQ:td>
	    			<td><input id="edit_qq" style="width: 200px; height: 30px;" class="easyui-textbox" type="text" name="qq" validType="number" />td>
	    		tr>
	    		<tr>
	    			<td>班级:td>
	    			<td><input id="edit_clazzList" style="width: 200px; height: 30px;" class="easyui-textbox" name="clazzid" />td>
	    		tr>
	    	table>
	    form>
	div>

学生信息管理系统----学生信息_第1张图片
  Servlet中增加一个editStudent的方法,和之前编辑班级信息的代码几乎一致都是先获取参数,保存到model对象中,再将属性值传给Dao。
  Dao中也增加一个editDtudent的方法,将传入的参数嵌入sql语句中。

	public boolean editStudent(Student student) {
		String sql = "update s_student set name= '"+student.getName()+"'";
		sql += ",sex = '"+student.getSex() +"'";
		sql += ",mobile = '"+student.getMobile() +"'";
		sql += ",qq = '" +student.getQq() +"'";
		sql += ",clazz_id = '" +student.getClazzId()+"'";
		sql += " where id = '"+ student.getId() +"'";
		return update(sql);
	}

学生图片上传

<form id="uploadForm" method="post" enctype="multipart/form-data" action="PhotoServlet?method=SetPhoto" target="photo_target">
	    		
		    	<input class="easyui-filebox" name="photo" data-options="prompt:'选择照片'" style="width:200px;">
		    	<input id="uploadBtn" class="easyui-linkbutton" style="width: 50px; height: 24px;" type="button" value="上传"/>
		    form>
	
	使用户无感觉刷新
	<iframe id="photo_target" name="photo_target">iframe>    

效果
学生信息管理系统----学生信息_第2张图片

新增一个点击事件

		$("#uploadBtn").click(function(){
			$("#uploadForm").submit();
			setTimeout(function(){
				var message =  $(window.frames["photo_target"].document).find("#message").text();
				$.messager.alert("消息提醒",message,"info");
				
				$("#user_photo").attr("src", "PhotoServlet?method=GetPhoto&t="+new Date().getTime());
			}, 1500)
		});

photoServlet中写一个方法uploadPhoto();

你可能感兴趣的:(java,web)