zoukankan      html  css  js  c++  java
  • MVC架构

    1.简介

    MVC(Model-View-Controller)是软件工程中的一种软件架构,把软件系统分成三个部分:模型(Model),视图(View),控制器(Controller)

    • 模型(Model): 封装与应用逻辑相关的数据,通常与数据库直接交互
    • 视图(View): 负责数据的展示或收集数据
    • 控制器(Controller): 负责控制整个程序的流程,通常是根据不同情况调用模型来处理数据后将数据输出到视图

    mvc的作用:分离职责,简化代码结构,使程序有更好的维护,重用,和扩展性

    2.Servlet中的MVC实现

    MVC只是一种思想,每种语言实现思路会有差异,在Servlet中表现为:JavaBean+JSP+Servlet

    • javaBean 相当于模型(Moel),其中数据模型用来表示数据对象,业务模型用来处理业务逻辑
    • JSP 相当于视图(View) 最终结果会展示到页面
    • Servlet 相当于控制器(Controller),用户通过jsp页面上的表单提交数据后,会发送请求到Servlet,Servlet会调用相应的模型来处理数据,处理完毕后渲染到jsp,响应给用户

    实际开发中有更详细的拆分

    • entity 是数据实体类,是数据库表的对象表示,实体bean
    • dao 作用是与数据打交道,可以是数据库操作,也可以是文件读写操作,甚至是redis缓存操作,总之与数据操作有关的都放在这里。
    • dto 数据传输层,主要用于远程调用等需要大量传输对象的地方。假如一个表有25个数据,而显示的只要5个,所有没必要将所有的属性都传输过去。
    • service 业务逻辑层,业务逻辑层用于调用dao层,从而处理一下业务逻辑,如拼接SQL,处理事务等。
    • controller 控制器层,接收从视图层传过来的数据,然后选择service层中的某个业务来处理,接收service层返回的结果并选择视图层中的某个视图来显示结果。

    举例使用javaBean + Jsp + Servlet开发登陆功能
    登陆页面 login.jsp

    <%--
      Created by IntelliJ IDEA.
      User: mike
      Date: 2020/12/6
      Time: 16:58
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>用户登录</title>
      </head>
      <body>
      <form method= "post" action="/login">
        <table align="center">
          <tr>
            <td>username:</td>
            <td><input type="text" name="username" value="${username}"/></td>
          </tr>
          <tr>
            <td>password:</td>
            <td><input type="text" name="password" value="${password}"/></td>
          </tr>
          <tr>
            <td></td>
            <td>
              <input type="submit" value="登陆"/>
              <input type="reset" value="重置"/>
              <span style="color: red">${error}</span>
            </td>
          </tr>
        </table>
      </form>
      </body>
    </html>
    
    

    登陆成功提示页面,success.jsp

    <%--
      Created by IntelliJ IDEA.
      User: mike
      Date: 2020/12/6
      Time: 19:54
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登陆成功</title>
    </head>
    <body>
    欢迎登陆,当前登陆用户为:${currentUser.name}
    </body>
    </html>
    
    

    User实体类,bean

    /**
     * @author mike
     * @date 2020-12-06
     * @desc user表实体类
     */
    public class User {
    	private int id;
    	private String name;
    	private String age;
    	private String password;
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public void setAge(String age) {
    		this.age = age;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public String getName() {
    		return this.name;
    	}
    	@Override
    	public String toString() {
    		return "user表实体类";
    	}
    }
    
    

    数据访问层dao,UserDao

    import java.sql.*;
    import java.lang.ClassNotFoundException;
    
    /**
     * @author mike
     * @date 2020-12-06
     * @desc user表数据访问层
     */
    public class UserDao {
    	public User login(String username,String password) {
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		User user = null;
    		try {
    			//连接数据库
    			Class.forName("com.mysql.jdbc.Driver");
    			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?character=UTF-8","root",
    					"614168741");
    			//查询user数据
    			String sql = "select * from user_profile where name = ? and password= ?";
    			ps = conn.prepareStatement(sql);
    			ps.setString(1,username);
    			ps.setString(2,password);
    			rs = ps.executeQuery();
    			while (rs.next()) {
    				//封装数据到User中
    				user = new User();
    				user.setId(rs.getInt(1));
    				user.setAge(rs.getString("age"));
    				user.setName(rs.getString("name"));
    				user.setPassword(rs.getString("password"));
    			}
    		} catch (ClassNotFoundException | SQLException e) {
    			e.printStackTrace();
    		} finally {
    			//关闭连接
    			if (conn != null) {
    				try {
    					conn.close();
    				} catch(SQLException e) {
    					e.printStackTrace();
    				}
    			}
    
    			if (ps != null) {
    				try {
    					ps.close();
    				} catch(SQLException e) {
    					e.printStackTrace();
    				}
    			}
    
    			if (rs != null) {
    				try {
    					rs.close();
    				} catch(SQLException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    
    		return user;
    	}
    }
    
    

    UserServlet控制器

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    
    /**
     * @author mike
     * @date 2020-12-06
     * @desc 用户登陆servlet,控制器
     */
    @WebServlet(name="UserServlet",value="/login")
    public class UserServlet extends HttpServlet {
    	@Override
    	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
    		doPost(request,response);
    	}
    
    	@Override
    	public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
    		//获取表单提交的数据
    		String username = request.getParameter("username");
    		String password = request.getParameter("password");
    		UserDao userDao  = new UserDao();
    		User currentUser = userDao.login(username,password);
    		if (currentUser == null) {
    			request.setAttribute("error","用户名或密码错误");
    			request.setAttribute("userName",username);
    			request.setAttribute("password",password);
    			request.getRequestDispatcher("login.jsp").forward(request,response);
    		} else {
    			HttpSession session = request.getSession();
    			session.setAttribute("currentUser",currentUser);
    			response.sendRedirect("success.jsp");
    		}
    	}
    
    }
    
    

    user_profile表结构

    访问 http://localhost:8080/login.jsp 输入用户名密码验证

  • 相关阅读:
    BluetoothLE-Multi-Library
    android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser
    android布局中使用include及需注意点
    保留最新N份备份目录脚本
    MySQL 针对Swap分区的运维注意点
    Samba共享目录的多用户权限设置案例
    Redis常见问题和解决办法梳理
    Redis日常操作命令小结
    Redis数据"丢失"讨论及规避和解决的几点总结
    confluence与jira账号对接、查看到期时间及问题总结
  • 原文地址:https://www.cnblogs.com/gy1010/p/14109967.html
Copyright © 2011-2022 走看看