1.什么是MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
(1)Model层:Model指模型部分,一般在应用中Model层包括业务处理层和数据访问层。数据访问层主要是对数据库的一些操作的封装。业务处理层应用JavaBean构建, JavaBean主要是用作将从View层获取的数据和数据库的数据进行桥接。除却JavaBean以外,若想构建分布式应用系统,可以应用EJB组件进行业务逻辑层的构建。
(2)Controller层:Controller指控制部分,一般是对View层提交的请求为其设置对应的Servlet进行特定功能的处理,这里的进行特定功能的处理一般是编写在Model中的业务处理层中的。Controller一般只是在Web应用中充当一个中介者的作用。
(3)View层:View指视图部分,这一部分的内容是展示给用户实际进行交互的,通常使用JSP和HTML进行构建(个人比较喜欢以HTML嵌入JSP的方式来构建网页)。
综上来说,一个小型完整的基于MVC设计模式的Web应用程序的处理流程应该如下:
由上面的图中我们可以看出,用户在客户端(Web应用的客户端即为浏览器)中发出请求的时候,请求首先由View层的JSP/HTML将HTTP请求传给控制器中对应的Servlet,然后由Servlet负责调用Model层中的业务逻辑处理部分进行要求的处理,处理期间如果设计数据库的操作,则与数据库进行操作,最后全部操作结束之后,由业务逻辑层将结果发给控制层,控制层以HTTP响应的形式将结果发送回客户端。
MVC编程模式
- Model(模型)表示应用程序核心(比如数据库记录列表)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
通常模型对象负责在数据库中存取数据。
通常视图是依据模型数据创建的。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
新闻网站项目结构:
package myJava; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.List;public final class DBConn {@Test//连接数据库public static SqlSession getSqlSession() {String resource = "myXML/mybatis-config.xml";InputStream inputStream = null;SqlSession session = null;try {inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);session = sqlSessionFactory.openSession();} catch (IOException e) {e.printStackTrace();}return session;}//校验用户信息public static Boolean check(Employee emp){SqlSession sqlSession = getSqlSession();try {//selectOne的第一个参数为Mapper.xml的mapper的namespace+id//参数二为映射的需要传入的参数Employee employee = sqlSession.selectOne("EmployeeMapper.selectEmployee_name", emp.getName());if (employee!=null && employee.getPassword().equals(emp.getPassword()))return true;elsereturn false;} finally {free(sqlSession);}}//获取数据库的全部数据public static List<News> getAllNews(){SqlSession sqlSession = getSqlSession();List<News> list = sqlSession.selectList("EmployeeMapper.selectNews");free(sqlSession);return list;}public static News getNewsById(int id){SqlSession sqlSession = getSqlSession();News news = sqlSession.selectOne("EmployeeMapper.selectById",id);free(sqlSession);return news;}//向数据库添加数据,并且需要sqlSession.commit()public static void insertNews(News news){SqlSession sqlSession = getSqlSession();int result =sqlSession.insert("EmployeeMapper.insertNews",news);sqlSession.commit();free(sqlSession);}//删除新闻public static int deleteNews(int id){SqlSession sqlSession = getSqlSession();int result = sqlSession.delete("EmployeeMapper.deleteNewsById",id);sqlSession.commit();free(sqlSession);return result;}//修改新闻信息public static int upDataNewsById(News news){SqlSession sqlSession = getSqlSession();int res = sqlSession.update("EmployeeMapper.upDataNewsById",news);sqlSession.commit();free(sqlSession);return res;}//释放Sqlsessionpublic static void free(SqlSession sqlSession){sqlSession.close();} }