第28章J2EE SSH基础学习-Struts2-Hibernate整合-学生与班级管理实现

这一张主要是在之前的SSH的基础之上添加了(学生,班级)之间的关系。然后基本的补充信息如下:

数据库信息表:schema.sql

-- 用户信息表
create table tbl_user(
user_no char(6) primary key,
user_pwd char(6) not null,
user_name varchar(30) not null
);


-- 班级信息表
Create table tbl_clazz(
	clazz_no int primary key auto_increment,
	clazz_name varchar(30) not null,
	stu_cnt int not null default 0
);

-- 学生信息表
create table tbl_student(
stu_no char(4) primary key,
stu_name varchar(30) not null,
stu_mark int default 0,
stu_sex char(1),
stu_hobbies char(30),
stu_origin varchar(2),
stu_memp varchar(300),
stu_pic medoumblob, 
clazz_no int,
constraint FK_CLAZZ_STU foreign key(clazz_no) references tbl_clazz(clazz_no)
);
insert into tbl_clazz(clazz_name) values('软工一班'),('软工二班'),('软工三班');

insert into tbl_user values('000101','123456','王帅');
insert into tbl_user values('000102','123456','梅梅');
 

添加的信息:

Clazz.java

/**
 * @Title: Clazz.java
 * @package: edu.fjnu.training.domain
 * @author: Zhou kailun
 * @date: 2018年5月30日 下午7:17:24
 * @version: V1.0
 */
package edu.fjnu.training.domain;

/** 
 * ClassName: Clazz 班级类
 * Description: 存储一个班级基本信息
 * Author: Zhou kailun 
 *
 */
public class Clazz {
	/**班级编号*/
	private Integer clazzNo;
	/**班级名字*/
	private String clazzName;
	/**学生人数*/
	private Integer stuCnt;
	
	/**
	 * <p>Title: </p>
	 * <p>Description: </p>
	 */
	public Clazz() {
		// TODO Auto-generated constructor stub
	}

	public Integer getClazzNo() {
		return clazzNo;
	}

	public void setClazzNo(Integer clazzNo) {
		this.clazzNo = clazzNo;
	}

	public String getClazzName() {
		return clazzName;
	}

	public void setClazzName(String clazzName) {
		this.clazzName = clazzName;
	}

	public Integer getStuCnt() {
		return stuCnt;
	}

	public void setStuCnt(Integer stuCnt) {
		this.stuCnt = stuCnt;
	} 
}

Student.java

/**
 * 工  程   名:TagDemoPrj-20180221	<br>
 * 文  件   名:Student.java	<br>
 * 工具包名:edu.fjnu.domain	<br>
 * 功能描述:TODO	<br>
 * 创建时间:2018年5月21日 下午2:00:49	<br>
 * 版本信息:V1.0
 * @创建人:周开伦	
 */
package edu.fjnu.training.domain;

import java.util.Arrays;

/**
 * 类名:Student	<br>
 * 功能描述:	<br> 
 * 创建日期:2018年5月21日 下午2:00:49	<br>
 * 修改备注:
 * @作者信息:Zhou kailun	<br>
 */
public class Student extends ValueObject {
	/**学生学号*/
	private String stuNo;
	/**学生姓名*/
	private String stuName;
	/**学生性别*/
	private String stuSex;
	/**学生爱好*/
	private String[] stuHobbies;
	/**学生爱好字符串:方便hibernate映射*/
	private String stuHobbyStr;
	/**学生籍贯*/
	private String stuOrigin;
	/**学生成绩*/
	private Integer stuMark;
	/**学生备注*/
	private String stuMemo;
	/**学生照片*/
	private byte[] stuPic;
	/**学生所在班级*/
	private Clazz clazz;
	
	public Student()
	{
		super();  
	}
	public Student(String stuNo,String stuName,int stuMark)
	{
		super();
		this.stuNo=stuNo;
		this.stuName=stuName;
		this.stuMark=stuMark;
		 
	}
	
	 
	@Override
	public String toString() {
		return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", stuSex="
				+ stuSex + ", stuHobbies=" + Arrays.toString(stuHobbies)
				+ ", stuOrigin=" + stuOrigin + ", stuMark=" + stuMark
				+ ", stuMemo=" + stuMemo + ", stuPic="
				+ Arrays.toString(stuPic) + "]";
	}
	public String getStuNo() {
		return stuNo;
	}
	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public Integer getStuMark() {
		return stuMark;
	}
	public void setStuMark(Integer stuMark) {
		this.stuMark = stuMark;
	}
	public String getStuSex() {
		return stuSex;
	}
	public void setStuSex(String stuSex) {
		this.stuSex = stuSex;
	}
	public String[] getStuHobbies() {
		return stuHobbies;
	}
	public void setStuHobbies(String[] stuHobbies) {
		this.stuHobbies = stuHobbies;
		if(this.stuHobbies!=null)
		{
			StringBuilder sb = new StringBuilder();
			for(String hobby:this.stuHobbies){
				sb.append(hobby).append("|");
			}
			
			sb.deleteCharAt(sb.length()-1);
			this.stuHobbyStr = sb.toString();
		}
		else  
			this.stuHobbyStr =null;
	}
	
