目录
1. 选题数据表显示(和student,teacher的一样)
2. 模糊查找的数据接口:SelectTitleServlet
1. teacherDao中新增两个方法:筛选出属于该教师的学生和计算该教师学生的数量
1. teacherDao中新增一个方法:编辑学生成绩editGrade
错误注意:
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();
}
}