MVC编程模式

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 ,hiredate

mvc_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读取任何值,则可以使用重定向。还可以防止表单的重复提交。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。