	public String getStuHobbyStr() {
		return stuHobbyStr;
	}
	public void setStuHobbyStr(String stuHobbyStr) {
		this.stuHobbyStr = stuHobbyStr;
		if(this.stuHobbyStr!=null){
			this.stuHobbies=this.stuHobbyStr.split("\\|");
		}
		else 
			this.stuHobbies=null;
		
	}
	public String getStuOrigin() {
		return stuOrigin;
	}
	public void setStuOrigin(String stuOrigin) {
		this.stuOrigin = stuOrigin;
	}
	public String getStuMemo() {
		return stuMemo;
	}
	public void setStuMemo(String stuMemo) {
		this.stuMemo = stuMemo;
	}
	public byte[] getStuPic() {
		return stuPic;
	}
	public void setStuPic(byte[] stuPic) {
		this.stuPic = stuPic;
	}
	public Clazz getClazz() {
		return clazz;
	}
	public void setClazz(Clazz clazz) {
		this.clazz = clazz;
	}
	 
}

Clazz.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="edu.fjnu.training.domain">
	<!-- 班级信息与数据库匹配 -->
	<class name="Clazz" table="tbl_clazz">
	 	<id name="clazzNo" column="clazz_no" type="java.lang.Integer" >
	 		
	 	</id>
	 	
		<property name="clazzName" column="clazz_name" type="java.lang.String" length="30" not-null="true"></property>
		<property name="stuCnt" column="stu_cnt" type="java.lang.Integer" not-null="true"></property>
	</class>
</hibernate-mapping>

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="edu.fjnu.training.domain">
	<!-- 学生信息与数据库匹配 -->
	<class name="Student" table="tbl_student">
	 	<id name="stuNo" column="stu_no" type="java.lang.String" length="4"></id>
		<property name="stuName" column="stu_name" type="java.lang.String" length="30" not-null="true"></property>
		<property name="stuMark" column="stu_mark" type="java.lang.Integer" length="11"></property>
		<property name="stuSex"  column="stu_sex" type="java.lang.String" length="2"></property>
		<property name="stuHobbyStr" column="stu_hobbies" type="java.lang.String" length="30"></property>
		<property name="stuOrigin"  column="stu_origin" type="java.lang.String" length="2"></property>
		<property name="stuMemo" column="stu_memo" type="java.lang.String" length="30"></property>
		<property name="stuPic" column="stu_pic" type="binary"></property>
		<many-to-one name="clazz" class="Clazz" column="clazz_no" lazy="false"></many-to-one>
	
	</class>
</hibernate-mapping>

ClazzDao.java 

/**
 * @Title: ClazzDao.java
 * @package: edu.fjnu.training.dao
 * @author: Zhou kailun
 * @date: 2018年5月30日 下午7:46:45
 * @version: V1.0
 */
package edu.fjnu.training.dao;

import java.util.List;

import edu.fjnu.training.domain.Clazz;

/** 
 * ClassName: ClazzDao
 * Description: TODO
 * Author: Zhou kailun 
 *
 */
public interface ClazzDao {
	
	/** 
	 * Title:增加班级信息<br>
	 * Description: 增加班级记录<br> 
	 * @param clazz 班级对象
	 * @return void 
	 * @throws
	 */
	public void addClazz(Clazz clazz);
	/**
	 * Title: 加载班级列表<br>
	 * Description:加载所有班级列表 <br> 
	 * @return List<Clazz> 班级列表
	 * @throws
	 */
	public List<Clazz> listClazz();
	/***
	 * Title:更新班级信息<br>
	 * Description:更新班级信息,主要更新班级数量 <br>
	 * @param clazz :
	 * @return void 
	 * @throws
	 */
	public void updateClazz(Clazz clazz);
	/**
	 * Title: 获得班级信息<br>
	 * Description: 更具班级编号,获取班级信息<br>
	 * @param clazzNo 班级编号 
	 * @return Clazz 班级信息
	 * @throws
	 */
	public Clazz loadClazzByNo(Integer clazzNo);
}	

ClazzDaoHibernateImpl.java 

/**
 * @Title: ClazzDaoHibernateImpl.java
 * @package: edu.fjnu.training.dao
 * @author: Zhou kailun
 * @date: 2018年5月30日 下午7:54:26
 * @version: V1.0
 */
