0
点赞
收藏
分享

微信扫一扫

B站手把手layui+javaWeb项目全纪录(四)

软件共享软件 2022-01-11 阅读 34

目录

错误注意:

一、管理员界面添加学生/教师

二、分角色

1. login.jsp登录身份判断 

2. 新建两个视图,对应教师和学生

3.  新建两个mainform,对应教师和学生

三、模糊查找教师查看所有选题

1. 选题数据表显示(和student,teacher的一样)

2. 模糊查找(sql: like 关键字)

1. allTitle.html

2. 模糊查找的数据接口:SelectTitleServlet

3. dao层

四、教师上传题目

1 实现添加题目时工号只读且对应响应的账号功能

2 上传

1. allTitle.html

2.addTitle.jsp

3. AddTitleServlet

4. teacherDao

五、教师给学生打分

1 点击学生打分只显示属于该老师的学生

1. teacherDao中新增两个方法:筛选出属于该教师的学生和计算该教师学生的数量

2.  GetGradeServlet

2 给学生编辑成绩

1. teacherDao中新增一个方法:编辑学生成绩editGrade

2. EditGradeServlet


错误注意:

1. 错误:Uncaught SyntaxError: Unexpected string 

ajax里的data中传值要用:冒号

data:{
				'studentId':studentId,
				'name':name,
				'sex':sex,
				'password':password
			}, 

(80条消息) ajax中data传参报错_m0_50052896的博客-CSDN博客

2. 前端数据传不回来:

注释掉contentType:  /*contentType:'application/json;charset=utf-8', */

3. 错误:

java.sql.SQLSyntaxErrorException: Unknown column 'teachertId' in 'field list'

teacherId粗心写错了!!!

4. 前端数据没问题,但是数据库不改变

DBUtil工具类里设置了非自动提交请求,所以在Dao层对表进行更改时(增,删,修改)需要手动提交修改请求

//提交
dbUtil.commit();

一、管理员界面添加学生/教师

allStudent.html -> AddStudentServlet -> AdminService ->  AdminServiceImpl -> AdminDao -> AdminDaoImpl -> 返回

二、分角色

1. login.jsp登录身份判断 

success:function(res){//回调函数
    				if(res=="success"){
    					if(entity=="管理员"){
    						alert("登录成功!即将跳转到管理员主页");
        					//href中不能直接写mainform的地址,因为放在WEB-INF目录下是受保护的,所以通过在view包中的
        					window.location.href="/test/ViewMainFormServlet";
    					}else if(entity=="教师"){
    						alert("登录成功!即将跳转到教师主页");
        					//href中不能直接写mainform的地址,因为放在WEB-INF目录下是受保护的,所以通过在view包中的
        					window.location.href="/test/ViewTeacherFormServlet";
    						
    					}else if(entity=="学生"){
    						alert("登录成功!即将跳转到学生主页");
        					//href中不能直接写mainform的地址,因为放在WEB-INF目录下是受保护的,所以通过在view包中的
        					window.location.href="/test/ViewStudentFormServlet";
    					}
    					
    				}

2. 新建两个视图,对应教师和学生

跳转到jsp文件需要视图层

dopost方法中跳转到学生和教师的mainform.jsp,下面新建的 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//doGet(request, response);
		request.getRequestDispatcher("/WEB-INF/jsp/StudentMainForm.jsp").forward(request, response);
	}

3.  新建两个mainform,对应教师和学生

更改对应操作 

<dd><a href="/test/allStudent.html">我要选题</a></dd>
							<dd><a href="/test/allTeacher.html">提交作品</a></dd>
							<dd><a href="/test/addStudent.html">查询成绩</a></dd>

三、模糊查找教师查看所有选题

1. 选题数据表显示(和student,teacher的一样)

显示表格和分页的数据接口:SelectAllTitleServlet

2. 模糊查找(sql: like 关键字)

1. allTitle.html

submit按钮处点击添加select方法

<script type="text/javascript">
	function select(){
		var select=$('#search').val();
		var table = layui.table;
		table.reload('tableReload',{
			/* 模糊查找 */
			url:'SelectTitleServlet?select='+select,
			where:{
				select:select
			}
		});
	}

</script>

2. 模糊查找的数据接口:SelectTitleServlet

