目录
=============================M (model) 模型部分 =========================================
4、定义操作数据库的方法(接口) (StudentDao.java[interface])
5、实现数据库操作的接口 继承 DruidUtil 工具类 覆写数据操作方法 (StudentDaoImpl.java)
===================================C (Controller) 控制器 ===============================
6、定义操作数据库的方法(接口)(StudentService.java[interface])
7、实现业务操作 实现数据操作接口 覆写数据操作方法 (StudentServiceImpl.java)
==============================V (View) 视图 =====================================
MVC模式概念:
M:(Model) 模型 : 应用程序的核心功能,管理这个模块中用的数据和值(bean,dao);
V:(View)视图: 视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观(jsp/html);
C:(Controller)控制器: 对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽(servlet/service)。
包结构:
基于MVC模式的项目:
功能:查询、添加、删除学生信息。
页面如下图:
项目包结构:
项目框图:
代码实现过程:
1、初始页面(index.jsp)
<body>
<h1><a href="/getallstudent">students</a></h1><br/><br/>
<div style="display:inline-block">
<fieldset style="width: 250px">
<legend>添加学生</legend>
<form action="/addstudent" method="post">
学号:<input type="text" name="studentno"><br/><br/>
姓名:<input type="text" name="stuname"><br/><br/>
年龄:<input type="text" name="stuage"><br/><br/>
年级:<input type="text" name="gradeid"><br/><br/>
<input type="submit" value="添加" style="position:relative;left: 150px">
</form>
</fieldset>
</div>
<div style="display:inline-block">
<fieldset style="width: 250px">
<legend>删除学生</legend>
<form action="/deletestudent" method="post">
学号:<input type="text" name="studentno"><br/><br/>
姓名:<input type="text" name="stuname"><br/><br/>
年龄:<input type="text" name="stuage"><br/><br/>
年级:<input type="text" name="gradeid"><br/><br/>
<input type="submit" value="删除" style="position:relative;left: 150px">
</form>
</fieldset>
</div>
</body>
2、Servlet(XxxxxServlet.java)
Servlet 里面包含三部分(相当于一种固定的执行模板)
//完成页面和后台映射
@WebServlet(value = "/getallstudent")
//继承 HTTPServlet
public class StudentServlet extends HttpServlet {
//覆写service方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接受参数
//2.调取service方法
//3.跳转页面
}
}
===============M (model) 模型部分 ============
3、实体类(javabean)(Student.java)
类名=表名 列名=属性名
public class Student {
private int studentId;
private String studentNo;
private String stuName;
private int StuAge;
public Student() {
}
public Student(int studentId, String studentNo, String stuName, int stuAge) {
this.studentId = studentId;
this.studentNo = studentNo;
this.stuName = stuName;
StuAge = stuAge;
}
public int getStudentId() {return studentId;}
public void setStudentId(int studentId) {this.studentId = studentId;}
public String getStudentNo() {return studentNo;}
public void setStudentNo(String studentNo) {this.studentNo = studentNo;}
public String getStuName() {return stuName;}
public void setStuName(String stuName) {this.stuName = stuName;}
public int getStuAge() {return StuAge;}
public void setStuAge(int stuAge) {StuAge = stuAge;}
}
4、定义操作数据库的方法(接口) (StudentDao.java[interface])
public interface StudentDao {
//查询所有的学生
public List<Student> getall();
//增加学生
public void addStudent(String studentno,String stuname,String stuage,String gradeid) throws SQLException, ClassNotFoundException;
//删除学生
public void deleteStudent(String studentno,String stuname,String stuage,String gradeid) throws SQLException, ClassNotFoundException;
}
4.5、添加数据库的依赖包,并完成配置
(druid.jar mysql-connector.jar standard.jar) 配置druid.properties
5、实现数据库操作的接口 继承 DruidUtil 工具类 覆写数据操作方法 (StudentDaoImpl.java)
public class StudentDaoImpl extends DruidUtil implements StudentDao {
@Override
public List<Student> getall() {
List list=new ArrayList();
Connection connection =null;
PreparedStatement preparedStatement=null;
ResultSet resultSet =null;
try {
connection = getConnection();
String sql="select * from student";
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
Student student = new Student();
student.setStudentId(resultSet.getInt("studentid"));
student.setStudentNo(resultSet.getString("studentno"));
student.setStuName(resultSet.getString("stuname"));
student.setStuAge(resultSet.getInt("stuage"));
list.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(connection,preparedStatement,resultSet);
}
return list;
}
@Override
public void addStudent(String studentno,String stuname,String stuage,String gradeid) throws SQLException, ClassNotFoundException {
int stuageInt = Integer.parseInt(stuage);
int gradeidInt = Integer.parseInt(gradeid);
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf-8","root","123465");
Statement state = conn.createStatement();
String sql="insert into student value (null,'"+studentno+"','"+stuname+"','"+stuageInt+"','"+gradeidInt+"')";
state.executeUpdate(sql);
state.close();
conn.close();
}
@Override
public void deleteStudent(String studentno, String stuname, String stuage, String gradeid) throws SQLException, ClassNotFoundException {
int stuageInt = Integer.parseInt(stuage);
int gradeidInt = Integer.parseInt(gradeid);
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf-8","root","123465");
Statement state = conn.createStatement();
String sql="delete from student where studentno = '"+studentno+"' and stuname = '"+stuname+"' and stuage = "+stuage+" and gradeid = "+gradeid;
state.executeUpdate(sql);
state.close();
conn.close();
}
}
=============C (Controller) 控制器 ===========
6、定义操作数据库的方法(接口)(StudentService.java[interface])
public interface StudentService {
//查询所有的学生
public List<Student> getall();
//增加学生
public void addStudent(String studentno,String stuname,String stuage,String gradeid) throws SQLException, ClassNotFoundException;
//删除学生
public void deleteStudent(String studentno,String stuname,String stuage,String gradeid) throws SQLException, ClassNotFoundException;
}
7、实现业务操作 实现数据操作接口 覆写数据操作方法 (StudentServiceImpl.java)
public class StudentServiceImpl implements StudentService {
private StudentDao dao=new StudentDaoImpl();
@Override
public List<Student> getall() {
return dao.getall();
}
@Override
public void addStudent(String studentno,String stuname,String stuage,String gradeid) throws SQLException, ClassNotFoundException {
dao.addStudent(studentno,stuname,stuage,gradeid);
}
@Override
public void deleteStudent(String studentno, String stuname, String stuage, String gradeid) throws SQLException, ClassNotFoundException {
dao.deleteStudent(studentno,stuname,stuage,gradeid);
}
}
8、完成web.StudentServlet的逻辑
①StudentServlet.java
@WebServlet(value = "/getallstudent")
public class StudentServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接受参数
//此请求为查询所有学生信息,所以没有参数
//2.调取service中 查询所有学生的方法 返回一个学生集合
StudentService studentService=new StudentServiceImpl();
List<Student> students = studentService.getall();
//3.跳转页面
//设值,后面页面使用
req.setAttribute("students",students);
req.getRequestDispatcher("show.jsp").forward(req,resp);
}
}
②AddStudentServlet.java
@WebServlet(value = "/addstudent")
public class AddStudentServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、接收参数
req.setCharacterEncoding("UTF-8");
String studentno = req.getParameter("studentno");
String stuname = req.getParameter("stuname");
String stuage = req.getParameter("stuage");
String gradeid = req.getParameter("gradeid");
System.out.println("studentno="+studentno+";stuname="+stuname+";stuage="+stuage+";gradeid="+gradeid);
//2、调取service方法
StudentService studentService=new StudentServiceImpl();
try {
studentService.addStudent(studentno,stuname,stuage,gradeid);
} catch (Exception throwables) {
throwables.printStackTrace();
}
//3、跳转页面
//由后台给前台返回一段js代码 弹框显示添加学生成功
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.print("<script>alert('添加学生成功');location.href='/index.jsp'</script>");
}
}
③DeleteStudentServlet.java
@WebServlet(value = "/deletestudent")
public class DeleteStudetnServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、接收参数
req.setCharacterEncoding("UTF-8");
String studentno = req.getParameter("studentno");
String stuname = req.getParameter("stuname");
String stuage = req.getParameter("stuage");
String gradeid = req.getParameter("gradeid");
System.out.println("studentno="+studentno+";stuname="+stuname+";stuage="+stuage+";gradeid="+gradeid);
//2、调取service方法
StudentService studentService=new StudentServiceImpl();
try {
studentService.deleteStudent(studentno,stuname,stuage,gradeid);
} catch (Exception throwables) {
throwables.printStackTrace();
}
//3、跳转页面
//由后台给前台返回一段js代码 弹框显示删除学生成功
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.print("<script>alert('删除学生成功');location.href='/index.jsp'</script>");
}
}
=============V (View) 视图 ==============
9、视图显示(show.jsp)
<body>
<h1>show.jsp</h1>
<table border="1" cellspacing="0" width="800px">
<tr>
<td>学生编号</td>
<td>学生姓名</td>
<td>学生年龄</td>
</tr>
<c:forEach items="${students}" var="stu">
<tr>
<td>${stu.studentNo}</td>
<td>${stu.stuName}</td>
<td>${stu.stuAge}</td>
</tr>
</c:forEach>
</table>
</body>