package edu.fjnu.training.dao;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import edu.fjnu.training.domain.Clazz;
import edu.fjnu.training.utils.HibernateUtils;

/** 
 * ClassName: ClazzDaoHibernateImpl
 * Description: TODO
 * Author: Zhou kailun 
 *
 */
public class ClazzDaoHibernateImpl implements ClazzDao {

	/**
	 * <p>Title: </p>
	 * <p>Description: </p>
	 */
	public ClazzDaoHibernateImpl() {
		// TODO Auto-generated constructor stub
	}

	/* (non-Javadoc)
	 * <p>Title: addClazz </p>
	 * <p>Description: </p>
	 * @param clazz
	 * @see edu.fjnu.training.dao.ClazzDao#addClazz(edu.fjnu.training.domain.Clazz)
	 */
	@Override
	public void addClazz(Clazz clazz) {
		Session session=HibernateUtils.createSession();
		Transaction trans=null;
		
		try{
			trans=session.beginTransaction();
			
			session.save(clazz);
			trans.commit();
		}catch(HibernateException e){
			e.printStackTrace();
			trans.rollback();
		}finally{
			if(session.isOpen()){
				session.close();
			}
		}
		
		
	}

	/* (non-Javadoc)
	 * <p>Title: listClazz </p>
	 * <p>Description: </p>
	 * @return
	 * @see edu.fjnu.training.dao.ClazzDao#listClazz()
	 */
	@Override
	public List<Clazz> listClazz() {
		Session session=HibernateUtils.createSession();
		Transaction trans=null;
		List<Clazz> clazzList=null;
		
		try{
			String hql="from Clazz c order by c.clazzNo";
			clazzList=session.createQuery(hql).list();
			trans=session.beginTransaction();
			 
			trans.commit();
		}catch(HibernateException e){
			e.printStackTrace();
			trans.rollback();
		}finally{
			if(session.isOpen()){
				session.close();
			}
		}
		
		return clazzList;
	}

	@Override
	public void updateClazz(Clazz clazz) {
		Session session=HibernateUtils.createSession();
		Transaction trans=null;
		
		try{
			trans=session.beginTransaction();
			
			session.saveOrUpdate(clazz);
			trans.commit();
		}catch(HibernateException e){
			e.printStackTrace();
			trans.rollback();
		}finally{
			if(session.isOpen()){
				session.close();
			}
		}
	}

	@Override
	public Clazz loadClazzByNo(Integer clazzNo) {
		Session session=HibernateUtils.createSession();
		Transaction trans=null;
		Clazz clazz=null;
		try{
			trans=session.beginTransaction();
			
			clazz=session.get(Clazz.class,clazzNo);
			trans.commit();
		}catch(HibernateException e){
			e.printStackTrace();
			trans.rollback();
		}finally{
			if(session.isOpen()){
				session.close();
			}
		}
		return clazz;
	}

}

接下来主要是更改了StudentService的实现方法。如下

StudentServiceImpl.java

增加操作:addStudent()

public void addStudent(Student stu) {
		// TODO Auto-generated method stub
		StudentDao stuDao=new StudentDaoHibernateImpl();
		 
		stuDao.addStudent(stu);
		
		/*更新班级学生人数*/
		ClazzDao clazzDao=new ClazzDaoHibernateImpl();
		Clazz clazz=clazzDao.loadClazzByNo(stu.getClazz().getClazzNo());
		clazz.setStuCnt(clazz.getStuCnt()+1);
		clazzDao.updateClazz(clazz);
	}

删除操作:

public void removeStudent(String stuNo) {
		// TODO Auto-generated method stub
		StudentDao stuDao=new StudentDaoHibernateImpl();
		ClazzDao clazzDao=new ClazzDaoHibernateImpl();
		
		Clazz clazz=stuDao.getStudentByStuNo(stuNo).getClazz();
		if(clazz!=null){
			clazz.setStuCnt(clazz.getStuCnt()-1);
		} 
		stuDao.removeStudent(stuNo);
		clazzDao.updateClazz(clazz);
	}

更新操作:

public void updateStudent(Student stu) {
		StudentDao stuDao=new StudentDaoHibernateImpl();
		ClazzDao clazzDao=new ClazzDaoHibernateImpl();
		Clazz oldClazz = stuDao.getStudentByStuNo(stu.getStuNo()).getClazz();
		//发现转班级操作
		Clazz newClazz=clazzDao.loadClazzByNo(stu.getClazz().getClazzNo());
		if(oldClazz!=null && newClazz!=null && oldClazz.getClazzNo()!=newClazz.getClazzNo()){
			//以前有班级的同学
			oldClazz.setStuCnt(oldClazz.getStuCnt()-1);
			newClazz.setStuCnt(newClazz.getStuCnt()+1);
			clazzDao.updateClazz(oldClazz);
			clazzDao.updateClazz(newClazz);
		}
		else if(newClazz!=null && oldClazz==null){
			newClazz.setStuCnt(newClazz.getStuCnt()+1);
			clazzDao.updateClazz(newClazz);
		}
		stuDao.updateStudent(stu);
	}