调用dao层 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//doGet(request, response);
		String name=request.getParameter("select");
		userDao userDao=new userDaoImpl();
		try {
			List<Object> list = userDao.selectTileList2(name);
			response.setContentType("text/html;charset=utf-8");
			//传json数据
			Vo vo=new Vo();
			vo.setCode(0);
			vo.setMsg("success");
			
			//此处需要获取的是数据库中数目的总和
			vo.setCount(userDao.countTitle());
			
			vo.setData(list);
			//把json类型转化为字符串,传回前端
			response.getWriter().write(JSONObject.toJSONString(vo));
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

3. dao层

sql语句:where like:模糊查找 

public List<Object> selectTileList2(String name) throws SQLException {
		DBUtil dbUtil = new DBUtil();
		String sql="select * from titleinfo where name like '%"+name+"%'";
		//不需要问号代参,不需要where语句查询,可以直接使用statement
		Statement st=(Statement) dbUtil.getStatement();
		//执行sql语句,得到结果集rs
		ResultSet rs=(st).executeQuery(sql);
		List<Object> list=new ArrayList<Object>();
		while(rs.next()) {
			Title tile = new Title();
			tile.setTeacherId(rs.getString("teacherId"));
			tile.setName(rs.getString("name"));
			tile.setType(rs.getString("type"));
			tile.setTitleId(rs.getInt("titleId"));			
			list.add(tile);
		}
		return list;
	}

四、教师上传题目

1. allTitle.html 

2. addTitle.jsp

layui多文件上传模板

uploadservlet上传接口:修改路径

1 实现添加题目时工号只读且对应响应的账号功能

1. checkloginservlet:把管理员,学生,教师的账号放在session域中,使得教师信息可以在addtitle.jsp中使用

if(entity.equals("教师")) {
			Teacher teacher;
			try {
				teacher=loginService.selectAllTeacher(name, password);
				
				if(teacher!=null) {
                HttpSession session=request.getSession();
				session.setAttribute("teacher", teacher);
					response.getWriter().write("success");
				}
				else {
					response.getWriter().write("fail");
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

2. dao层:登录时把用户名,密码和对应的id都传给teacher,返回给前端,然后教师添加题目时的工号便是该登录时对应的teacherid

	public Teacher selectAllTeacher(String name, String password) throws SQLException{
		// TODO Auto-generated method stub
		DBUtil dbUtil = new DBUtil();
		String sql="select * from s_teacher where name =? and password =?";
		PreparedStatement ps=(PreparedStatement)dbUtil.getPreparedStatement(sql);
		ps.setString(1, name);
		ps.setString(2, password);
		ResultSet rs=ps.executeQuery();
		Teacher teacher= new Teacher();
		while(rs.next()){
			teacher.setTeacherId(rs.getString("teacherId"));
			teacher.setTname(rs.getString("name"));
			teacher.setPassword(rs.getString("password"));
			return teacher;
		}
		return null;
	}

3. addTitle.jsp中: 教师工号的value就是我们登录时由用户名和密码相对应的教师工号 

//把教师类引入
<%@ page import="com.sxh.pojo.*" %>


<!-- 写java代码需要百分号括起来 ,获取teacherId,自动填写进工号文本框中-->
<%Teacher teacher=(Teacher)session.getAttribute("teacher");
String teacherId=teacher.getTeacherId(); %>


<label>教师工号:</label>
	<input type="text" id="teacherId" value=<%=teacherId%> readonly="readonly">
	<br>

(80条消息) jsp中的<%%>用法_weixin_30832351的博客-CSDN博客https://blog.csdn.net/weixin_30832351/article/details/97869741?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164187950116780357239382%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164187950116780357239382&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-97869741.first_rank_v2_pc_rank_v29&utm_term=jsp%E4%B8%AD%3C%25%25%3E&spm=1018.2226.3001.4187

2 上传

1. allTitle.html

文件中添加按钮:添加选题

<button style="height:30px;width:150px"><a href="/test/addTitle.jsp">添加选题</a></button>

2.addTitle.jsp

新建按钮href值中的文件:addTitle.jsp,下载layui关于文件上传的模板

url: UploadServlet,上传文件的接口

ajax中的URL:AddTitleServlet

3. AddTitleServlet

调用dao层新建的teacherDao

4. teacherDao

public int addTitle(Title title) throws SQLException {
		DBUtil dbUtil = new DBUtil();
		String sql="insert into titleinfo(type,name,teacherId,src) values(?,?,?,?)";
		PreparedStatement ps=(PreparedStatement)dbUtil.getPreparedStatement(sql);		
		ps.setString(1,title.getType());	
		ps.setString(2, title.getName());
		ps.setString(3, title.getTeacherId());
		ps.setString(4, title.getSrc());
		System.out.println(title.getType()+"------");
		int rs=ps.executeUpdate();		
		if(rs==1) {
			//手动提交
			dbUtil.commit();
			return 1;
		}else {		
			dbUtil.connectionRollback();
			return 0;
		}
	}

插入提交的信息,再逐层返回

五、教师给学生打分

1 点击学生打分只显示属于该老师的学生

点击学生打分->myStudent.jsp ->  GetGradeServlet ->teacherDao ->层层返回 ,有分页

1. teacherDao中新增两个方法:筛选出属于该教师的学生和计算该教师学生的数量

public List<Object> selectMyStudentList(String page, String limit,String teacherId) throws SQLException {
		// TODO Auto-generated method stub
		DBUtil dbUtil = new DBUtil();
		String sql="select * from studentinfo where teacherId=? limit ?,?";
		PreparedStatement ps=(PreparedStatement)dbUtil.getPreparedStatement(sql);
		int page1=Integer.parseInt(page);
		int limit1=Integer.parseInt(limit);
		ps.setString(1,teacherId);
		ps.setInt(2, (page1-1)*limit1);
		ps.setInt(3, limit1);		
		ResultSet rs=ps.executeQuery();
		List<Object> list=new ArrayList<Object>();
		while(rs.next()) {
			Student stu = new Student();
			stu.setStudentId(rs.getString("studentId"));
			stu.setName(rs.getString("name"));
			stu.setSex(rs.getString("sex"));
			stu.setAge(rs.getInt("age"));
			stu.setTeacherId(rs.getString("teacherId"));
			stu.setTitleId(rs.getInt("titleId"));
			stu.setGrade(rs.getString("grade"));
			list.add(stu);
		}
		return list;
	}

	@Override
	public int countMyStudent(String teacherId) throws SQLException {
		DBUtil dbUtil = new DBUtil();
		String sql="select count(*) as sum from studentinfo where teacherId=?";
		PreparedStatement ps=(PreparedStatement)dbUtil.getPreparedStatement(sql);
		ps.setString(1, teacherId);
		//执行sql语句,得到结果集rs
		ResultSet rs=ps.executeQuery();
		while(rs.next()){ 
			return rs.getInt("sum");
		} 
		return 0;
	}

2.  GetGradeServlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//doGet(request, response);
		String teacherId=request.getParameter("teacherId");
		String pageStr=request.getParameter("page");
		String limitStr=request.getParameter("limit");
		try {
			List<Object> list=teacherDao.selectMyStudentList(pageStr, limitStr, teacherId);
			response.setContentType("text/html;charset=utf-8");
			// 传json数据
			Vo vo = new Vo();
			vo.setCode(0);
			vo.setMsg("success");

			// 此处需要获取的是数据库中数目的总和
			vo.setCount(teacherDao.countMyStudent(teacherId));

			vo.setData(list);
			// 把json类型转化为字符串,传回前端
			response.getWriter().write(JSONObject.toJSONString(vo));

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

2 给学生编辑成绩

点击学生打分->myStudent.jsp 中单元格编辑时->  EditGradeServlet ->teacherDao ->层层返回 ,有分页

1. teacherDao中新增一个方法:编辑学生成绩editGrade

public int editGrade(Student student) throws SQLException {
		DBUtil dbUtil = new DBUtil();
		String sql="update studentinfo set grade=? where studentId=?";
		PreparedStatement ps=(PreparedStatement)dbUtil.getPreparedStatement(sql);		
		ps.setString(1, student.getGrade());
		ps.setString(2, student.getStudentId());
		int rs=ps.executeUpdate();
		while(rs==1) {
			dbUtil.commit();
			return 1;
		}
		return 0;
	}

2. EditGradeServlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String studentId=request.getParameter("studentId");
		String grade=request.getParameter("grade");
		Student student = new Student();
		student.setStudentId(studentId);
		student.setGrade(grade);
		try {
			int a = teacherDao.editGrade(student);
			if(a==1) {
				response.getWriter().write("success");
			}
			else {
				response.getWriter().write("fail");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
举报

相关推荐

0 条评论