1. java的MVC,其中Model模型是什麼
model層指實體層,寫資料庫的增刪改查操作,view層指視圖層,就是寫前端的頁面,controller層是負責前端界面與實體層進行交互,寫具體的方法,即界面要使用那些實體
2. java的mvc。我要做固定資產管理系統。
MVC英文即Model-View-Controller,即把一個應用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成三個層——模型層、視圖層、控制層。
視圖(View)代表用戶交互界面,對於Web應用來說,可以概括為HTML界面,但有可能為XHTML、XML和Applet。隨著應用的復雜性和規模性,界面的處理也變得具有挑戰性。一個應用可能有很多不同的視圖,MVC設計模式對於視圖的處理僅限於視圖上數據的採集和處理,以及用戶的請求,而不包括在視圖上的業務流程的處理。業務流程的處理交予模型(Model)處理。比如一個訂單的視圖只接受來自模型的數據並顯示給用戶,以及將用戶界面的輸入數據和請求傳遞給控制和模型。
模型(Model):就是業務流程/狀態的處理以及業務規則的制定。業務流程的處理過程對其它層來說是黑箱操作,模型接受視圖請求的數據,並返回最終的處理結果。業務模型的設計可以說是MVC最主要的核心。目前流行的EJB模型就是一個典型的應用例子,它從應用技術實現的角度對模型做了進一步的劃分,以便充分利用現有的組件,但它不能作為應用設計模型的框架。它僅僅告訴你按這種模型設計就可以利用某些技術組件,從而減少了技術上的困難。對一個開發者來說,就可以專注於業務模型的設計。MVC設計模式告訴我們,把應用的模型按一定的規則抽取出來,抽取的層次很重要,這也是判斷開發人員是否優秀的設計依據。抽象與具體不能隔得太遠,也不能太近。MVC並沒有提供模型的設計方法,而只告訴你應該組織管理這些模型,以便於模型的重構和提高重用性。我們可以用對象編程來做比喻,MVC定義了一個頂級類,告訴它的子類你只能做這些,但沒法限制你能做這些。這點對編程的開發人員非常重要。
業務模型還有一個很重要的模型那就是數據模型。數據模型主要指實體對象的數據 保存(持續化)。比如將一張訂單保存到資料庫,從資料庫獲取訂單。我們可以將這個模型單獨列出,所有有關資料庫的操作只限制在該模型中。
控制(Controller)可以理解為從用戶接收請求, 將模型與視圖匹配在一起,共同完成用戶的請求。劃分控制層的作用也很明顯,它清楚地告訴你,它就是一個分發器,選擇什麼樣的模型,選擇什麼樣的視圖,可以完成什麼樣的用戶請求。控制層並不做任何的數據處理。例如,用戶點擊一個連接,控制層接受請求後, 並不處理業務信息,它只把用戶的信息傳遞給模型,告訴模型做什麼,選擇符合要求的視圖返回給用戶。因此,一個模型可能對應多個視圖,一個視圖可能對應多個模型。
模型、視圖與控制器的分離,使得一個模型可以具有多個顯示視圖。如果用戶通過某個視圖的控制器改變了模型的數據,所有其它依賴於這些數據的視圖都應反映到這些變化。因此,無論何時發生了何種數據變化,控制器都會將變化通知所有的視圖,導致顯示的更新。這實際上是一種模型的變化-傳播機制。模型、視圖、控制器三者之間的關系
3. 有沒有大神給我講一下springmvc操作資料庫
一直用的是ssh,因為公司要用到SpringMVC,以前也沒接觸過,所以今天來和大家一起學習一下這個框架,以便工作需要。
例子大家可以到我上傳的資源處http://download.csdn.net/download/tjcyjd/4251483下載。
首先我們先來了解一下什麼是模式,模式就是解決某一類問題的方法論,把解決這類問題的解決方法歸總到理論的高度,這就是模式。模式是一種指導,在一個良好的指導下,有助於開發人員完成任務。做出一個優秀的設計方案,能達到事半功倍的效果。而且會得到解決問題的最佳辦法。
mvc模式起源於Smalltalk語言,mvc是Model-View-Controller的簡寫。mvc減弱了業務邏輯介面和數據介面之間的耦合。使用MVC模式的好處有很多,可靠性強,高重用和可適應性,較低的生命周期成本,快速的部署,可維護性強等。裡面的細節在這兒就不作過多的講解。
SpringMVC的特點:
1、清晰的角色劃分,Spring在Model、View和Controller方面提供了一個非常清晰的劃分,這3個方面真正是各司其職,各負其責。
2、靈活的配置功能,因為Spring的核心是IOC,同樣在實現MVC上,也可以把各種類當做Bean來通過XML進行配置。
3、提供了大量的控制器介面和實現類,這樣開發人員可以使用Spring提供的控制器實現類,也可以自己實現控制器介面。
4、SpringMVC是真正的View層實現無關的,它不會強制開發員使用JSP,我們可以使用其他View技術,比如Velocity,Xskt等。
5、國際化支持,Spring的ApplicationContext提供了對國際化的支持,在這里可以很方便的使用。
6、面向介面編程,其實這不僅是springMVC的特點,整個Spring來看,這個特點都是很明顯的,因為它使開發人員對程序易於進行測試,並且很方便的進行管理。
7、Spring提供了Web應用開發的一整套流程,而不僅僅是MVC,他們之間可以很方便的結合在一起。下面有一個自己做得例子,做完這個例子後真的體會到了SpringMVC的強大。
下面開始配置我們的Springmvc工程:
首先我們配置WEB-INF目錄下的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<!--springmvc的核心是DispatcherServlet,它負責控制整個頁面的請求路徑-->
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化參數>/WEB-INF/classes/相當於src目錄-->
<init-param>
<!-- 這個param-name必須是contextConfigLocation-->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!--攔截所有以do結尾的請求-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!--處理從頁面傳遞中文到後台而出現的中文亂碼問題-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
每次配置好一個文件後建議先啟動伺服器看看是否產生異常,不然到後期會很難調試和找到異常所在。
WEB.XML配置好以後我們還需要在SRC目錄下創建一個db-config.properties文件來存放我們的數據源配置信息:
內容如下:
db.url= jdbc:mysql:///springmvcdb?useUnicode=true&characterEncoding=utf8
db.username=root
db.password=root
db.dirverClass= com.mysql.jdbc.Driver
db-config.properties配置好以後就開始配置applicationContext.xml文件:
<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- 定義個預設的控制適配器 -->
<bean
class="org.springframework.web.servlet.mvc."/>
<!-- 獲取配置文件 -->
<bean id="config"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:db-config.properties</value>
</list>
</property>
</bean>
<!-- 獲取數據源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${db.dirverClass}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
</bean>
<!--
URL到處理器的映射列表可以配置多個
mappings屬性健值為URL程序文件地址,而值為處理器的Bean名字,URL程序文件地址可採用路徑匹配的模式,如:
com/mvc/t?st.jsp:匹配com/mvc/test.jsp、com/mvc/tast.jsp等 com/mvc /*.jsp
:匹配所有com/mvc/下帶jsp後綴的URL com/mvc
/**/test.jsp:匹配所有在com/mvc路徑下或子孫路徑下的test.jsp com/mvc
/**/*.jsp:匹配所有com/mvc路徑下或子孫路徑下帶.jsp後綴的URL cn/**/web/bla.jsp:匹配
cn/option/web/dog.jsp cn/option/test/web/dog.jsp cn/web/dog.jsp的請求
-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
user.do=userAction
</value>
</property>
</bean>
<!--定義視圖通過internalResourceView來表示使用的是Servlet/jsp技術-->
<bean id="viewResolver"
class="org.springframework成都erp系統軟體開發公司http://www.yingtaow.com/erp/?web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView
</value>
</property>
<!--jsp存放的目錄-->
<property name="prefix">
<value>/jsp/</value>
</property>
<!--jsp文件的後綴-->
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="userDao" class="com.yjde.springmvc.UserDao">
<property name="dataSource"ref="dataSource"></property>
</bean>
<!--定義控制器-->
<bean id="userAction" class="com.yjde.springmvc.UserController">
<property name="">
<ref bean="userDao"/>
</property>
<property name="commandClass">
<value>com.yjde.springmvc.UserDao</value>
</property>
<property name="viewpage">
<value>userInfo</value>
</property>
</bean>
</beans>
ApplicationContext.xml文件配置好以後我們開始編寫具體的JAVA類,我們需要一個Dao類,一個controller類和一個PO
我們在MySql中創建了一張USERMBO表,裡面有三個欄位 USERID,USERNAME,USERAGE
UserDao類:
package com.yjde.springmvc;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
@SuppressWarnings("all")
public class UserDao extends JdbcDaoSupport {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
// 此方法把USEMBO表對應的欄位查詢出來依次放入userPO中
public Collection<UserPO> doquery() {
String sql = "SELECT T.USERID,T.USERNAME,T.USERAGE FROM USERMBO T";
return super.getJdbcTemplate().query(sql, new RowMapper() {
public Object mapRow(ResultSet rs, int num) throws SQLException {
UserPO user = new UserPO();
user.setUserId(rs.getInt("USERID"));
user.setUserName(rs.getString("USERNAME"));
user.setUserAge(rs.getInt("USERAGE"));
return user;
}
});
}
}
JdbcTemplate是core包的核心類。它替我們完成了資源的創建以及釋放工作,從而簡化了我們對JDBC的使用。它還可以幫助我們避免一些常見的錯誤,比如忘記關閉資料庫連接。具體請參閱API
Controller類:
package com.yjde.springmvc;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
@SuppressWarnings("all")
// SimpleFormController是spring提供的表單控制器,把頁面中Form中的元素名稱設定為和bean中的一樣,當傳入的時候Spring會自動抓取form中和Bean名稱一樣的元素值,把它轉換成一個bean,使得開發人員可以很方便的使用。
public class UserController extends SimpleFormController {
private String viewpage;
private UserDao ;
public String getViewpage() {
return viewpage;
}
public void setViewpage(String viewpage) {
this.viewpage = viewpage;
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
UserDao tmp = (UserDao) command;
Collection<UserPO> list = .doquery();
List<UserPO> users = new ArrayList<UserPO>();
UserPO user;
for (UserPO userPO : list) {
user = new UserPO();
user.setUserId(userPO.getUserId());
user.setUserName(userPO.getUserName());
user.setUserAge(userPO.getUserAge());
users.add(user);
}
Map mp = new HashMap();
mp.put("list", users);
return new ModelAndView(getViewpage(), mp);
}
public void setDao(UserDao ) {
this. = ;
}
}
UserPO類:
package com.yjde.springmvc;
public class UserPO {
private Integer userId;
private String userName;
private Integer userAge;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
類創建完成以後我們編寫兩個JSP進行測試:
Index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="user.do" method="post">
請輸入<input name="msg" type="text" />
<input type="submit" value="提交">
</form>
</body>
</html>
4. Java中的MVC是什麼
一、什麼是MVC
Model:模型層
View:視圖層
Controller:控制層
MVC (Modal View Controler)本來是存在於Desktop程序中的,M是指數據模型,V是指用戶界面,C則是控制器。使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式。比如一批統計數據你可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。
模型-視圖-控制器(MVC)是Xerox PARC在八十年代為編程語言Smalltalk-80發明的一種軟體設計模式,至今已被廣泛使用。最近幾年被推薦為Sun公司J2EE平台的設計模式,並且受到越來越多的使用 ColdFusion 和 PHP 的開發者的歡迎。模型-視圖-控制器模式是一個有用的工具箱,它有很多好處,但也有一些缺點。
二、MVC如何工作
MVC是一個設計模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。
視圖
視圖是用戶看到並與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術已層出不窮,它們包括Macromedia Flash和象XHTML,XML/XSL,WML等一些標識語言和Web services.
如何處理應用程序的界面變得越來越有挑戰性。MVC一個大的好處是它能為你的應用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發生,不管這些數據是聯機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數據並允許用戶操縱的方式。
模型
模型表示企業數據和業務規則。在MVC的三個部件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusion Components這樣的構件對象來處理資料庫。被模型返回的數據是中立的,就是說模型與數據格式無關,這樣一個模型能為多個視圖提供數據。由於應用於模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性。
控制器
控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處理請求,然後用確定用哪個視圖來顯示模型處理返回的數據。
現在我們總結MVC的處理過程,首先控制器接收用戶的請求,並決定應該調用哪個模型來進行處理,然後模型用業務邏輯來處理用戶的請求並返回數據,最後控制器用相應的視圖格式化模型返回的數據,並通過表示層呈現給用戶。
三、為什麼要使用 MVC
大部分Web應用程序都是用像ASP,PHP,或者CFML這樣的過程化語言來創建的。它們將像資料庫查詢語句這樣的數據層代碼和像HTML這樣的表示層代碼混在一起。經驗比較豐富的開發者會將數據從表示層分離開來,但這通常不是很容易做到的,它需要精心的計劃和不斷的嘗試。MVC從根本上強制性的將它們分開。盡管構造MVC應用程序需要一些額外的工作,但是它給我們帶來的好處是無庸質疑的。
首先,最重要的一點是多個視圖能共享一個模型,正如我所提及的,現在需要用越來越多的方式來訪問你的應用程序。對此,其中一個解決之道是使用MVC,無論你的用戶想要Flash界面或是 WAP 界面;用一個模型就能處理它們。由於你已經將數據和業務規則從表示層分開,所以你可以最大化的重用你的代碼了。
由於模型返回的數據沒有進行格式化,所以同樣的構件能被不同界面使用。例如,很多數據可能用HTML來表示,但是它們也有可能要用Macromedia Flash和WAP來表示。模型也有狀態管理和數據持久性處理的功能,例如,基於會話的購物車和電子商務過程也能被Flash網站或者無線聯網的應用程序所重用。
因為模型是自包含的,並且與控制器和視圖相分離,所以很容易改變你的應用程序的數據層和業務規則。如果你想把你的資料庫從MySQL移植到Oracle,或者改變你的基於RDBMS數據源到LDAP,只需改變你的模型即可。一旦你正確的實現了模型,不管你的數據來自資料庫或是LDAP伺服器,視圖將會正確的顯示它們。由於運用MVC的應用程序的三個部件是相互對立,改變其中一個不會影響其它兩個,所以依據這種設計思想你能構造良好的松偶合的構件。
對我來說,控制器的也提供了一個好處,就是可以使用控制器來聯接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據用戶的需求選擇模型進行處理,然後選擇視圖將處理結果顯示給用戶。
四、MVC的缺點
MVC的缺點是由於它沒有明確的定義,所以完全理解MVC並不是很容易。使用MVC需要精心的計劃,由於它的內部原理比較復雜,所以需要花費一些時間去思考。
你將不得不花費相當可觀的時間去考慮如何將MVC運用到你的應用程序,同時由於模型和視圖要嚴格的分離,這樣也給調試應用程序到來了一定的困難。每個構件在使用之前都需要經過徹底的測試。一旦你的構件經過了測試,你就可以毫無顧忌的重用它們了。
根據我個人經驗,由於我們將一個應用程序分成了三個部件,所以使用MVC同時也意味著你將要管理比以前更多的文件,這一點是顯而易見的。這樣好像我們的工作量增加了,但是請記住這比起它所能帶給我們的好處是不值一提。
MVC並不適合小型甚至中等規模的應用程序,花費大量時間將MVC應用到規模並不是很大的應用程序通常會得不償失。
五、MVC優點:MVC是一條創建軟體的好途徑
MVC設計模式是一個很好創建軟體的途徑,它所提倡的一些原則,像內容和顯示互相分離可能比較好理解。但是如果你要隔離模型、視圖和控制器的構件,你可能需要重新思考你的應用程序,尤其是應用程序的構架方面。如果你肯接受MVC,並且有能力應付它所帶來的額外的工作和復雜性,MVC將會使你的軟體在健壯性,代碼重用和結構方面上一個新的台階。
希望對您有所幫助!~
5. java SpringMVC編程 多步資料庫操作該怎麼處理請教高手
用到SPRING的話 可以用SPRING的註解事務
6. Java中的mvc和三層結構究竟是什麼關系
一件事,要知其然往往很簡單,要知其所以然通常不是那麼容易,就如最近重新鞏固spring的過程中,就覺得還有許多問題其實並不是十分明了。
屈指一算,手頭上做過的正式項目也有了四五六七個了,不管用的資料庫和其他一些細節上的技術如何,總的來說大的框架結構都是差不多的。
說白了,也就是mvc和三層結構。
而mvc和三層結構究竟是什麼關系,我曾在面試的過程中被人問過幾次,也曾仔細的想過、查過這個問題,但是直到此時,我也還是不能完全確定。
只不過隨著時間的積累,隨著技術的沉澱,隨著視野的拓寬,我大體上認同了兩種說法,不管別人怎麼看,我個人是覺得兩種說法都有道理,歡迎對這個問題有不同看法的朋友一起討論。
三層結構是什麼,是展現層、應用層、數據訪問層,這個基本上是沒有太大的異議的,兩種看法的來源基本上都是來自對於mvc的理解。
對於java web應用來說,不管是B/S還是C/S,大體上都可以分成服務端和客戶端兩部分,只不過B/S的客戶端就是公用的瀏覽器。
基於這種大的架構,有一種對於mvc的說法就是:
m是model,也就是和資料庫相關的那些,比如實體類和、mapper.xml等,對應著三層結構的數據訪問層;
v是view,也就是前台的頁面或者說是客戶端展示給用戶看的東西,也就是展現層;
而c就是controller以及service等具體的業務邏輯,對應著三層結構的應用層。123
而對於這種說法,為什麼我覺得有道理呢?是因為按照這種描述,就是和前台展示直接相關的東西都放在展現層。
*比如controller要直接和url打交道,而很多時候返回給客戶端的數據也會封裝成對象的形式,經常就是model;也就是說不管是controller還是model,都實打實和用戶看得到的部分相關,就劃為了展現層。
只不過在某些時候,就比如我們現在的項目中,為了進一步的實現松耦合,我們會創建一個command類,類似於實體model,然後用model操作資料庫,用command和前台打交道,道理是一樣的。
而在另一方面,我們現在項目前端使用的技術是angular js,這項技術現在也說實現了前台的mvc,有controller、service,還有數據層。
因此在這種情況下,我個人就覺得,mvc本就是一個概念,重要的是一種理解,它本身的作用只是為了實現松耦合,而不是為了mvc而mvc,未必一定要有一個唯一的答案!
歡迎有其他理解的朋友留言交流!
以下是我覺得比較好的其他理解:
來自網路的說法,是否是標准?
MVC(模型Model-視圖View-控制器Controller)是一種架構模式,可以用它來創建在域對象和UI表示層對象之間的區分。
同樣是架構級別的,相同的地方在於他們都有一個表現層,但是他們不同的地方在於其他的兩個層。
在三層架構中沒有定義Controller的概念。這是最不同的地方。而MVC也沒有把業務的邏輯訪問看成兩個層,這是採用三層架構或MVC搭建程序最主要的區別。當然了。在三層中也提到了Model,但是三層架構中Model的概念與MVC中Model的概念是不一樣的,「三層」中典型的Model層是以實體類構成的,而MVC里,則是由業務邏輯與訪問數據組成的。
這是來自網路知道的說法,是否專業?
MVC和三層架構有什麼區別就是MVC是最流行的三層架構中的一種框架,就是模型-視圖-控制器三者分離。
MVC模式(Model–view–controller)是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。
MVC模式最早由Trygve Reenskaug在1978年提出[1] ,是施樂帕羅奧多研究中心(Xerox
PARC)在20世紀80年代為程序語言Smalltalk發明的一種軟體架構。MVC模式的目的是實現一種動態的程式設計,使後續對程序的修改和擴展簡化,並且使程序某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程序結構更加直觀。軟體系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:
控制器(Controller)- 負責轉發請求,對請求進行處理。 視圖(View) - 界面設計人員進行圖形界面設計。 模型(Model)
- 程序員編寫程序應有的功能(實現演算法等等)、資料庫專家進行數據管理和資料庫設計(可以實現具體的功能)。
來自來看日出的評論,我覺得有道理
無意中看到這個問題,我前段時間也想了很久,今天看到有點感觸,不知道您怎麼看,我一直其實有疑惑的(一個剛參加工作的新人)對於mvc的三層架構,設計理念是為了實現高內聚低耦合,您說得第一種三層結構,我覺得其實並沒有達到這個低耦合的效果,因為在應用層處理業務時,並沒有將真正的業務邏輯和資料庫邏輯分離開來,僅僅將視圖和邏輯分離開了,並沒有達到低耦合的效果,個人這並不是真正的MVC。
個人的理解,mvc應該分為5層。
1.視圖層(html/jsp/)等用戶能看得到的信息,數據信息的開始和結束。
2.控制層(servlet/action),控制層不處理任何業務(包括業務邏輯和資料庫邏輯),只為控制流程,實現跳轉功能,只調用service層的結果實現跳轉功能,控制層的邏輯更偏向視圖層,為視圖層提供服務。
3.服務層(service):專門處理業務邏輯,是控制層和DAO的中間過渡層,根據DAO層的返回結果的不同,處理不同的業務邏輯,並將結果向上返回給控制層。
4.DAO層:專門處理各種資料庫邏輯,包括對資料庫的CRUD,存儲過程/函數各種操作,提供訪問資料庫的介面,DAO層更偏向於model。
5.數據模型層:專門封裝數據原始模型(javabean/DTO),本身不提供任何對資料庫的操作,只提供介面供DAO層調用數據。 從上到下依次為視圖層,控制層,服務層,DAO層,數據模型層。 個人理解,新人剛入門,有錯誤的地方希望指出共同學習。
我對來看日出的回復如下:
實際上,我個人現在的觀點是,我覺得我說的兩種都有道理,而你說的這一種也有道理,只看出發點是什麼,能不能說通。
你的這種說法,應該是實際開發時的代碼結構,後端通常有model、、service、controller,但是現在的前端,就比如我們用的angular js,實際上也分成了數據模型層、servie層、controller層、html展示層。
因此,我的理解是,網上常見的mvc解釋應該是針對之前整個系統架構比較簡單的情況,而現在前後端各種架構和技術都復雜起來了,可能便不能再這樣簡單的對應。
也就是說,我說的兩種實際上對於現在的情況可能都不對了。
隨著工作時間的增長,我對這個問題的看法一直在變,或許就是那句「看山是山,然後看山不是山,然後看山是山」,理解性的東西,本來就會隨著個人的閱歷增長而變化,今天覺得對的可能明天就覺得錯了。
所以,歸根結底,我覺得可以回到主題:我覺得對錯不重要,重要的是能不能說通,是不是自己的理解,對也好,錯也罷,能說的有理有據就夠了,因為理解會變。
7. 在mvc框架下,資料庫里的數據怎麼在java程序里走的。
意思就是:假如我們要把用戶輸入的數據插入到資料庫中。那麼先由JSP頁面來顯示表單讓用戶填寫需要插入的信息,這個JSP頁面就代表V--視圖。然後伺服器將請求交給C--控制器來處理,當然,用戶輸入的數據也會提交給控制器。控制器驗證過信息以後調用M--模型進行插入,模型一般是我們已經封裝好的對資料庫進行操作的類,在此調用相應的插入方法進行數據的插入。這樣就有個好處,M、V、C各負其責,代碼清晰明了,既便於維護又使開發層次分明。不知道我說的詳細么?
8. Java的SpringMVC框架操作資料庫,一定要建立對應的實體類嗎,能不能通過直接嵌入sql命令方式操作資料庫
springmvc只是視圖層控制容器不能直接操作資料庫,要通過持久層hibernate或者mybatis等框架對資料庫操作。可以不用實體,使用jdbc直接查詢資料庫也行,查出來轉換成json字元串