学生Action主要增加了学生班级字段;然后对相应数据进行保存操作。将loadAll改成了loadStudents方法;struts-student.xml也进行了相应的操作。

StudentAction.java

/**
 * 工  程   名:SMS-SSH-20180524	<br>
 * 文  件   名:StudentAction.java	<br>
 * 工具包名:edu.fjnu.training.action	<br>
 * 功能描述:TODO	<br>
 * 创建时间:2018年5月24日 下午1:29:41	<br>
 * 版本信息:V1.0
 * @创建人:Zhou Kailun	
 */
package edu.fjnu.training.action;

import java.io.File;
import java.io.FileInputStream;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import edu.fjnu.training.domain.Clazz;
import edu.fjnu.training.domain.Student;
import edu.fjnu.training.service.ClazzService;
import edu.fjnu.training.service.ClazzServiceImpl;
import edu.fjnu.training.service.StudentQueryHelper;
import edu.fjnu.training.service.StudentService;
import edu.fjnu.training.service.StudentServiceImpl;

/**
 * 类名:StudentAction	<br>
 * 功能描述:	<br> 
 * 创建日期:2018年5月24日 下午1:29:41	<br>
 * 修改备注:
 * @作者信息:Zhou kailun	<br>
 */
public class StudentAction extends BaseAction {

	/**学生信息对象*/
	private Student stu; 
	/**学生信息列表*/
	private List<Student> stuList;
	/**班级列表*/
	private List<Clazz> clazzList;
	
	/**查询辅助对象*/
	private StudentQueryHelper helper;
	
	/**上传图片名字:与jsp请求网页名字相同,后面两条属性必须一样写入stuPicFilenName,stuPicContentType */
	private File stuPic; 
	private String stuPicFileName;
	private String stuPicContentType;
	
	/**<p>构造函数:</p><br><br>
	 * <p>描述:</p><br> 
	 */
	public StudentAction() {
		// TODO Auto-generated constructor stub
	}
	public String toReg()throws Exception{
		ClazzService clazzService=new ClazzServiceImpl();
		clazzList=clazzService.loadClazzList();
		
		stu=new Student();
		stu.setStuSex("m");
		stu.setStuHobbies(new String[]{"rn"});
		return "reg_page";
	}
	public String reg()throws Exception{
		//从File中获得图片的二进制数据,如果图片为空,会抛出异常
		if(stuPic!=null){
			FileInputStream fis=new FileInputStream(stuPic);
			byte[]picData=new byte[fis.available()];
			fis.read(picData);
			stu.setStuPic(picData);
			fis.close();
		}
		StudentService studentService=new StudentServiceImpl();
		studentService.addStudent(stu);
		
		return "loadAllAct";
	} 
	public String loadStudents()throws Exception{
		StudentService studentService=new StudentServiceImpl();
		stuList=studentService.loadAllStudent();
		
		ClazzService clazzService=new ClazzServiceImpl();
		clazzList=clazzService.loadClazzList();
		
		return "list_page";
	}
	//remove?stu.stuNo=s001
	public String remove()throws Exception{
		StudentService studentService=new StudentServiceImpl();
		studentService.removeStudent(stu.getStuNo());
		return "loadAllAct";
	}
	//remove?stu.stuNo=s001
	/**
	 * 方法名:预更新操作	<br>
	 * 功能描述:	<br>  
	 * @return : 
	 * @throws:
	 * @see   :
	 */
	public String preUpdate()throws Exception{
		ClazzService clazzService=new ClazzServiceImpl();
		clazzList=clazzService.loadClazzList();
		
		
		StudentService studentService=new StudentServiceImpl();
		stu=studentService.getStudentByStuNo(stu.getStuNo());
		return "update_page";
	}
	
	public String update()throws Exception{
		//从File中获得图片的二进制数据
		if(stuPic!=null){
			FileInputStream fis=new FileInputStream(stuPic);
			byte[]picData=new byte[fis.available()];
			fis.read(picData);
			stu.setStuPic(picData);
			fis.close();
		}
		
		StudentService studentService=new StudentServiceImpl();
		studentService.updateStudent(stu);
		return "loadAllAct";
	}
	//loadPic?stu.stuNo=s001
	public String loadPic()throws Exception{
		StudentService stuService=new StudentServiceImpl();
		byte[] picData=stuService.loadStuPicByNo(stu.getStuNo());
		HttpServletResponse response=ServletActionContext.getResponse();
		response.setContentType("image/jpeg");
		response.getOutputStream().write(picData);
		response.getOutputStream().flush();
		response.getOutputStream().close();;
		return null;
	}
	
