1.关于MVC
①.M:Model
②.V:View
③.C:Controller
MVC是Model-View-Controller的简称,即模型-视图-控制器。
MVC是一种设计模式,它把应用程序分成三个核心模块:模型、视图、控制器,它们各自处理自己的任务。
2.好处:对一个请求不使用MVC,Servlet、JSP都可以实现,但是这样的缺点就是需要在Servlet中拼写html代码,在JSP中书写处理请求的代码
MVC的处理过程
下述代码不足之处:没有使用数据库连接池、DBUtils、DAO等等,一个请求一个Servlet,应该是多个请求(一个模块)一个Servlet,删除时候没有加入jquery。只是为了呈现例子。
此处使用
M(DAO)
V(JSP)在页面上填写java代码实现显示
C(Servlet):受理请求,获取请求参数,调用DAO方法,把DAO的返回值放入request中,转发(重定向)页面。
来呈现。
3.代码呈现
创建学生表: id ,name ,hiredatemvc_query.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 注意servlet-mapp一致 -->
<a href="getAllStudent">获取所有学生信息</a>
</body>
</html>
mvc_query_servlet.java
/**
* Servlet implementation class mvc_query_servlet
*/
@WebServlet("/getAllStudent")
public class mvc_query_servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/mvc_query_show.jsp")
.forward(request, response);
}
}
mvc_query_show.jsp
<%@page import="xixihaha.StudentDAO"%>
<%@page import="xixihaha.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" cellpadding="10" cellspacing="0">
<tr>
<th>IDCard</th>
<th>Name</th>
<th>Hire_Date</th>
<th>Delete</th>
</tr>
<%
StudentDAO dao = new StudentDAO();
List<Student> ls = dao.getAll();
for(Student s : ls){
%>
<tr>
<td>
<%=s.getIdCard() %>
</td>
<td>
<%=s.getStuName() %>
</td>
<td>
<%=s.getHireDate().toString() %>
</td>
<td>
<!-- get请求,区分删的是哪条信息 -->
<a href="deleteStu?id=<%=s.getIdCard() %>">Delete</a>
</td>
</tr>
<%
}
%>
</table>
</body>
</html>
studentDAO.java
public class StudentDAO {
private Connection getConnection(){
Connection conn = null;
String driverClass = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/mydatabase";
String user = "root";
String password = "qiaolezi";
try {
Class.forName(driverClass);
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 删除指定id的学生
* @param id
*/
public void deleteId(Integer id){
PreparedStatement ps = null;
String sql = "delete from students where id = ?";
try {
ps = getConnection().prepareStatement(sql);
ps.setInt(1, id);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 获取所有学生信息
* @return
*/
public List<Student> getAll(){
PreparedStatement ps = null;
ResultSet rs = null;
List<Student> students = new ArrayList<Student>();
try {
String sql = "select id ,stu_name,hire_date from students";
ps = getConnection().prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
int id = rs.getInt(1);
String name = rs.getString(2);
Date date = (Date)rs.getObject(3);
students.add(new Student(id,name,date));
}
} catch (Exception e) {
e.printStackTrace();
}
return students;
}
}
关于什么时候重定向?
若目标的响应页面,不需要从request读取任何值,则可以使用重定向。还可以防止表单的重复提交。