MVC设计模式思想及简单实现
⼀、什么是MVC
MVC即Model-View-Controller(模型-视图-控制器)是⼀种软件设计模式,最早出现在Smalltalk语⾔中,后被Sun公司推荐为Java EE平台的设计模式。
MVC把应⽤程序分成了上⾯3个核⼼模块,这3个模块⼜可被称为业务层-视图层-控制层。顾名思义,它们三者在应⽤程序中的主要作⽤如下:
业务层:负责实现应⽤程序的业务逻辑,封装有各种对数据的处理⽅法。它不关⼼它会如何被视图层显⽰或被控制器调⽤,它只接受数据并处理,然后返回⼀个结果。
视图层:负责应⽤程序对⽤户的显⽰,它从⽤户那⾥获取输⼊数据并通过控制层传给业务层处理,然后再通过控制层获取业务层返回的结果并显⽰给⽤户。
控制层:负责控制应⽤程序的流程,它接收从视图层传过来的数据,然后选择业务层中的某个业务来处理,接收业务层返回的结果并选择视图层中的某个视图来显⽰结果。 可以⽤下图来表⽰MVC模式中三者之间的关系:
MVC是⼀种设计思想,它并没有统⼀的标准,其中⼀种MVC思想的典型实现为JavaBean(模式)+jsp(视图)+servlet(控制器),⽽我喜欢将JavaBean中的业务逻辑再单独列出来,形成service(模式)+JavaBean(数据集)+jsp(视图)+servlet(控制器)的结构,下⾯我们来实现它。
⼆、MVC实现
在这⾥,我将应⽤MVC设计模式,实现⽤户在前台中输⼊⼀段⽂字,后台获取并拼接上字符串“——ysy”,再送回前台显⽰的⼀个简单的应⽤程序。具体效果如图:
1、视图层
1 <%@ page language="java" contentType="text/html; charset=utf-8"
2 pageEncoding="utf-8"%>
3<!DOCTYPE html>
4<html>
5<head>
6<meta charset="utf-8">
mvc的controller7<title>test</title>
8</head>
9<body>
10<form action="./test.do" method="post">
11输⼊你想说的话~
12<input type="text" name="input"/>
13<input type="submit" value="提交"/>
14<br/>
15 <%
16String s = (Attribute("outPut"); <!--从request域中获取结果-->
17if(s != null){ <!--如果有结果,显⽰结果-->
18 %>
19 <%=s %>
20 <%
21 }
22 %>
23</form>
24</body>
25</html>
2、控制层
servlet的编写:
1package servlet;
2
3import java.io.IOException;
4import javax.servlet.ServletException;
5import javax.servlet.annotation.WebServlet;
6import javax.servlet.http.HttpServlet;
7import javax.servlet.http.HttpServletRequest;
8import javax.servlet.http.HttpServletResponse;
9
10import bean.TestBean;
11import service.TestService;
12
13 @WebServlet("/test.do") //通过注释配置servlet
14public class TestServlet extends HttpServlet {
15private static final long serialVersionUID = 1L;
16
17public TestServlet() {
18super();
19 }
20
21protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
22 doPost(request, response);
23 }
24
25protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
26
27 request.setCharacterEncoding("utf-8"); //设置字符集,防⽌中⽂乱码
28
29 TestBean testBean = new TestBean(); //获取数据集对象
30 TestService testService = new TestService(); //获取业务层对象
31
32 String s =Parameter("input"); //获取视图层提交的数据
33
34 testBean.setInput(s); //将数据存⼊数据集中
35 s = testService.change(testBean); //调⽤业务层,传⼊数据,接收返回结果
36 request.setAttribute("outPut", s); //将结果存⼊request域中
37 RequestDispatcher("test.jsp").forward(request, response); //跳转到视图层
38 }
39
40 }
如果不想使⽤注释来配置servlet,还可以通过l进⾏配置:
1<?xml version="1.0" encoding="UTF-8"?>
2<web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" v 3 <display-name>Java_Web</display-name>
4 <welcome-file-list>
5 <welcome-file>index.html</welcome-file>
6 <welcome-file>index.htm</welcome-file>
7 <welcome-file>index.jsp</welcome-file>
8 <welcome-file>default.html</welcome-file>
9 <welcome-file>default.htm</welcome-file>
10 <welcome-file>default.jsp</welcome-file>
11 </welcome-file-list>
12
13 <servlet> //通过配置⽂件配置servlet
14 <servlet-name>test</servlet-name>
15 <servlet-class>servlet.TestServlet</servlet-class>
16 </servlet>
17 <servlet-mapping>
18 <servlet-name>test</servlet-name>
19 <url-pattern>/test.do</url-pattern>
20 </servlet-mapping>
21
22</web-app>
3、数据集
1package bean;
2
3public class TestBean {
4private String input;
5
6public String getInput() {
7return input;
8 }
9
10public void setInput(String input) {
11this.input = input;
12 }
13
14 }
4、业务层
1package service;
2
3import bean.TestBean;
4
5public class TestService {
6public String change(TestBean testBean) {
7
8 String s = Input(); //从数据集中获取数据
9
10if(s != null && s != "") { //如果有数据,则拼接字符串
11 s += "——ysy";
12 }
13return s;
14 }
15 }
三、MVC框架模式的优势
1、有利于代码的复⽤
2、有利于开发⼈员分⼯
3、有利于降低程序模块间的耦合,便于程序的维护与扩展。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论