	public Student getStu() {
		return stu;
	}
	public void setStu(Student stu) {
		this.stu = stu;
	}
	public File getStuPic() {
		return stuPic;
	}
	public void setStuPic(File stuPic) {
		this.stuPic = stuPic;
	}
	public String getStuPicFileName() {
		return stuPicFileName;
	}
	public void setStuPicFileName(String stuPicFileName) {
		this.stuPicFileName = stuPicFileName;
	}
	public String getStuPicContentType() {
		return stuPicContentType;
	}
	public void setStuPicContentType(String stuPicContentType) {
		this.stuPicContentType = stuPicContentType;
	}
	public List<Student> getStuList() {
		return stuList;
	}
	public void setStuList(List<Student> stuList) {
		this.stuList = stuList;
	}
	public List<Clazz> getClazzList() {
		return clazzList;
	}
	public void setClazzList(List<Clazz> clazzList) {
		this.clazzList = clazzList;
	}
	public StudentQueryHelper getHelper() {
		return helper;
	}
	public void setHelper(StudentQueryHelper helper) {
		this.helper = helper;
	} 
	
	
}

ClazzAction.java

/**
 * @Title: ClazzAction.java
 * @package: edu.fjnu.training.action
 * @author: Zhou kailun
 * @date: 2018年5月30日 下午9:28:50
 * @version: V1.0
 */
package edu.fjnu.training.action;

import java.util.List;

import edu.fjnu.training.domain.Clazz;
import edu.fjnu.training.service.ClazzService;
import edu.fjnu.training.service.ClazzServiceImpl;

/** 
 * ClassName: ClazzAction
 * Description: TODO
 * Author: Zhou kailun 
 *
 */
public class ClazzAction extends BaseAction {
	/**班级信息列表*/
	private List<Clazz> clazzList=null;
	public String loadClazzList()throws Exception{
		ClazzService clazzService=new ClazzServiceImpl();
		clazzList=clazzService.loadClazzList();
		return "list_page";
	}
	/**
	 * <p>Title: </p>
	 * <p>Description: </p>
	 */
	public ClazzAction() {
		// TODO Auto-generated constructor stub
	}
	public List<Clazz> getClazzList() {
		return clazzList;
	}
	public void setClazzList(List<Clazz> clazzList) {
		this.clazzList = clazzList;
	}
	
}

struts-clazz.xml

<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">


<struts> 
	<!-- 教师信息管理 -->
	<package name="clazzPkg" namespace="/clazz" extends="smsPkg">
		<action name="*" class="edu.fjnu.training.action.ClazzAction" method="{1}">
			<result name="list_page">../jsps/clazz/list_clazz.jsp</result>
		</action>
	</package>
</struts>

struts-student.xml

<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">


<struts>
   
	 <!-- 学生信息管理 -->
	<package name="stuPkg" namespace="/student" extends="smsPkg">
		<!-- 
		<action name="toReg" class="edu.fjnu.training.action.StudentAction" method="toReg">
			<result name="reg_page"  type="dispatcher">../jsps/student/reg_student.jsp</result>
		</action>
		
		<action name="work" class="edu.fjnu.training.action.StudentAction" method="work">
		</action>
		
		<action name="reg" class="edu.fjnu.training.action.StudentAction" method="reg"> 
			<result name="loadAllAct" type="redirectAction">loadAll</result>
		</action>
		
		<action name="loadAll" class="edu.fjnu.training.action.StudentAction" method="loadAll">
			<result name="list_page" >../jsps/student/list_student.jsp</result>
		</action>
		
		<action name="remove" class="edu.fjnu.training.action.StudentAction" method="remove">
			<result name="loadAllAct" type="redirectAction">loadAll</result>
		</action>
		
		<action name="preUpdate" class="edu.fjnu.training.action.StudentAction" method="preUpdate">
			<result name="update_page">../jsps/student/update_student.jsp</result>
		</action>
		
		<action name="update" class="edu.fjnu.training.action.StudentAction" method="update">
			<result name="loadAllAct" type="redirectAction">loadAll</result>
		</action>
		
		<action name="loadPic" class="edu.fjnu.training.action.StudentAction" method="loadPic">
			
		</action>
		 -->
		<action name="*" class="edu.fjnu.training.action.StudentAction" method="{1}">
			<result name="reg_page"  type="dispatcher">../jsps/student/reg_student.jsp</result> 
			<result name="list_page" >../jsps/student/list_student.jsp</result>
			<result name="update_page">../jsps/student/update_student.jsp</result> 
			<result name="loadAllAct" type="redirectAction">loadStudents</result>
		</action>
	</package>
	 
</struts>

然后就是对jsp页面进行的一些更改:

