一、什么是MVC模式
MVC是Model-View-Control的简称,即模型-视图-控制器,他是一个存在于服务器表达层的模型,他将应用分开,改变应用之间的高度耦合
1、MVC模式结构
视图:数据的展现
视图是用户看到并与之交互的界面,视图向用户显示相关数据,并能接受用户的输入数据,但它并不接受数据的业务处理,视图可以向模型查询数据状态,但不能改变模型,视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。
模型:应用对象
模型是应用程序的主体部分。模型代表了业务数据和业务逻辑。当数据放生改变时,它要负责通知视图部分;一个模型能为多个视图提供数据,提高了重用性
控制器:逻辑处理,控制实体数据在视图上的显示,调用模型处理业务请求
当用户从浏览器提交表单请求时,控制器接受数据并交给相应的模型来处理,然后模型将结果返回给控制器。
2、MVC模式的运行机制
web用户向服务器提交的所有请求都有控制器来接收,接收到请求后,控制器负责决定应该调用哪个模型来处理,模型进行相应的逻辑处理之后将结果返回给控制器,控制器再将结果呈现给相应的视图并最终呈献给用户。
二、MVC模式实例——用户登陆
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//从cookie中得到cookie
String username="";
String userpwd="";
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("username")){
// if(cookie!=null){
username=cookie.getValue();
System.out.print(cookie.getValue());
}
}
System.out.println(username);
//返回一个界面
out.println("<img src='/ManageUser3.0/images/banner.gif' title='banner'/>");
out.println("<h1>用户登陆</h1>");
out.println("<form action='/ManageUser3.0/servlet/LoginCLServlet' method='post'>");
out.println("用户名:<input type='text' name='username' id='username' value='"+username+"'/><br/>");
out.println("密 码:<input type='password' name='userpwd' id='userpwd'/><br/>");
out.println("<input type='checkbox' name='cookie' id='cookie' value='keep'/>在此电脑上保存用户信息<br/>");
out.println("<input type='submit' value='登陆'><br/>");
out.println("</form>");
out.flush();
out.close();
}
登陆视图,完成登陆后视图将表单提交给控制器LoginCLServlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
// 接收用于提交的用户名和密码
String username=request.getParameter("username");
String userpwd=request.getParameter("userpwd");
// 接受复选框的信息
String value=request.getParameter("cookie");
// System.out.println(value);
UsersService userservice=new UsersService();
User user=new User();
user.setName(username);
user.setPwd(userpwd);
if(userservice.checkUser(user)){
//如果进来,则合法
if(value!=null&&value.equals("keep")){
//保存用户信息
//创建cookie并保存到登陆的浏览器
Cookie c_name=new Cookie("username",username);
c_name.setMaxAge(7*3600*24);
response.addCookie(c_name);
}
//跳转最后执行
response.sendRedirect("/ManageUser3.0/servlet/MainFrame?username="+username);
// request.getRequestDispatcher("/servlet/MainFrame").forward(request, response);
}else{
response.sendRedirect("/ManageUser3.0/servlet/LoginServlet");
// request.getRequestDispatcher("/servlet/LoginServlet").forward(request,response);
//不合法
System.out.println("密码或账号错误");
}
}
控制器调用模型UsersService来处理数据,并接受处理结果
/**
* 验证用户是否合法的函数
* @author chanxiaoxi
* @param user
* @return boolean
*/
public boolean checkUser(User user){
boolean b=false;
String sql="select * from mu_user where user_name=? and user_pwd=?";
String paras[]={user.getName(),user.getPwd()};
ResultSet rs=sqlHelper.executeQuery(sql, paras);
try{
if(rs.next()){
b=true;
}
}catch(SQLException e){
e.printStackTrace();
}finally{
DBUtil.close(rs, ps, conn);
}
return b;
}
完成验证之后将结果返回给控制器,控制器根据返回的结果再将相应的结果返回给视图