什么是MVC设计模式
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
简单登录系统的分析
模型(JavaBean)
User
User模型用来生成包含在数据库中的合法用户的实体。将检索的到数据库合法用户生成对象可以让我们更方便、安全的使用数据库的用户信息。
package cn.llanc; public class User { String userName,passWord; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } public User() { userName=null; passWord=null; } }
Login
Login模型用来创建登录验证模型,核心方法为 public boolean login(String userName,String passWord) 用来判断数据是否匹配数据库,从而为“控制器”提供一个简明的数据。
package cn.llanc; public class Login { String inputName,inputPwd; public boolean login(String userName,String passWord) { if (userName.equals(inputName.trim())&&passWord.equals(inputPwd.trim())) { return true; } else { return false; } } public Login(String inputName, String inputPwd) { super(); this.inputName = inputName; this.inputPwd = inputPwd; } public String getInputName() { return inputName; } public void setInputName(String inputName) { this.inputName = inputName; } public String getInputPwd() { return inputPwd; } public void setInputPwd(String inputPwd) { this.inputPwd = inputPwd; } }
DataBaseConn
DataBaseConn是数据库连接模型,这里以MySql数据库为例创建连接,并封装了查新更新关闭等方法,在其他使用数据库连接的地方极大的简化了代码。
package cn.llanc; import java.sql.*; public class DataBaseConn { public Connection conn=null; public Connection getConn() { if(conn==null) { createConn(); } return conn; } //创建连接 public void createConn() { String url="jdbc:mysql://127.0.0.1:3306/jspdbtest?useSSL=false"; String user="root"; String password="root"; if(conn==null) { try { Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection(url, user, password); }catch(Exception e){ } } } //查询 public ResultSet executeQuery(String sql) { ResultSet rs=null; if(conn==null) { createConn(); } try { Statement stmt=conn.createStatement(); rs=stmt.executeQuery(sql); }catch(Exception e) { } return rs; } //更新 public void executeUpdate(String sql) { if(conn==null) { createConn(); } try { Statement stmt=conn.createStatement(); stmt.executeUpdate(sql); }catch(Exception e) { } } //关闭连接 public void closeConn() { if(conn!=null) { try { conn.close(); conn=null; }catch(SQLException e) { } } } }
控制器(Servlet)
YanZheng
此Servlet主要作用是验证用户登录并给出相应的交互。验证通过后创建用户session,并跳转到主页面;验证失败则给予提示并返回登录界面。
package cn.llanc.servlet; import java.io.*; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import cn.llanc.*; /** * Servlet implementation class YanZheng */ @WebServlet("/YanZheng") public class YanZheng extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public YanZheng() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //response.setCharacterEncoding("UTF-8"); //request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter();//输出对象 //获取输入 String inputName=request.getParameter("userName"); String inputPwd=request.getParameter("passWord"); if(inputName==""||inputPwd=="") { out.print("<script type=\"text/javascript\">alert(\"用户名或密码不能为空!\");location.href=\"login.jsp\";</script>"); }else { DataBaseConn conn=new DataBaseConn();//数据库连接对象 HttpSession session = request.getSession(); //session对象 //创建结果集对象 String sql="select name,password from user;"; //创建查询 ResultSet rs=conn.executeQuery(sql); //存储数据库字符串 String bdName="",bdPassword=""; try { while(rs.next()) { bdName=rs.getString("name"); bdPassword=rs.getString("password"); } User user=new User();//创建数据库合法用户bean user.setUserName(bdName); user.setPassWord(bdPassword); //存储库字符串 end //关闭连接 rs.close(); conn.closeConn(); Login isLogin=new Login(inputName, inputPwd);//创建登录对象 if(isLogin.login(bdName, bdPassword)) { session.setAttribute("userName",user.getUserName()); response.sendRedirect("show.jsp"); } else{ out.print("<script type=\"text/javascript\">alert(\"用户名或密码错误!\");location.href=\"login.jsp\";</script>"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
视图(jsp)
login
又一个简单的表单(只为理解MVC,所以忽略了样式)组成。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>登录</title> </head> <body> <form action="YanZheng" method="post"> 姓名:<input type="text" name="userName" id="userName"> 密码:<input type="password" name="passWord" id="passWord"> <input type="submit" value="登录"> <input type="reset" value="清空"> </form> </body> </html>
认知
对于简单的小程序MVC模式固然做到了3种代码的高度分离、提高了重用性,但是其过程过于繁琐,适合较有规模的项目使用,如果是为了理解和熟练使用这种设计模式,则不应该因为其“规、矩”而减少使用,反而要尽可能使用,以此来加深理解和熟练应用,道理一样,举一反三!
评论前必须登录!
注册