reg_student.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ include file="/jsps/common-tags.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'reg_student.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

<%-- <link rel="stylesheet" type="text/css" href="../../../css/style.css">  --%>
<%-- <link rel="stylesheet" type="text/css" href="/sms/css/style.css">   --%>
<%-- <link rel="stylesheet" type="text/css" href="<%=basePath%>/css/style.css">--%>
<link rel="stylesheet" type="text/css"
	href="<c:url value="/css/style.css"/>">
<script type="text/javascript"
	src="<c:url value="/js/common.js"></c:url>"></script>

</head>

<body>

	<h3>新生登记(2018年5月22日08:02:55)</h3>
	<s:form action="reg" namespace="/student" method="post" enctype="multipart/form-data">
		<img
			id="stuPhoto" style="float:right;" alt="学生图片"
			src="<c:url value="/pics/default.jpg"/>" width="160px" height="160px" />
		<!-- 学生信息 学号: -->
		<div>
			<label>学号:</label>
			<s:textfield name="stu.stuNo"></s:textfield>
		</div>
		<!-- 学生信息 密码: -->
		<div>
			<label>姓名:</label>
			<s:textfield name="stu.stuName"></s:textfield>
		</div>
		<div>
			<label>班级:</label>
			<s:select name="stu.clazz.clazzNo" list="clazzList" listKey="clazzNo" listValue="clazzName" headerKey="0" headerValue="--请选择--">
				
			</s:select>
		</div>
		<div>
			<label>相片:</label>
			<s:file name="stuPic" onchange="$('stuPhoto').src=this.value"></s:file>
		</div>
		<div>
			<label>成绩:</label>
			<s:textfield name="stu.stuMark"></s:textfield>
		</div>
		<div>
			<label>性别:</label>
			<!-- 
			<s:radio name="stu.stuSex" list="#{'ma':'男','fe':'女'}"></s:radio> 
			 -->
			<s:radio name="stu.stuSex" list="#{\"m\":'男',\"f\":'女'}"></s:radio> 
		</div>
		<div>
			<label>爱好:</label> 
			<s:checkboxlist name="stu.stuHobbies" list="#{'cm':'爬山','rd':'阅读','sw':'游泳','rn':'跑步'}"></s:checkboxlist>
		</div>
		<div>
			<label>籍贯:</label>
			<s:select name="stu.stuOrigin" list="#{'xm':'厦门','fz':'福州','nd':'宁德','pt':'莆田'}"></s:select> 
		</div>
		<div>
			<label>备注:</label>
			<s:textarea name="stu.stuMemo"  rows="6" cols="60" ></s:textarea>
		</div>
		<div>
			<s:submit value="注册登记"/> 
		</div>
	</s:form>
	
	<a href="<c:url value="/smsMgr" />?act=main">首页</a>
	<%-- <jsp:include page="../../css/footer.jsp"></jsp:include>--%>
</body>
</html>

list_student.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
	isELIgnored="false"%>
<%@ include file="/jsps/common-tags.jsp"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>学生列表</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<link rel="stylesheet" type="text/css"
	href="<c:url value="/css/style.css"/>">
<style>
</style>
<script>
	
		function removeStudent(stuNo,stuName){
			if(confirm("您确定要删除(学号:"+stuNo+" 姓名:"+stuName+")的学生信息吗?"))
			{ 
				 
				location.href="<s:url action="remove" namespace="/student"></s:url>?stu.stuNo="+stuNo;
			}
		}
		//修改学生信息
		function updateStudent(stuNo){
			location.href="<s:url action="preUpdate" namespace="/student"></s:url>?stu.stuNo="+stuNo;
		}
	</script>
</head>

<body>
	<h3>学生列表</h3>
	<s:form action="loadStudents" namespace="/student" method="post">
		<label>姓名:</label><s:textfield name="helper.qryStuNo" size="4"></s:textfield> 
		<label>姓名:</label><s:textfield name="helper.qryStuName" size="4"></s:textfield> 
		<label>班级:</label><s:select name="helper.qryClazzNo" list="clazzList" listKey="clazzNo" listValue="clazzName" headerKey="0" headerValue="-请选择-"></s:select> 
		<label>成绩范围:</label><s:textfield name="helper.qryMinStuMark" size="3"></s:textfield> - <s:textfield name="helper.qryMaxStuMark" size="3"></s:textfield> 
		<label>性别:</label><s:select name="helper.qryStuSex" list="#{'':'-请选择','m':'男','f':'女' }"></s:select>                  
		<label>籍贯:</label><s:select name="helper.qryStuOrigin" list="#{'':'请选择','xm':'厦门','fz':'福州','nd':'宁德','pt':'莆田' }"></s:select>
		<s:submit value="查询"></s:submit>
	</s:form>
	<table border="1" cellspacing="0" cellpadding="3px">
		<caption>学生信息列表</caption>

		<thead>
			<tr>
				<th>序号</th>
				<th>学号</th>
				<th>姓名</th>
				<th>班级</th>
				<th>成绩</th>
				<th>性别</th>
				<th>爱好</th>
				<th>籍贯</th>
				<th>备注</th>
				<th>操作</th>
			</tr>
		</thead>

		<tbody>
			<s:iterator var="stu" value="stuList">
				<tr>
					<td>0</td>
					<td>
						<s:property value="#stu.stuNo" />
					</td>
					<td>
						<img alt="学生照片" width="100px" height="80px"
						src="<s:url action="loadPic" namespace="/student"></s:url>?stu.stuNo=<s:property value="#stu.stuNo"/>">
						<br>
						<s:property value="#stu.stuName" />
					</td>
					<td>
						<s:property value="#stu.clazz.clazzName"/>
					</td>
					<td>
						<s:property value="#stu.stuMark" />
					</td>
					<td>
						<s:if test="#stu.stuSex==\"m\"">男</s:if>
						<s:elseif test="#stu.stuSex==\"f\"">女</s:elseif>
						<s:else>请完善信息</s:else>
					</td>
					<td>
						<s:iterator var="hobby" value="#stu.stuHobbies">
							<s:if test="#hobby=='rd'">阅读</s:if>
							<s:elseif test="#hobby=='rn'">跑步</s:elseif>
							<s:elseif test="#hobby=='cm'">爬山</s:elseif>
							<s:elseif test="#hobby=='sw'">游泳</s:elseif>
							<s:else>无</s:else>
						</s:iterator>
					</td>
					<td>
						<s:if test="#stu.stuOrigin=='fz'">福州</s:if> 
						<s:elseif test="#stu.stuOrigin=='xm'">厦门</s:elseif>
						<s:elseif test="#stu.stuOrigin=='nd'">宁德</s:elseif>
						<s:elseif test="#stu.stuOrigin=='pt'">莆田</s:elseif>
						<s:else>请完善信息</s:else></td>
					<td>
						<s:property value="#stu.stuMemo" />
					</td>
					<td>
						<button onclick="updateStudent('<s:property value="#stu.stuNo"/>');">修改</button>
						<button onclick="removeStudent('<s:property value="#stu.stuNo"/>','<s:property value="#stu.stuName"/>');">删除</button>
					</td>
				</tr>
			</s:iterator>
		</tbody>
	</table>

	<hr>
	<a href="<c:url value="/smsMgr" />?act=main">首页</a>
</body>
</html>

update_student.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false" %>
<%@ include file="/jsps/common-tags.jsp" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>学生信息修改</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	 
	<%-- <link rel="stylesheet" type="text/css" href="../../../css/style.css">  --%> 
	<%-- <link rel="stylesheet" type="text/css" href="/sms/css/style.css">   --%>
	<%-- <link rel="stylesheet" type="text/css" href="<%=basePath%>/css/style.css">--%>
	<link rel="stylesheet" type="text/css" href="<c:url value="/css/style.css"/>">   
  	<script type="text/javascript" src="<c:url value="/js/common.js"></c:url>"></script>
  </head>
  
  <body>
  	
    <h3>学生信息修改:<s:property value="stu.stuName"/></h3>
     
    <s:form action="update" namespace="/student" method="post" enctype="multipart/form-data">
		<img id="stuPhoto" style="float:right;" alt="学生图片"
			src="<s:url action="loadPic" namespace="/student"></s:url>?stu.stuNo=<s:property value="stu.stuNo"/>" width="160px" height="160px" />
		<!-- 学生信息 学号: -->
		<div>
			<label>学号:</label><s:property value="stu.stuNo"/>
			<s:hidden name="stu.stuNo"></s:hidden>
			<!-- <s:textfield name="stu.stuNo" hidden="hidden"></s:textfield>-->
		</div>
		<!-- 学生信息 密码: -->
		<div>
			<label>姓名:</label>
			<s:textfield name="stu.stuName"></s:textfield>
		</div>
		<div>
			<label>班级:</label>
			<s:select  name="stu.clazz.clazzNo"  list="clazzList" headerKey="0" headerValue="--请选择--" listKey="clazzNo" listValue="clazzName"></s:select>
		</div>
		<div>
			<label>相片:</label>
			<s:file name="stuPic" onchange="$('stuPhoto').src=this.value"></s:file>
		</div>
		<div>
			<label>成绩:</label>
			<s:textfield name="stu.stuMark"></s:textfield>
		</div>
		<div>
			<label>性别:</label>
			<!-- 
			<s:radio name="stu.stuSex" list="#{'ma':'男','fe':'女'}"></s:radio> 
			 -->
			<s:radio name="stu.stuSex" list="#{\"m\":'男',\"f\":'女'}"></s:radio> 
		</div>
		<div>
			<label>爱好:</label> 
			<s:checkboxlist name="stu.stuHobbies" list="#{'cm':'爬山','rd':'阅读','sw':'游泳','rn':'跑步'}"></s:checkboxlist>
		</div>
		<div>
			<label>籍贯:</label>
			<s:select name="stu.stuOrigin" list="#{'xm':'厦门','fz':'福州','nd':'宁德','pt':'莆田'}"></s:select> 
		</div>
		<div>
			<label>备注:</label>
			<s:textarea name="stu.stuMemo"  rows="6" cols="60" ></s:textarea>
		</div>
		<div>
			<s:submit value="学生信息修改"/> 
		</div>
	</s:form>
	
	<a href="<c:url value="/smsMgr" />?act=main">首页</a>
	<%-- <jsp:include page="../../css/footer.jsp"></jsp:include>--%>
  </body>
</html>

list_clazz.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
	isELIgnored="false"%>
<%@ include file="/jsps/common-tags.jsp"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>班级列表</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<link rel="stylesheet" type="text/css"
	href="<c:url value="/css/style.css"/>">
<style>
</style>
<script>
	 
</script>
</head>

<body>
	<h3>班级列表</h3>
	<table border="1" cellspacing="0" cellpadding="3px">
		<caption>班级信息列表</caption>

		<thead>
			<tr>
				<th>班级编号</th>
				<th>名称</th>
				<th>学生人数</th>
				<th>操作</th> 
			</tr>
		</thead>

		<tbody>
			<s:iterator var="clazz" value="clazzList">
				<tr> 
					<td>
						<s:property value="#clazz.clazzNo"/>
					</td>
					<td>
						<s:property value="clazzName"/>
					</td>
					<td>
						<s:property value="#clazz.stuCnt"/>
					</td> 
					<td>
						<button onclick="">修改</button>
						<button onclick="">删除</button>
					</td>
				</tr>
			</s:iterator>
		</tbody>
	</table>

	<hr>
	<a href="<c:url value="/smsMgr" />?act=main">首页</a>
</body>
</html>

程序中初步讲解了条件组合查询,还没看完,就先贴一段代码:

StudentQueryHelper.java

/**
 * @Title: StudentWQuryHelper.java
 * @package: edu.fjnu.training.service
 * @author: Zhou kailun
 * @date: 2018年5月30日 下午11:14:27
 * @version: V1.0
 */
package edu.fjnu.training.service;

import edu.fjnu.training.domain.ValueObject;

/** 
 * ClassName: StudentWQuryHelper 查询辅助类 
 * Description: TODO
 * Author: Zhou kailun 
 *
 */
public class StudentQueryHelper extends ValueObject {
	/**学号 精确查询*/
	private String qryStuNo;
	/**姓名 模糊查询*/
	private String qryStuName;
	/**班级精确查询*/
	private Integer qryClazzNo;
	/**成绩范围查询 最小*/
	private double qryMinStuMark;
	/**成绩范围查询 最大*/
	private double qryMaxStuMark;
	/**性别查询*/
	private String qryStuSex;
	/**籍贯查询*/
	private String qryStuOrigin;
	
	
	/**
	 * <p>Title: </p>
	 * <p>Description: </p>
	 */
	public StudentQueryHelper() {
		// TODO Auto-generated constructor stub
	}


	public String getQryStuNo() {
		return qryStuNo;
	}


	public void setQryStuNo(String qryStuNo) {
		this.qryStuNo = qryStuNo;
	}


	public String getQryStuName() {
		return qryStuName;
	}


	public void setQryStuName(String qryStuName) {
		this.qryStuName = qryStuName;
	}


	public Integer getQryClazzNo() {
		return qryClazzNo;
	}


	public void setQryClazzNo(Integer qryClazzNo) {
		this.qryClazzNo = qryClazzNo;
	}


	public double getQryMinStuMark() {
		return qryMinStuMark;
	}


	public void setQryMinStuMark(double qryMinStuMark) {
		this.qryMinStuMark = qryMinStuMark;
	}


	public double getQryMaxStuMark() {
		return qryMaxStuMark;
	}


	public void setQryMaxStuMark(double qryMaxStuMark) {
		this.qryMaxStuMark = qryMaxStuMark;
	}


	public String getQryStuSex() {
		return qryStuSex;
	}


	public void setQryStuSex(String qryStuSex) {
		this.qryStuSex = qryStuSex;
	}


	public String getQryStuOrigin() {
		return qryStuOrigin;
	}


	public void setQryStuOrigin(String qryStuOrigin) {
		this.qryStuOrigin = qryStuOrigin;
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_36346496/article/details/80518097